Mybatis学习(二)Mybatis映射文件的使用

映射文件常用标签:
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}

  1. javaType : java类型

  2. jdbcType : jdbc类型. 通常需要在某种特定情况下设置,如 在数据为null的时候,有些数据库不能识别Mybatis对Null的默认处理,如Oracle(会报错)

  3. mode : 存储过程相关

  4. numericScale : 保留几位小数

  5. resultMap : 结果集

  6. typeHandler : 数据的类型处理器

  7. 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">

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值