【面试之持久化框架】hibernate、mybatis、jpa规范

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);
	}
}

和spring整合的配置文件



	
 	

    

		开发环境本地库配置
	
	

	

	
		
	

	
	
		
	
		
			
			
			
			
			
			
			
			
			
			
			
			
			
			
		
	

	
	
	
		
	

配置cache



	
	



	

	
	 

都导入到spring配置文件中,用import
jpa的配置文件persistenceContext.xml,hibernate实现



    

    

    

    

    

    

    
        ${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
    

    

    


spring配置文件中

 




你可能感兴趣的:(面试,interview)