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> subSystem=new ArrayList<SubSystem>(); 
	
	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映射文件
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMap      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"      
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="app">
		<typeAlias alias="appbean" type="com.witt.monitoring.model.Application"/>
		
		<resultMap class="appbean" id="appMap">
			<result property="id" column="pk_id"/>
			<result property="name" column="f_name"/>
			<result property="state" column="f_state"/>
			<result property="versions" column="f_versions"/>
			<result property="remark" column="f_remark"/>
			<result property="subSystem" column="fk_subsystemId" select="subsystem.findlist"/> 
		</resultMap>
		
		<select id="findList" resultMap="appMap">
			 select * from t_application where 1=1
			  limit #pageNo#,#pageCount#;
		</select>
		
		<select id="findCount" resultClass="int">
			 select count(*) from t_application where 1=1;
		</select>
		
		<select id="findById" resultMap="appMap">
		
			select * from t_application where pk_id=#t_application#;
			
		</select>
		
		<select id="findByIdservice">
			select * from t_application where pk_id=#id#;
		</select>
		
		<!-- 添加一个应用程序 -->
		<insert id="insertApplication">
			INSERT INTO t_application(f_name,f_state,f_versions,f_remark,fk_subsystemId)
				VALUES(#app.name#,#app.state#,#app.versions#,#app.remark#,#subSystemId#);
		</insert>
		
		<!-- 查询所有的应用程序 --> 
		<select id="findAllApplication" resultMap="appMap">
			select * from t_application;
		</select>
		
</sqlMap>





 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值