映射文件常用标签:
cache : 命名空间的二级缓存配置
cache-ref : 其他命名空间缓存配置的引用
resultMap : 自定义结果集映射
parameterMap : 已废弃
sql : 抽取可重用与语句块
insert : 映射插入语句
update : 映射更新语句
delete : 映射删除语句
select : 映射查询语句
<!-- 1.parameterType参数类型,可以省略;
2.mysql支持自增主键,自增主键值的获取,mybatis也是利用statement.getGenreatedKeys();使用useGenreatedKeys="true",使用自增主键获取主键值策略;keyProperty:指定对应的主键值,也就是mybatis获取主键值之后,将这个值封装给JavaBean的哪个属性
-->
<insert id="addUser" parameterType="com.abc.entry.User" useGenreatedKeys="true" keyProperty="id">
insert into user(username,password) values(#{username},#{password})
</insert>
一.语句中的参数处理
<insert id="addUser" parameterType="com.abc.entry.User" resultType="com.abc.entry.User">
insert into user(username,password) values(#{username},#{password})
</insert>
1.单个参数:mybatis不会特殊处理
#{参数名}:取出数据值,参数名可以任意
2.多个参数:mybatis会特殊处理
多个参数会被封装成一个map,
key=param1…paramN,或者参数的索引也可以
value=传入的参数值
#{key}获得value值
3.命名参数: 明确指定封装时map的key
在参数列表中每个参数添加@Param(“xx”)
key=@Param注解指定的值
value=传入的参数值
#{key}获得value值
4.如果多个参数正好符合业务逻辑模型或者定义一个TO(数据传输对象),可以直接传入pojo/TO
#{属性名}:取出pojo的属性值
5…如果多个参数不符合业务逻辑模型,也可以传入一个map
#{key}获得value值
6.如果是Collection或者数组
会特殊处理,把数据封装成map
key:Collection(n),如果是List/array会更精确list[n],arrat[n]
如:#{list[1]}
二.#{}和${}
(1).#{} 是以预编译的形式,将参数设置到sql语句中,像PreparedStatment,可以防止sql注入
(2).${} 是取出值直接拼接在sql中,会有安全问题
所以大多数情况下都是用#{},对于原生JDBC不支持占位符的地方,就可以是用 ${} ,如用来占用表名 select ${table} where id = #{id}
(3).#{}的更多用法,参数位置支持的属性:
如 # {property,javaType=int,jdbcType=NUMERIC}
javaType : java类型
jdbcType : jdbc类型. 通常需要在某种特定情况下设置,如 在数据为null的时候,有些数据库不能识别Mybatis对Null的默认处理,如Oracle(会报错)
mode : 存储过程相关
numericScale : 保留几位小数
resultMap : 结果集
typeHandler : 数据的类型处理器
jdbcTypeName
返回结果映射
resultType
1.如果返回的是一个集合,resultType要写集合中元素的类型
2.返回一个map,resultType要写map ,key就是列名,value就是对应的值
3.返回多条记录封装成map,resultType写返回元素的类型,并且在接口方法上使用@MapKey(“xxx”),指定map的key为哪个属性.
resultMap:自定义结果集映射(不能和rusultType同时使用)
<!--
id表示主键,result是其他键
column表示数据库的列名,property表示javaBean的属性名
-->
<resultMap type="com.abc.entry.User" id="myUser">
<id column="id" property="id"/>
<result column="last_name" property="lastName"/>
<!--没指定的也会自动封装-->
</resultMap>
<select id="getUserById" resultMap="myUser">