您的位置:首页 > 其它

ofbiz配置加增删改查,详细教程

2016-01-18 10:06 344 查看
一、安装OFBIZ

1.配置数据库

比如我的ofbiz的根目录为H:\workspace\csofbizworkspace\weidaPlatform设置为OFBIZHOME

则打开OFBIZHOME/framework\entity\config\entityengine.XML文件

修改数据源名称:

然后往下查找,你定义的datasource-name的数据库,比如我这里是localmssql

修改jdbc-uri 和账号和密码

2.创建数据库

在数据库中手动创建你指定的数据库,我这里是weidaTest

3.打开命令提示符窗口

使用cd命令进入到ofbiz根目录

比如我的ofbiz根目录为H:\workspace\csofbizworkspace\weidaPlatform

然后输入ant load-demo执行

4.执行完毕后,进入创建的数据库看下,是不是增加了表,然后再打开user_login表看了,里面是否有数据,如果有,则表示安装完成

二、新建应用

修改配置文件

1.把ofbiz导入到eclipse中

2.在OFBIZHOME/hot-deploy文件夹下,重新复制一份weidaTest并重命名为weidaTest2

3.打开weidaTest2根目录下的build.xml文件,把weidaTest全部替换为weidaTest2

4.打开weidaTest2根目录下的ofbiz-component.xml文件,把weidaTest全部替换为weidaTest2,并清掉所有的服务和实体和初始数据的配置

5.把weidaTest2/webapp下的weidaTest更改为weidaTest2

6.打开文件wedaTest2/wepapp/weidaTest2/WEB-INF/web.xml

把weidaTest替换为weidaTest2

7.打开weidaTest2/widget/CommonScreens.xml把所有的weidaTest替换为weidaTest2

8.打开weidaTest2/widget/ProductMenus.xml把所有的weidaTest替换为weidaTest2

9.把entitydef和servicedef,data,src清空

10.在src右键 build path->use assource folder

到目前为止基本配置文件已经修改完毕

现在开始ofbiz的流程学习

1.打开weidaTest2/webapp/weidaTest2/WEB-INF/controller.xml

使其内容如下图:

Request-map 表示一个rul配置,其中属性说明如下:

rui:该rul的具体值 比如我写的是main,则其完整的url值为http://localhost:8180/weidaTest2/main

Security 安全配置属性,https是否使用https连接,auth是否必须登陆

Response默认的name值有success,和error其作用跟struts2中的相试,就是根据事件返回的值不同,跳转到不同的视图去,这里没有配置事件,则默认都是跳转到success那里

设置为request-map后,设置view-map

name值对应response里的value值

Page指示视图的配置文件路径和其name值,#后面的就是name值

这里指定视图的配置文件路径为weidaTest2/widget/weidaScreens.xml。Name值为main

2.打开weidaTest2/widget/weidaScreens.xml,添加如下代码

Screen 里的name就是上面#后面的值

这里又指明了实际的前台页面路径:weidaTest2/webapp/weidaTest2/weidaTest.ftl

3.在weidaTest2/webapp/weidaTest2下新建weidaTest.ftl,输入测试两个字。

4.运行程序后台,双击OFBIZHOME/tools/startofbiz.bat

5.在浏览器中输入http://localhost:8180/weidaTest2/main

三、事件

1.修改controller.xml文件,添加事件

其中path内容为包名.类名,invoke是类的方法名

2.创建类com.test.WeidaTestEvent,然后创建静态方法weidaTest

该方法的返回值,传参都不能修改。

3.给前台传值

4.修改weidaTest.ftl

5.关闭后台,编译java类

右键--Run AS -Ant Build

6.开启程序,然后再浏览器中输入http://localhost:8180/weidaTest2/main

四、服务

1.创建类com.test.WeidaTestServices,然后新增静态方法weidaTest

2.在servicedef中创建services.xml

其中service 中的name代表服务名称,location为加包名的类名称,invoke为类的方法

其他attribute定义服务的传入值和传出值。Model=OUT表示传出值,model=IN表示传入值

Name表示参数的名称,type表示参数的类型,optional表示该参数是否为必须的,false为必须的。

以weidaTest2服务来说,其没有传入值,只有一个传出值,只有一个参数为name类型为字符串

所有attribute的name值为name,

model为OUT

Type为String

3.打开OFBIZHOME/ofbiz-component.xml

把服务的配置文件加入

4.修改事件,其调用服务

其调用的服务方法为

EventUtil.getServicesResult方法

其中weidaTest2为服务的名称

