Mybatis介绍
官网地址: https://mybatis.org/mybatis-3/zh/index.html
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。
2013年11月迁移到Github。
Mybatis标签
select标签:
id :唯一的标识符.
parameterType:传给此语句的参数的全路径名或别名 例:com.test.aaa.User或user
resultType :语句返回值类型或别名。注意,如果是集合,那么这里填写的是集合的泛型,而不是集合本身(resultType 与resultMap 不能并用)
<select id="userList" parameterType="user" resultType="User">
select * from user where name =#{name}
</select>
update/insert/delete
id :唯一的标识符
parameterType:传给此语句的参数的全路径名或别名 例:com.test.aaa.User
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
resultMap标签:
id:该resultMap的标志(type类的别名)
type:返回值的类名,此例中返回EStudnet类全路径名
result标签:
property 类属性名
column 列名
<resultMap type="com.test.aaa.User" id="UserMap">
<result property="userId" column="user_id"/>
<result property="userName" column="user_name"/>
</resultMap>
if 标签:
if 判断条件是否为真,为真时拼接标签内的sql
<select id=" getStudentName " parameterType="Student" resultMap="studentMap">
select * from student ST
<if test="studentName!=null and studentName!='' ">
WHERE ST.student_name LIKE CONCAT(CONCAT('%', #{studentName}),'%')
</if>
</select>
foreach 标签:
collection :其属性的值有三个分别是list、array、map三种,对应的参数类型为:List、数组、map集合
item : 表示在迭代过程中每一个元素的别名
index :表示在迭代过程中每次迭代到的位置(下标)
open :前缀
close :后缀
separator :分隔符,表示迭代时每个元素之间以什么分隔
<select id="getUserList" parameterType="list" resultType="map">
select user_id,user_name from user where user_id in
<foreach collection="list" index="item" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
choose 标签:
有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个。MyBatis提供了choose 元素,按顺序判断when中的条件出否成立,如果有一个成立,则choose结束。当choose中所有when的条件都不满则时,则执行 otherwise中的sql。类似于Java 的switch 语句,choose为switch,when为case,otherwise则为default。
if是与(and)的关系,而choose是或(or)的关系。
<select id="getStudent" parameterType="Student" resultMap="studentMap">
select * from student st
<where>
<choose>
<when test="studentSex!= null and studentSex!= '' ">
AND st.student_sex = #{studentSex}
</when>
<when test="studentBirthday!=null">
AND ST.student_birthday = #{studentBirthday}
</when>
<otherwise>
AND ST.class_id = #{classEntity.classID}
</otherwise>
</choose>
</where>
</select>
Where标签:
如果where包含的标签中有返回值的话,它就插入一个‘where’。此外,如果标签返回的内容是以AND 或OR 开头的,则它会剔除掉。
<select id="getStudent" parameterType="Student" resultMap="studentMap">
select * from student ST
<where>
<if test="studentName!=null and studentName!='' ">
ST.student_name like CONCAT(CONCAT('%', #{studentName}),'%')
</if>
<if test="studentSex!= null and studentSex!= '' ">
AND ST.student_sex = #{studentSex}
</if>
</where>
</select>
set+if标签:
使用set标签可以将动态的配置SET 关键字,和剔除追加到条件末尾的任何不相关的逗号。
需要配合if标签使用
<update id="updateStudent" parameterType="Student">
update student
<set>
<if test="studentName!=null and studentName!='' ">
student_name = #{studentName},
</if>
<if test="studentSex!=null and studentSex!='' ">
student_sex = #{studentSex},
</if>
</set>
WHERE student_id = #{studentID};
</update>
trim标签:
prefix : 给sql语句拼接的前缀
suffix : 给sql语句拼接的后缀
prefixOverrides : 去除sql语句前面的关键字或者字符,该关键字或者字符由prefixOverrides属性指定,假设该属性指定为"AND",当sql语句的开头为"AND",trim标签将会去除该"AND"
suffixOverrides : 去除sql语句后面的关键字或者字符,该关键字或者字符由suffixOverrides属性指定
<insert id="insertStudent" parameterType="com.test.aaa.Student">
insert into student
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="studentId != null">student_id,</if>
<if test="studentName != null">student_name,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="studentId != null">#{studentId},</if>
<if test="studentName != null">#{studentName},</if>
</trim>
</insert>