Mybatis映射文件笔记----参数处理

增删改查标签: 查--<select>:id属性:唯一标识符;resultType:返回类型; 增--<insert>: id属性:唯一标识符;parameterType属性:可以省略,要插入的类型 改--<update>: id:唯一标识符 删--<delete>: id:唯一标识符(使用接口化,id就是接口名)

获取传进来的值:#{参数名} 例如: <delete id="deleteEmpById">     delete from tbl_employee where id=#{id} </delete> 注意:需要手动提交openSession.commit(); mybatis允许增删改直接定义以下返回值:Integer\Long\Boolean

mysql支持自增,使用下列方法获取自增主键的值: <select>属性: useGeneratedKeys:使用自增主键获取主键值策略[true|false]; keyProperty:指定对应的主键属性,也就是mybatis获取主键值以后将这个值封装给javaBean的哪个属性

Oracle不支持自增,而是用序列模拟自增 每次插入的数据的主键是从序列中拿到的值,如何获取这个值: <insert id="addEmp" databaseId="oracle">      <!--before表示当前sql在插入sql之前执行-->     <selectKey keyProperty="id" order="before" returnType="Integer">          selsect EMPLOYEES_SEQ,nextval from dual     </selectKey>     insert into employees values(#{id},#{lastname},#{email}) </insert>

参数处理 单个参数:mybatis不会做特殊处理 #{id}:取出参数值

多个参数:mybatis会做特殊处理 多个参数会被封装成一个map     key:param1...paramn,或者参数的缩影也可以     value:传入的参数值 #{}就是从map中获取指定的key值

命名参数:明确指定封装参数时的map的key 使用@Param注解 public Employee getByIdAndName(@Param("id")Integer id,@Param("lastname")String lastname); 多个参数会被封装成一个map     key:使用@Param注解指定的值     value:传入的参数值 #{指定的key} 取出对应参数值

POJO: 如果多个参数正好是业务逻辑的数据模型,就可以直接传入pojo     #{属性名}:取出传入的pojo的属性值 Map: 如果多个参数不是业务模型中的数据,没有没有对应的pojo,不经常使用,为了方便可以直接传如map     #{key}取出map中对应的值 TO: 如果多个参数不是业务模型中的数据,但是要经常使用,可以编写一个TO(Transfer Object)数据传输对象。 Page{     int index;     int size; }

参数值的获取: #{}:可以获取map中的值或者pojo对象中的值; ${}:可以获取map中的值或者pojo对象中的值; 区别:     #{}:是以预编译的形式将参数设置到sql语句中;PreparedStatement;可以防止sql注入     ${}:取出的值直接拼接在sql语句中。会有安全问题     大多数情况下使用#{};原生jobc不支持占位符的地方可以使用${}进行取值。     比如分表、排序...:按照年份分表拆分,from后的表名不支持占位符         select * from ${year}_salary where xxx;

#{}:更丰富的用法 规定参数的一些规则 #{property,javaType=int,jdbcType=NUMERIC} 参数位置支持的属性:javaType、jdbcType、mode、numericScale、resultMap、typeHandler、jdbcTypeName、expression

jdbcType通常需要在某种特定的条件下被设置: 在数据为null时,有些数据库可能不能识别mybatis对null的默认处理,比如Oracle(报错)。 jdbcType OTHER: 无效的类型 因为mybatis对null映射的是jdbc中的other类型。Oracle不支持 由于全局配置在:jdbcTypeForNull=OTHER,oracle不支持。 解决方法: 1、 #{email, jdbcType=null} 2、 更改全局配置文件 <setting name="jdbcTypeForNull" value="NULL"></setting>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android知识点总结

06--图解数据结构之并查集

12430
来自专栏null的专栏

挑战数据结构和算法——整数的二进制表示中1的个数

题目来源“数据结构与算法面试题80道”。在此给出我的解法,如你有更好的解法,欢迎留言。 ? 问题分析:本题涉及到二进制的处理,在本题使用到&操作和>>操作...

33960
来自专栏py+selenium

[笨方法学python]习题51自动化测试笔记

本节自动化测试部分看不大懂,自己每步都打印出来,帮助理解。(代码标红部分为自己加入调试为打印变量值所用)

27320
来自专栏全华班

java学习手册-JAVA程序员笔试题(一)

JAVA程序员笔试题(一) 一、选择题: 1、类的成员变量要求仅仅能够被同一package下的类访问,应该使用哪个修辞词 A. Protected、B. Pub...

43250
来自专栏用户画像

JAVA笔试题

4.public、private、protected、Friendly的区别与作用域,以及不写时的区别?

13010
来自专栏企鹅号快讯

mysql 字段时间类型的比较

字段的时间类型分为: ,,,,; 下面就分别介绍这几种时间类型的区别 ? 每个时间类型都有一个有效范围和一个零值,当指定的类型的值超过有效范围时,就会使用零值 ...

21980
来自专栏熊二哥

快速入门系列--CLR--03泛型集合

.NET中的泛型集合 在这里主要介绍常见的泛型集合,很多时候其并发时的线程安全性常常令我们担忧。因而简述下.NET并发时线程安全特性,其详情请见MSDN。 ...

18670
来自专栏互联网杂技

前端异步代码解决方案实践(二)

早前有针对 Promise 的语法写过博文,不过仅限入门级别,浅尝辄止食而无味。后面一直想写 Promise 实现,碍于理解程度有限,多次下笔未能满意。一拖再拖...

24360
来自专栏desperate633

深入Redis的List

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

17230
来自专栏十月梦想

php的八种基本数据类型

        例子:1.5,5.2,1.0,3.0都是float类型。所有的小数点数。科学计数法(2000:2E3,0.15:1.5E-1)等都是float型...

8120

扫码关注云+社区

领取腾讯云代金券