ofbiz框架入门例子详解(首篇)-------插入篇

目前在一家公司实习,该公司用的是ofbiz框架,我便放下SSH,投身上ofbiz的学习上去,一开始是很抵触的,但是学着学着发现其实框架道理是相似的,为了将代码解耦,每个框架都有自己的独特解耦之道和精妙之处,万事开头难,所以不要轻易放弃。


熟悉了一周大概摸清了ofbiz的轮廓,顺手开发一个ofbiz入门的例子(对user的增删改查,以及分页展示)

开发过程中也遇到了很多问题,经过一番推敲,已经摸到问题的缘由,之后会有介绍


列出一个目录:关于ofbiz框架的crud以及分页都是简单的demo供入门者学习一下

  • 增:其实就是本篇博文
  • 删:ofbiz框架入门例子---删除篇
  • 改:ofbiz框架入门例子---修改篇
  • 查:ofbiz框架入门例子---查询篇
  • 分页:ofbiz框架入门例子---分页篇

(原创作品,请勿抄袭)


下面进入正题:

开发环境:jdk6+mysql5.5+ofbiz9+eclipse

首先,安装好ofbiz,把数据库配置到本地mysql,可用参照:配置ofbiz连接本地mysql

  • 创建component

配置好之后,可以开始进行开发了,将ofbiz项目的build.xml添加到eclipse中的ant面板                                                                                                                                                   

点击create-component,会出现一些对话框,分别是component-name,component-resource-name,webapp-name,base permission,confirm 

ofbiz框架入门例子详解(首篇)-------插入篇_第1张图片ofbiz框架入门例子详解(首篇)-------插入篇_第2张图片


  • 创建好component后,可以进行开发了

在数据库中建好user表,在你的component根目录里找到entitydef目录下的entitymodel.xml(该文件是配置entity实体类,与数据库中的表对应)


user表:

字段名 类型 长度   是否主键
id int 10 Y
username varchar 50 N
password varchar 50 N
nickname varchar 50 N
registerdate datetime 0 N

配置entity:


	        
	        
	        
	        
	        
	        
	    


  • 配置entity,entitygroup,datasource

配好entity后,还需修改entitydef目录entitymodel.xml文件(创建一个entity-group),把entity附属到这个group中,在ofbiz-component.xml注册这个group配置文件然后在entityengine.xml配置好entity-group与datasource的映射,使entity-group和datasource对应起来,这样在java类中就可以操作user表了

在entitygroup.xml配置文件中标签中添加一句:


在entityengine.xml文件中的default delegator中配置entitygroup与datasource的映射


datasource:


        
        
        
        
        
    

现在,已经java类中可以操作User表了


  • 编写java类,(event和service)

在src目录下创建UserService.java和UserEvent.java(分别放在com.service和com.event包下)

这里的service和event中的方法必须是static的否则会报错,请参考:ofbiz调用服务报错

UserService.java

public class UserService {
	
	public static Map registerUser(DispatchContext ctx, Map context){
		
		Map result = ServiceUtil.returnSuccess();
		
		 //取得实体引擎实例
       		GenericDelegator delegator = ctx.getDelegator();
        
	        //创建一条Uom记录的对象
        	GenericValue user = delegator.makeValue("User");


		user.set("username", context.get("username"));
		user.set("password", context.get("password"));
		user.set("nickname", context.get("nickname"));
		//取得当前时间戳
		Timestamp currentTime = UtilDateTime.nowTimestamp();
		user.set("registerdate", currentTime);
		
		
		try {
			//插入数据
			user.create();
		} catch (GenericEntityException e) {
			e.printStackTrace();
			
			return ServiceUtil.returnFailure();
		}
		
		return result;
	}
}

UserEvent.java

public class UserEvent {
	
	//方法必须是static
	 public static String register(HttpServletRequest req, HttpServletResponse resp) throws UnsupportedEncodingException {
		 
		 LocalDispatcher dispatcher = (LocalDispatcher) req.getAttribute("dispatcher");
		 Map results = null;
		 Map contexts = UtilMisc.toMap();
		 //从请求中得到参数
		 String username = req.getParameter("username");
		 String password = req.getParameter("password");
		 String nickname = req.getParameter("nickname");

		 //判断参数是否为空
		 username = username == null || "".equals(username) ? "test" : username;
		 password = password == null || "".equals(password) ? "test" : password;
		 nickname = nickname == null || "".equals(nickname) ? "test" : nickname;
		 //contexts为传入service的参数列表
		 contexts.put("username", username);
		 contexts.put("password", password);
		 contexts.put("nickname", nickname);
		 
		 try {
			 //调用注册的service
			 results = dispatcher.runSync("registerUser", contexts);
			 
		 } catch (GenericServiceException e) {
			e.printStackTrace();
			return "error";
		 }
		 
		 return "success";
	 }
	 
}


  • 配置service和event

service.xml


    	
		
		
		
		
		
	

controller.xml中配置request-map


    	
    	
    	
    

这里的response是返回数据的时候映射到view层的配置,对应着


  • 配置和编写view层

注册的view



	        

register.ftl


username
password
nickname




显示结果的view


这里映射到screen中的show组件

        

这里只是简单的screen直接对应到show.ftl


show.ftl





hello world.




	${request.getAttribute("mes")?default("")}    
	
	
	
		<#assign users = request.getAttribute("users")?if_exists>
		
		<#list users as user>  
			
username password pickname registerDate
${user.username} ${user.password} ${user.nickname} ${user.registerdate}

freemaker不再过多解释


在user表中添加两条数据


运行结果截图:


ofbiz框架入门例子详解(首篇)-------插入篇_第3张图片







你可能感兴趣的:(ofbiz)