小技巧

如果在 xml 文件中出现  “<” , “>”  ,双引号 等特殊字符时可以使用

XML 文件转义标签(XML 自身的)

`<![CDATA[ 内容 ]]>`

#{}. ${}

  • #{}
    • 使用占位符,最终值为 ' ' 包裹
  • ${}
    • 不使用占位符,故而不使用'' 包裹,用在 order by 排序和limit 分页

TIP

mybatis 中实现 mysql 分页写法 不允许在关键字前后进行数学运算,需要在代码中计算完成 后传递到 mapper.xml 中

  • mapper.xml 中代码
<select id="page" resultType="com.a.b.People"
parameterType="map">
select * from people limit #{pageStart},#{pageSize}
</select>

在 Mapper.xml 中可以通过#{}获取参数

  • parameterType 控制参数类型
  • #{}获取参数内容`
  • 使用索引,从 0 开始 #{0}表示第一个参数
  • 也可以使用#{param1}第一个参数
  • 如果只有一个参数(基本数据类型或 String),mybatis
  • 对#{}里面内容没有要求只要写内容即可.
  • 如果参数是对象#{属性名}
  • 如果参数是 map 写成#{key}

#{} 和 ${} 的区别

  • #{} 获取参数的内容支持 索引获取,param1 获取指定位置参数, 并且 SQL 使用?占位符
  • {} 字符串拼接不使用?,默认找{内容}内容的 get/set 方法,如 果写数字,就是一个数字

<!-- namesapce:理解成实现类的全路径(包名+类名) -->
<mapper namespace="a.b">
  <!-- id:方法名
  parameterType:定义参数类型
  resultType:返回值类型.
  如果方法返回值是 list,在 resultType 中写 List 的泛型,
  因为 mybatis
  对 jdbc 封装,一行一行读取数据
  -->
 <resultMap id="userMap" type="User">
        <id property="id" column="id" />
<!-- 用result属性来映射非主键字段 ,通过column字段来解决javaBean和数据库字段不相同的问题-->
        <result property="userName" column="user_name" />
        <result property="userPassword" column="user_password" />
        <result property="userEmail" column="user_email" />
        <result property="headImg" column="head_url" />
        <result property="createTime" column="create_time"
            jdbcType="TIMESTAMP" />
    </resultMap>
    <select id="selectById" resultMap="userMap">
        select * from user where
        id=#{id}
    </select>

  <select id="selById"
    resultType="com.a.c.People"
    parameterType="int">
    select * from people where id=#{0}
  </select>

</mapper>

多参数实现办法

  • 在接口中声明方法 List<Log> selByAccInAccout(String accin,String accout);

  • 在 mapper.xml 中添加

    • #{}中使用 0,1,2 或 param1,param2
<select id="selByAccInAccout" resultType="log" >
select * from log where accin=#{0} and accout=#{1}
</select>

注解方式

/**
* mybatis 把参数转换为 map 了,其中@Param("key") 参数内
容就是 map 的 value
* @param accin123
* @param accout3454235
* @return
*/
List<Log> selByAccInAccout(@Param("accin") String
accin123,@Param("accout") String accout3454235);

mapper.xml

<!-- 当多参数时,不需要写 parameterType 
 #{} 里面写@Param(“内容”)参数中内容
-->
<select id="selByAccInAccout" resultType="log" >
select * from log where accin=#{accin} and
accout=#{accout}
</select>