Mybatis mapper.xml中常用标签详解

一、SQL语句标签:

  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="com.liuyanzhao.mybatis.mapper.UserMapper">
  6.     <!--查询用户-->
  7.     <select id="findUserById" parameterType="int" resultType="com.liuyanzhao.mybatis.po.User">
  8.         SELECT * FROM user WHERE id=#{value}
  9.     </select>
  10.     <!--根据用户名称模糊查询,可能返回多条-->
  11.     <select id="findUserByName" parameterType="java.lang.String" resultType="com.liuyanzhao.mybatis.po.User">
  12.         SELECT * FROM user WHERE username LIKE '%${value}%'
  13.     </select>
  14.     <!--添加用户-->
  15.     <insert id="insertUser" parameterType="com.liuyanzhao.mybatis.po.User">
  16.         <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
  17.             SELECT LAST_INSERT_ID()
  18.         </selectKey>
  19.         INSERT INTO user(username,birthday,gender,address) VALUE(#{username},#{birthday},#{gender},#{address})
  20.     </insert>
  21.     <!--删除用户-->
  22.     <delete id="deleteUserById" parameterType="java.lang.Integer">
  23.         DELETE FROM user WHERE id=#{id}
  24.     </delete>
  25.     <!--更新用户-->
  26.     <update id="updateUserById" parameterType="com.liuyanzhao.mybatis.po.User">
  27.         UPDATE user SET username=#{username},birthday=#{birthday},gender=#{gender},address=#{address} WHERE id=#{id}
  28.     </update>
  29. </mapper>

需要配置的属性:

  • id="xxxx" >>> 表示此段sql执行语句的唯一标识,也是接口的方法名称【必须一致才能找到】
  • parameterType="" >>>表示该sql语句中需要传入的参数, 类型要与对应的接口方法的类型一致【可选】
  • resultMap=“ ”>>> 定义出参,调用已定义的<resultMap>映射管理器的id值
  • resultType=“ ”>>>定义出参,匹配普通Java类型或自定义的pojo【出参类型若不指定,将为语句类型默认类型,如<insert>语句返回值为int】

p.s: 至于为何<insert><delete><update> 语句的返回值类型为什么是int,有过JDBC操作经验的朋友可能会有印象,增删改操作实际上返回的是操作的条数。而Mybatis框架本身是基于JDBC的,所以此处也沿袭这种返回值类型。

还有 int会自动转成 Integer,别名

传参和取值:mapper.xml 的灵活性还体现在SQL执行语句可以传参,参数类型通过parameterType= “” 定义

取值方式1:#{value jdbcType = valuetype}:jdbcType 表示该属性的数据类型在数据库中对应的类型,如 #{user jdbcType=varchar} 等价于 String username;

取值方式2:${value } : 这种方式不建议大量使用,可能会发送sql注入而导致安全性问题。一般该取值方式可用在非经常变化的值上,如orderby ${columnName};

 

 

二、<if> 标签

  1. <!--统计用户数量-->
  2. <select id="countUserByNameAndGender" parameterType="com.liuyanzhao.mybatis.po.User" resultType="int">
  3.     SELECT COUNT(*) FROM user
  4.     <!--where标签可以去掉首部的AND符号-->
  5.     <where>
  6.         <if test="gender!=null and gender!=''">
  7.             AND gender = #{gender}
  8.         </if>
  9.         <if test="username!=null and gender!=''">
  10.             AND username LIKE '%${username}%'
  11.         </if>
  12.     </where>
  13. </select>

 

三、sql 片段

在没有使用 sql 片段之前

  1. <!--查询用户-->
  2. <select id="findUserById" parameterType="int" resultType="com.liuyanzhao.mybatis.po.User">
  3.     SELECT id,username,gender,birthday,address FROM user WHERE id=#{value}
  4. </select>

定义和使用 sql 片段

  1. <!--定义sql片段-->
  2. <sql id="user_table_all_columns">
  3.     id,username,gender,birthday,address
  4. </sql>
  5. <!--查询用户-->
  6. <select id="findUserById" parameterType="int" resultType="com.liuyanzhao.mybatis.po.User">
  7.     SELECT
  8.     <include refid="user_table_all_columns"/>
  9.     FROM user WHERE id=#{value}
  10. </select>

其中 sql 标签的 di 表示 sql 片段的唯一标识符

 

 

未完待续

 

 

本文链接:https://liuyanzhao.com/5825.html

 

  • 微信
  • 赶快加我聊天吧
  • weinxin
  • 博客交流群
  • 海纳百川,大家来水
  • weinxin
言曌

发表评论

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen: