1.hibernate 和 mybatis 的区别
·实现上的区别:mybatis只有一个核心jar包,另外和spring整合需要mybatis-spring的jar包,使用缓存需要mybatis-ehcache的jar包,而hibernate需要一系列的jar包,这也侧面反映了mybatis相对小巧,简单,而hibernate相对来说比较强大,复杂;mybatis的配置主要包括一个用于映射各种类的xml文件以及和实体类一一对应的映射文件,hibernate包括hibernate.cfg.xml和实体类的配置文件hibernate.hbm.xml。
·hibernate属于全自动的ORM框架,着力点在于POJO和数据库表之间的映射,完成映射即可自动生成和执行sql;而mybatis相对来说属于半自动的ORM框架,着力点在于POJO和SQL之间的映射,自己编写sql语句,然后通过配置文件将所需的参数和返回的字段映射到POJO。如果说hibernate属于ORM Mapping,那么mybatis相当于SQL Mapping.
·从上面的描述也可以看出,hibernate整合的项目比mybatis整合的项目更容易移植,因为hibernate使用的HQL语句与具体的数据库无关,而mybatis编写的sql语句都是和数据库相关联的,可移植性差。
·hibernate拥有自己的日志统计slf4j,而mybatis自身不带有日志记录。
·缓存方面,都可以使用第三方的缓存。hibernate有一级缓存和二级缓存之分,一级缓存属于session级别的缓存,需要对session的生命周期进行管理,二级缓存属于sessionFactory级别的缓存;mybatis虽然也有一级缓存,但是和spring整合使用时每次都是重新打开一个session进行操作,所以是无法使用,当然可以开启二级缓存,被所有sqlsessiong共享。
·mybatis需要手动写sql语句,这既是好的一面也是不好的一面,与hibernate相比好的一面在于可以高度优化sql语句以提升系统性能;不好的一面在于工作量相对比较大;如果牵扯到数据库的修改,则mybatis相对于hibernate的修改量更大
·学习成本上,hibernate相对来说,周期比较长。
第三方缓存 ehcache配置:
micro(比较全的配置)
mybatis的一些配置
mybatisconfig.xml
其中一个pojo
insert into rp_app_account (operator_id,orderno,price,mobile,flow_package,operator_type,status,created_date,finish_date,last_modified,remark,seller_id,version)
values (#{operatorId},#{orderNo},#{price},#{mobile},#{flowPackage},#{operatorType},#{status},now(),#{finishDate},now(),#{remark},#{sellerId},#{version})
update rp_app_account set status = #{status} ,last_modified = now(),refund_operator_id = #{refundOperatorId} where orderno = #{orderNo}
DaoImpl继承该抽象类即可使用sqlsession
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
* @author
*
*/
public abstract class AbstractMyBatisBaseRepository extends
SqlSessionDaoSupport {
@Autowired
public final void init(SqlSessionTemplate sessionTemplate) {
this.setSqlSessionTemplate(sessionTemplate);
}
}
开发环境本地库配置
配置cache
都导入到spring配置文件中,用import
${config.hibernate.show.sql}
${config.hibernate.show.sql}
org.hibernate.cfg.ImprovedNamingStrategy
org.hibernate.dialect.MySQL5Dialect
none
org.hibernate.cache.ehcache.EhCacheRegionFactory
org.hibernate.cache.SingletonEhCacheRegionFactory
ehcache.xml
true
true
ENABLE_SELECTIVE