MyBatis:理解 mapper.xml 文件和使用

1
2
3
4
5
6
7
8
9
<mapper namespace="org.mybatis.mapper.UserMapper">
<!-- useGeneratedKeys:返回主键
keyProperty:返回的主键对应实体类的属性字段
-->
<insert id="saveUser" parameterType="com.mybatis.domain.User" useGeneratedKeys="true" keyProperty="id">
insert into user values(#{id},#{username},#{birthday},#{sex},#{address})
</insert>

</mapper>
  1. mapper:指定唯一的namespace,一般设置成mapper类的全路径名。
  2. insert:对应SQL中的insert插入语句。
    id:为该语句的属性,通常与mapper java 文件的方法名相同。
    parameterType:参入插入语句的参数类型。
    useGeneratedKeys:主键使用数据库自增策略,需要数据库底层支持,并返回主键到keyProperty指定的属性名。
    keyProperty:指示主键映射到实体类的属性名。

    sql代码段

    这个元素可以被用来定义可重用的 SQL 代码段,可以包含在其他语句中。它可以被静态地(在加载参数) 参数化. 不同的属性值通过包含的实例变化。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </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>

parameterType

如果传递的是简单的参数,是简单的数据类型,参数类型可以省略,原生的类型或简单数据类型(比如整型和字符串)因为没有相关属性,它会完全用参数值来替代。

  1. 省略参数
    1
    2
    3
    <select id="selectUsers" resultType="User">
    select * from user where id = #{id}
    </select>
  2. 传递对象
    参数类型是个User对象,User 类型的参数对象传递到了语句中,idusernamepassword 属性将会被查找,然后将它们的值传入预处理语句的参数中。
    1
    2
    3
    <insert id="insertUser" parameterType="User">
    insert into users (id, username, password) values (#{id}, #{username}, #{password})
    </insert>
  3. 指定参数类型
    • 参数也可以指定一个特殊的数据类型。
      #{property,javaType=int,jdbcType=NUMERIC}
    • 对于数值类型,还有一个小数保留位数的设置,来确定小数点后保留的位数。
      #{height,javaType=double,jdbcType=NUMERIC,numericScale=2}

XML转义字符

少部分特殊字符写入到 XML 文件会被 XML 语法检测报错,XML为这些字符提供了转义

特殊字符 转义字符 说明
> &lt; 大于
< &gt; 小于
& &amp;
&apos; 单引号
‘’ &quot; 双引号

在 XML 中写 SQL,用到特殊字符的可用转义字符替换。
但使用转义字符比较麻烦,不容易记住,可使用<![CDATA[ ]]>标记里面的内容不被 XML 解析器解析,保留为文本。

= 18 ]]>

模糊查询

mapper.xml 中写模湖查询需要使用 concat 来连接

like concat(‘%’, #{param}, ‘%’) 或者 like ‘%${param}%’ ,推荐使用前者,可以避免sql注入。

MyBatis:理解 mapper.xml 文件和使用

http://blog.gxitsky.com/2018/03/06/MyBatis-07-mapper-config/

作者

光星

发布于

2018-03-06

更新于

2022-06-17

许可协议

评论