MyBatis框架

Posted 21karat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis框架相关的知识,希望对你有一定的参考价值。

ORM框架

应用程序中的POJO对象数据库表相互映射的框架称为对象关系映射框架(Object Relational Mapping),Hibernate与Mybatis都可以称为ORM框架

只是Hibernate的设计理念是完全面向POJO的(全映射框架),而MyBatis则不是(半映射框架)

Hibernate

1.Hibernate在需要存储过程与复杂SQL时,映射关系使用不上,需要自己用代码处理,没办法完全的掌控数据库的SQL

2.优化SQL是高并发,高响应系统中必然的要求,这种不能完全掌控SQL的持久层框架只适用与企业管理系统,不适用与电商类应用

3.映射规则可以通过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>
View Code

4.Hibernate会根据映射关系来生成对应的SQL,通过操作POJO来操作数据库中的表

MyBatis

相对于Hibernate而言,持久层框架MyBatis需要编写SQL,而且也提供映射规则,它的动态SQL自动映射接口编程等功能使它简单易用

本身支持SQL优化,使它满足高并发场景的应用条件,当下最为流行

1.优势在于灵活,提供了接口编程(数据库访问层DAO层是不需要实现类的,只提供一个接口即可)

2.MyBatis提供自动映射,动态SQL,级联,缓存,注解,代码和SQL分离等特性

3.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>
View Code

4.MyBatis需要提供接口以及对应SQL的XML文件,自定义SQL意味着工作量增加,但是这也是它优于Hibernate的地方,

   自定义SQL意味着可以SQL调优,提高系统性能

以上是关于MyBatis框架的主要内容,如果未能解决你的问题,请参考以下文章

MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段

Mybatis框架第二篇

markdown [mybatis参考]关于mybatis #mybatis的一些片段

mybatis第二天

MyBatis动态SQL

mybatis学习(39):动态sql片段