5.关闭程序,然后编译java类

6.开启程序

五、数据库操作

数据库操作一般放到服务中

1.创建实体

在entitydef文件夹下创建文件UserInfo_entitymodel.xml

其内容为:

entity-name 表示实体名称

field字段定义,其中name表示字段名称,type表示字段类型,col-name表示其在数据库中实际的名称。Type可在OFBIZHOME/framework\entity\fieldtype中查找,比如我的数据库中mssql,则打开文件fieldtypemssql.xml

2.把实体配置文件导入到应用中

打开OFBIZHOME/ofbiz-component.xml

添加内容

<entity-resourceloader="main"location="entitydef/UserInfo_entitymodel.xml"reader-name="main"type="model"/>

2.执行ant load-demo,然后看表是否已经创建

3.操作数据库方法

1)获取所有数据

import org.cs.dao.BaseDao;
importorg.cs.dao.BaseDaoIml;

BaseDao baseDao=new BaseDaoIml("default");

SqlWhereUtilsqlWhere=newSqlWhereUtil();

List<GenericValue> list=baseDao.getList("WeidaTest",sqlWhere,
UtilMisc.toList("testId DESC"));

说明:

1.BaseDao BaseDaoIml为数据库操作类

注意要导入org.cs.dao下的

2.SqlWhereUtil拼接sql查询语句工具类

3.getList 第一个参数为实体名称,第二个参数为查询条件,第三个参数为排序其为List类型

2)分页查询

Map<String,Object>data=baseDao.getPageList("WeidaTest",sqlWhere,
UtilMisc.toList("testId DESC"), 0,30);
List<GenericValue> list3=(List<GenericValue>)data.get("list");
data.get("dataSize");

getPageList方法:前三个参数与getList一样,第四个参数代表现在是第几页,页数从0开始,最后一个参数代表一页多少条数据

该方法返回Map对象,其里面有list和dataSize两个内容,List即为查出来的数据,dataSize,为总条数。

3)保存和更新

Map<String,Object> data=newHashMap<String,Object>();
data.put("testId",baseDao.getNextId("WeidaTest"));
data.put("testName","xxx");
baseDao.save("WeidaTest",data);

baseDao.getNextId 获取下一个自增长主键值,weidaTest为实体名称

如果主键在数据库中存在,则为更新,不存在则为保存。

4)条件更新

baseDao.updateBySqlWhere(entityName,fieldsToSet,
sqlWhere)

第一个参数为实体名称,第二个参数为Map对象,为需要更改的字段及其值,第三个参数为查询条件;

Map<String,Object> fieldsToSet =FastMap.newInstance();

fieldsToSet.put(“testName”,”cxw”);

SqlWhereUtil sql=newSqlWhereUtil();

sql.addSqlWhere(“testId”,”=”,”1”);

baseDao.updateBySqlWhere(“weidaTest”, fieldsToSet,sql)

这里对应的sql语句为update weida_test set testName=’cxw’ where testId=’1’



注意:sql.addSqlWhere的第三个参数的值类型要与字段的类型对应,如果testId字段对应java的字符串类型,则第三个参数必须为字符串。

5)条件删除

sqlWhere=newSqlWhereUtil();
baseDao.removeBySqlWhere("WeidaTest",sqlWhere);

第一个参数为实体名称,第二个为查询条件

6)多表查询

EntityUtilentity=new EntityUtil();
entity.addEntity("WeidaTest"); //实体名称
entity.addEntity("WeidaTest2"); //实体名称

entity.addPrex("WeidaTest","p"); //给表的每个字段加前缀
entity.addPrex("WeidaTest2","l");

entity.addJoin("WeidaTest","WeidaTest2"); //设置关联关系
WeidaTest左关联WeidaTest2

entity.addJoinId("WeidaTest","weidaId"); //设置实体的关联字段
entity.addJoinId("WeidaTest2","weidaId");

Map<String,Object> data2=baseDao.getJoinPageList(entity);

返回Map对象,其内容与getPageList一样

这段代表等价于sql语句:

selectt1.weidaId as pWeidaId,t1.weidaName as pWeidaName,t2.weidaId aslWeidaId,t2.weidaName as lWeidaName
fromweidaTest t1 left outer join weidaTest2 on t1.weidaId=t2.weidaId

7)使用原生sql语句
String sql="select* from weida_test";
List<Map<String,Object>> list2=baseDao.getListByJDBC(sql);

baseDao.executeByJDBC(sql);没有返回值

baseDao.executeByJDBCUpdate(sql);返回int类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: