- ORM框架:应用程序中的POJO对象和数据库表相互映射的框架称为对象关系映射框架(Object Relational Mapping),Hibernate与Mybatis都可以称为ORM框架,只是Hibernate的设计理念是完全面向POJO的(全映射框架),而MyBatis则不是(半映射框架)。
- Hibernate
- Hibernate在需要存储过程与复杂SQL时,映射关系使用不上,需要自己用代码处理,没办法完全的掌控数据库的SQL
- 优化SQL是高并发,高响应系统中必然的要求,这种不能完全掌控SQL的持久层框架只适用与企业管理系统,不适用与电商类应用
- 映射规则可以通过XML以及注解实现,类似如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 '-//Hibernate/Hibernate Mapping DTD 3.0//EN' 4 'http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd'> 5 <hibernate-mapping> 6 7 <class name="com.pojo.user" table="tb_user"> 8 <!-- id为主键的配置: 9 id-name:实体类中的属性名 10 column-name:数据库表中主键名 11 generator-class:主键生成策略 --> 12 <id name="id" > 13 <!-- 数据库表中主键字段名与实体类的属性名相同时,column可以省略不写 --> 14 <!-- <column name="id"></column> --> 15 <generator class="native"></generator> 16 </id> 17 18 <!-- property:非主键属性的配置 19 property-name:实体类中属性名 20 column-name:实体类中属性对应的数据库表中字段名 21 --> 22 <!-- 数据库表中主键字段名与实体类的属性名相同时,column可以省略不写 --> 23 <!-- <property name="username"> 24 <column name="username"/> 25 </property> --> 26 <property name="username"/> 27 <property name="pwd"/> 28 <property name="name"/> 29 </class> 30 </hibernate-mapping>
-
- Hibernate会根据映射关系来生成对应的SQL,通过操作POJO来操作数据库中的表
- MyBatis:相对于Hibernate而言,持久层框架MyBatis需要编写SQL,而且也提供映射规则,它的动态SQL,自动映射,接口编程等功能使它简单易用,本身支持SQL优化,使它满足高并发场景的应用条件,当下最为流行。
- 优势在于灵活,提供了接口编程(数据库访问层DAO层是不需要实现类的,只提供一个接口即可)
- MyBatis提供自动映射,动态SQL,级联,缓存,注解,代码和SQL分离等特性
- MyBatis映射规则可以通过XML以及注解实现,类似如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <mapper namespace="cn.dao.UserMapper"> 6 <!-- 查询对应页码页数记录的所有相关信息 --> 7 <select id="getLikeUsers" parameterType="map" resultType="user"> 8 SELECT id,username,password,type from user 9 WHERE username LIKE CONCAT('%',#{user.username},'%') 10 LIMIT ${pageSize *(pageNum - 1)} , ${pageSize} 11 </select> 12 <!-- 查询总记录条数 --> 13 <select id="getLikeUsersCount" parameterType="map" resultType="java.lang.Integer"> 14 SELECT COUNT(1) FROM user WHERE username LIKE concat('%',#{user.username},'%') 15 </select> 16 <!-- 添加 --> 17 <insert id="addUser" parameterType="user"> 18 insert into user (username,password,type) values (#{username},#{password},#{type}) 19 </insert> 20 <!-- 删除 --> 21 <delete id="delUser" parameterType="user"> 22 delete from user where id=#{id} 23 </delete> 24 <!-- 获取单行记录(查) --> 25 <select id="findUser" parameterType="user" resultType="user"> 26 SELECT id,username,password,type from user 27 WHERE id=#{id} 28 </select> 29 <!-- 修改 --> 30 <update id="updateUser" parameterType="user"> 31 update user set username=#{username},password=#{password} 32 where id=#{id} 33 </update> 34 </mapper>
-
- MyBatis需要提供接口以及对应SQL的XML文件,自定义SQL意味着工作量增加,但是这也是它优于Hibernate的地方,自定义SQL意味着可以SQL调优,提高系统性能。