一、SQL语句标签:
1 | <?xml version="1.0" encoding="UTF-8" ?> |
需要配置的属性:
- id=”xxxx” >>> 表示此段sql执行语句的唯一标识,也是接口的方法名称【必须一致才能找到】
- parameterType=”” >>>表示该sql语句中需要传入的参数, 类型要与对应的接口方法的类型一致【可选】
- resultMap=“ ”>>> 定义出参,调用已定义的
映射管理器的id值 - resultType=“ ”>>>定义出参,匹配普通Java类型或自定义的pojo【出参类型若不指定,将为语句类型默认类型,如
语句返回值为int】
p.s: 至于为何
还有 int会自动转成 Integer,别名
传参和取值:mapper.xml 的灵活性还体现在SQL执行语句可以传参,参数类型通过parameterType= “” 定义
取值方式1:#{value jdbcType = valuetype}:jdbcType 表示该属性的数据类型在数据库中对应的类型,如 #{user jdbcType=varchar} 等价于 String username;
取值方式2:${value } : 这种方式不建议大量使用,可能会发送sql注入而导致安全性问题。一般该取值方式可用在非经常变化的值上,如orderby ${columnName};
封装
1 | <sql id="selectFields"> |
if标签
1 | <if test="name!=null"> |
Foreach标签
1、首先在po类中定义一个集合或者数组 比如 private List
2、在映射文件中
1 | <foreach collection="ids" item="ids" item="user_id" open="AND(" close=")" seperator="or"><foreach/> |
collection:指定输入对象中集合属性
item:每次遍历生成的对象
open:开始遍历时拼接的串
close:结束遍历时两个对象需要拼接的串
ResultMap
当数据库方法返回的是复合数据类型(如list等),通常使用resultMap
而非resultType
。
一对一:
使用一对一查询时,在一个实体类中添加另一实体类属性。用resultMap实现映射关系时,使用association连接,javaType为封装的类型。
1 | resultType |
1 | public class Person { |
1 | <select id="getPersonByPid" resultMap="person_card" parameterType="int" > |
一对多
一对多是在一个类中包含另一个类list的集合,在映射时,使用Collection,ofType为封装类型。注意封装类型与一对一不同
1 | <!-- |
二、if 标签
1 | <!--统计用户数量--> |
三、sql 片段
在没有使用 sql 片段之前
1 | <!--查询用户--> |
定义和使用 sql 片段
1 |
|
其中 sql 标签的 di 表示 sql 片段的唯一标识符