hibernate和Ibatis的区别是什么

用了很久的hibernate和ibatis  总结一下我对这两个框架的感悟!和解决hibernate的懒加载问题,死循环等问题


首先 我们从方便说起 hibernate提供的模板 让我们很方便的操作数据库 hibernate只需要映射对应的 实体类 对象之间的关系映射表间的关系,那么hibernate是个不错的选择

很多时候 我们都知道 hibernate的懒加载是个很让人头疼的问题 但是没办法 这样的问题总会出现 出现懒加载是因为我们的对象没被调用之前 session就已经关闭了.
解决这个问题也很简单 只需要配置fetch=FetchType.LAZY
  @OneToMany(mappedBy="",targetEntity=bean.class,
  cascade=CascadeType.ALL,fetch=FetchType.LAZY)

上次的SQL监控项目  让我对hibernate的死循环 深深的感到了恐惧  发送到客户端的数据 那叫一团糟 

我解决的办法是在需要过滤的model上面加上注解@JsonFilter("")
然后我再Action 通过封装的json过滤器 将实体中需要过滤的字段过滤就可以了
代码:
@Entity
@Table(name="t_application")
@JsonFilter("applicationFilter")
public class Application { 
	/**
	 * OID
	 */
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="pk_id")
	private int id;
	/**
	 * 应用名称
	 */
	@Column(name="f_name")
	private String name;
	/**
	 * 状态(可用,禁用)
	 */
	@Column(name="f_state")
	private String state;
	/**
	 * 版本
	 */
	@Column(name="f_versions")
	private String versions;
	/**
	 * 备注
	 */
	@Column(name="f_remark")
	private String remark;
	/**
	 * 子系统集合
	 * mappedBy = "applications"是多方对应的属性
	 * cascade = CascadeType.ALL 级联操作
	 * targetEntity 集合中存放的类型
	 */
	@OneToMany(mappedBy="applications",targetEntity=SubSystem.class,
			   cascade=CascadeType.ALL,fetch=FetchType.LAZY)
	@Column(name="fk_subsystemId")    
	private List subSystem=new ArrayList(); 
	
	public Application(){

	} 
}
在Action中我过滤要发送到客户端的数据 不需要的字段就不要写在filterOutAllExcept里面
public void jsonFilter()throws Exception{ 
	/*	//要过滤的json对象
		filterProvider.addFilter("menuFilter", 
	   SimpleBeanPropertyFilter.filterOutAllExcept("id","name","state","versions","remark",
			   "subSystem"));*/
		//subSystem是一个集合 造成死循环的关键是在
			subSystem又有一个应用节点  只要在subSystem过滤掉应用程序 那么死循环就解决了
 
     //过滤子系统 
     filterProvider.addFilter("SubSystemFilter",SimpleBeanPropertyFilter.filterOutAllExcept("id","name","state","versions","remark","sortcode")); 
      
     om.setFilters(filterProvider); 
   } 
   
 
   
hibernate虽然很方便 但是 对于多表之间的查询,修改等 性能是烂的  所以 hibernate的性能也是我们考虑的因素

ibatis 能够我们自己书写灵活的sql语句 但是这样就加大了程序员的操作 但是得到的却是性能上的提升

项目中的ibatis映射文件





		
		
		
			
			
			
			
			
			 
		
		
		
		
		
		
		
		
		
		
		
		
			INSERT INTO t_application(f_name,f_state,f_versions,f_remark,fk_subsystemId)
				VALUES(#app.name#,#app.state#,#app.versions#,#app.remark#,#subSystemId#);
		
		
		 
		
		


 
   


 
   
 

你可能感兴趣的:(hibernate和Ibatis的区别是什么)