持久层框架详解

什么是持久层框架

"持久"就是将数据保存到可掉电式存储设备中,,简单的说,就是将内存中的数据保存到关系型数据库、文件系统、消息队列等提供持久化支持的设备中。

常用持久层框架对比

  • mybatis官方文档就说了他是一个半自动化的持久层框架,相对于按自动的hibernate更加灵活可控;
  • hibernate具有三级缓存,一级缓存默认是开启的,二级缓存需要手动开始并配置优化,三级缓存可以整合业界流行的缓存技术:redisecache等等。
  • JPA是标准接口,Hibernate是实现,jpa是一种规范,hibernate也是遵从这种规范;
  • ``springDataJpa`是Spring基于Hibernate开发的一个JPA框架,所以说springDataJpa里面包含了hibernatenate

实例对比

使用hibernate,mybatis, spring data jpa分别实现

SQL:select * from User where name like '?' and age > ?

hibernate

public interface UserDao{
    List<User> findByNameLikeAndAgeGreaterThan(String firstName,Integer age);
}
 
public class UserDaoImpl implements UserDao{
    @Override
    public List<User> findByFirstNameAndAge(String firstName, Integer age) {
        //具体hql查找:"from User where name like '%'"+firstName + "and age > " + age;
        return hibernateTemplateMysql.execute(new HibernateCallback() {
            @Override
            public Object doInHibernate(Session session) throws HibernateException {
                String hql = "from User where name like '?' and age > ?";
                Query query = session.createQuery(hql);
                query.setParameter(0, firstName+"");
                query.setParameter(1, age);
                return query.uniqueResult();
            }
        });
    }
}

mybatis

@Mapper
public interface UserMapper {
    Increment findByNameLikeAndAgeGreaterThan(String name,int age);
}
 
 
<select id="findByNameLikeAndAgeGreaterThan" parameterType="java.lang.Integer" resultMap="UserMap">
    select
      u.*
    from
      user u
    <where>
       u.name like ?1 and u.age>?2
    </where>
</select>
    
<resultMap id="UserMap" type="com.txxs.po.User">
    <result column="id" property="id"/>
    <result column="name" property="name"/>
    <result column="age" property="age"/>
</resultMap>

spring data jpa

public interface UserDao extends JpaRepository<User, Serializable>{
    List<User> findByNameLikeAndAgeGreaterThan(String name,Integer age);
}
//为了增加代码的可读性可以使用注解的方式,这样方法的命名就不需要严格按照规范
@Query("select * from User u where u.name like ?1 and u.age>?2")

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×