小技巧
如果在 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>