本文已参与「新人创作礼」活动,一起开启掘金创作之路。
今天详细看下Mybatis mapper映射文件,由于MyBatis强大的语句映射,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 致力于减少使用成本,让用户能更专注于 SQL 代码。
记录下官网:
官网:mybatis.org/mybatis-3/zh/sqlmap-xml.html
我们按照顺序来看下这mybatis的几个顶级元素标签:
SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):
-
cache – 给定命名空间的缓存配置。
-
cache-ref – 其他命名空间缓存配置的引用。
-
resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象
-
sql – 可被其他语句引用的可重用语句块。
-
insert – 映射插入语句
-
update – 映射更新语句
-
delete – 映射删除语句
-
select – 映射查询语句
一、缓存
二、自定义缓存:
三、resultMap – 用来描述如何从数据库结果集中来加载对象
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xing.mapper.UserMapper">
<resultMap id="BaseResultMap" type="com.xing.entity.UserEntity" autoMapping="true" >
<result column="id" jdbcType="INTEGER" property="id" />
<result column="user_name" jdbcType="VARCHAR" property="userName" />
<result column="pass_word" jdbcType="VARCHAR" property="passWord" />
<result column="real_name" jdbcType="VARCHAR" property="realName" />
</resultMap>
</mapper>
可以看到以上代码就实现了数据库表user(UserMapper)及字段和属性的映射,详解可以看官网。
四、sql
用来定义可重用的 SQL 代码片段,以便在其它语句中使用。参数可以静态地(在加载的时候)确定下来,并且可以在不同的 include 元素中定义不同的参数值。
<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>
这个 SQL 片段可以在其它语句中使用,例如:
<select id="selectUsers" resultType="map">
select
<include refid="userColumns"><property name="alias" value="t1"/></include>,
<include refid="userColumns"><property name="alias" value="t2"/></include>
from some_table t1
cross join some_table t2
</select>
也可以在 include 元素的 refid 属性或内部语句中使用属性值,例如:
<sql id="sometable">
${prefix}Table
</sql>
<sql id="someinclude">
from
<include refid="${include_target}"/>
</sql>
<select id="select" resultType="map">
select
field1, field2, field3
<include refid="someinclude">
<property name="prefix" value="Some"/>
<property name="include_target" value="sometable"/>
</include>
</select>
五、insert
新增、更新、删除的标签属性都差不多
<insert id="insert" parameterType="com.xing.entity.UserEntity">
insert into user
(id, userName, passWord,realName)
values
(#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},#{realname,jdbcType=VARCHAR})
</insert>
六、update
<update id="updateByExampleSelective" parameterType="map">
update user
<set>
<if test="record.id != null">
id = #{record.id,jdbcType=INTEGER},
</if>
<if test="record.username != null">
userName = #{record.username,jdbcType=VARCHAR},
</if>
<if test="record.password != null">
passWord = #{record.password,jdbcType=VARCHAR},
</if>
<if test="record.realname != null">
realName = #{record.realname,jdbcType=VARCHAR},
</if>
</set>
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
七、delete
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from user
where id = #{id,jdbcType=INTEGER}
</delete>
八、Select 查询
<select id="getOne" resultType="com.xing.entity.UserEntity"
parameterType="int" flushCache="false"
useCache="true"
timeout="10000"
fetchSize="256"
statementType="PREPARED">
select * from user where id = #{id}
</select>
总结:
Mybatis mapper xml文件的几个顶级元素,点击”阅读原文“可以直接到Mybatis中文网,每个标签及属性都写的明明白白的。