Mybatis使用技巧
以下就总结一下Mybatis的使用中的一些不太注意的技巧,算是Mybatis的总结笔
1、插入时主键返回
我们向数据库插入一条记录是,使用Mybatis的<insert>是无法返回插入的主键的,而我们需要这个刚插入的主键,可以如下返回
自增主键:使用last_insert_id()查询刚插入的key的id,该方法需要和insert配合使用,是插入之后获取。
result返回的是插入成功条数,而主键id返回到CourseInfo的id属性中
<insert id="insert" parameterType="org.andy.shop.model.CourseInfo" >insert into course_info (id, cname, caddress)values (#{id,jdbcType=INTEGER}, #{cname,jdbcType=VARCHAR}, #{caddress,jdbcType=VARCHAR})<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">select last_insert_id()</selectKey></insert>
或者如下的写法更简单:
<insert id="insert" parameterType="org.andy.shop.model.CourseInfo" useGeneratedKeys="true" keyProperty="id">insert into course_info (id, cname, caddress)values (#{id,jdbcType=INTEGER}, #{cname,jdbcType=VARCHAR}, #{caddress,jdbcType=VARCHAR})</insert>
非自增主键:但我们的ID为uuid字符类型的32为长度时,我们使用mysql的uuid()查询主键,是在查询之后在插入。
<insert id="insert" parameterType="org.andy.shop.model.CourseInfo" ><selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">select uuid()</selectKey>insert into course_info (id, cname, caddress)values (#{id,jdbcType=VARCHAR}, #{cname,jdbcType=VARCHAR}, #{caddress,jdbcType=VARCHAR})</insert>
使用oracle数据库时:使用 序列名.nextval()函数获取。
2、别名的使用
一般定义别名,在Mapper配置的可以使用别名,定义单个别名如下
<configuration>
<typeAliases><typeAlias type="org.andy.shop.model.CourseUserInfo" alias="CourseUserInfo"/>
</typeAliases>
</configuration>
自动定义别名:Mybatis 将自动扫描包名下的po,别名就是类名(大写小写都可以)
<typeAliases><package name="org.andy.shop.model"/>
</typeAliases>
3、动态sql使用
一般我们会涉及多个动态查询条件,一般我们是通过 where 1 = 1,这样可以处理where后面对应全空的情况,我们可以使用<where>标签,该标签可以自动处理。
<where><if test="name != nulll">and name like concat('%',trim(#{name,jdbcType=VARCHAR}),'%') </if></where>
4、sql片段
我们可以将常用的重复的sql定义sql片段
定义如下:
<sql id="Base_Column_List" >id, name, url, priority, logo, img</sql>
引用该片段如下:
<include refid="Base_Column_List" />
5、关联查询
一对一关联查询
一对多关联查询
6、延迟加载
延迟加载:先从单表查询,在需要时从关联表查询,可以大大的提高数据库性能,单表查询的性能要快于多表联合查询的速度。
而Mybatis的associate、collection就支持延迟加载功能。
开启延迟加载:
需要在Mybatis的核心配置文件中配置configuration开启setting两个配置
设置lazyLoadingEnabled为true, aggressiveLazyLoading为false
未完待续。
mybatis文档地址:http://www.mybatis.org/mybatis-3/zh/index.html
Mybatis使用技巧相关推荐
- MyBatis学习总结(14)——Mybatis使用技巧总结
2019独角兽企业重金招聘Python工程师标准>>> 1. 区分 #{} 和 ${}的不同应用场景 1)#{} 会生成预编译SQL,会正确的处理数据的类型,而${}仅仅是文本替换. ...
- mybatis小技巧 11.28
目录 1.#{}和${}区别(#{}占位符'XXX' ${}拼接XXX) 2.什么时候用${}(升序降序 拼接XXX) 3.拼接表名(log_${date}) 4.批量删除(or/in(x,x,x)/ ...
- # 后端开发技巧、常用规范
后端开发技巧.常用规范 开发技巧 equals() 方法的使用 null.equals()会出报空指针,因该是非null的值.equals() 可以使用Objects的equals()方法避免空值,完 ...
- SpringBoot结合MyBatis 【超详细】
1.SpringBoot+老杜MyBatis 一.简单回顾一下MyBatis 二.快速入门 三.简易插入删除更改 四.查询 ①.按其中一个字段查询 ②.按所有字段进行查询 五.详解MyBatis核 ...
- SSM框架-MyBatis(二)
目录 1 手写MyBatis框架(理解原理) 2 在web中应用MyBatis(使用MVC架构模式) 2.1 准备数据库表 2.2 实现步骤 2.3 事务处理 2.4 生命周期 2.5 当前程序存在的 ...
- 对标阿里P8的MyBatis源码解析文档,面试/涨薪两不误,已献出膝盖
移动互联网的特点是大数据.高并发,对服务器往往要求分布式.高性能.高灵活等,而传统模式的Java数据库编程框架已经不再适用了. 在这样的背景下,一个Java的持久框架MyBatis走入了我们的世界,它 ...
- 2.2基本算法之递归和自调用函数_你为什么学不会递归?读完这篇文章轻松理解递归算法...
对于很多编程初学者来说,递归算法是学习语言的最大障碍之一.很多人也是半懂不懂,结果学到很深的境地也会因为自己基础不好,导致发展太慢. 可能也有一大部分人知道递归,也能看的懂递归,但在实际做题过程中,却 ...
- 数据库MYSQL学习系列二
2.1-MySQL数据类型 Number不止一种 ××× 浮点型 ××× INT SMALLINT MEDIUMINT BIGINT type Storage Minumun Value Maximu ...
- 可能存在无限递归_你为什么学不会递归?读完这篇文章轻松理解递归算法
对于很多编程初学者来说,递归算法是学习语言的最大障碍之一.很多人也是半懂不懂,结果学到很深的境地也会因为自己基础不好,导致发展太慢. 可能也有一大部分人知道递归,也能看的懂递归,但在实际做题过程中,却 ...
- Java学习成长路径
JavaSE部分 1 JavaSE体系介绍 JDK安装与环境配置 2 变量 注释,Java数据类型,进位制转换,运算符 3 运算符 分支结构 4 分支结构循环结构 5 循环结构 一维数组 6 二维数组 ...
最新文章
- HDU 1754 I Hate It(线段树单点更改、区间查找最大值)
- nginx配置文件+本地测试请求转发到远程服务器+集群
- python向服务器请求压缩数据及解压缩数据
- spring mvc学习(8):springmvc常用注解代码
- python package 的两种组织方式
- c++真的比java难吗_开课吧Java课程怎么样?开课吧的Java课程真的那么好吗?
- 控制div的大小自适应_干货 | 浅谈模糊自适应PID控制
- 数据库服务器修改地址,数据库服务器修改地址吗
- 分享一个高清壁纸网站
- Elasticsearch6.3.0安装Ansj分词插件
- 谷歌或Edge浏览器在开始菜单页面不显示图标
- Elasticsearch 集群报错 master not discovered yet
- 网页加载慢,你知道几种原因?
- TSF微服务治理实战系列(二)——服务路由
- Android 静音检测
- 赠书福利|一本书是写给美国人看的书,告诉我们,美国科技为什么领先?
- java后端怎么入门,自学还是培训
- c语言求13为质数的代码,C语言求质数.doc
- qt调试android程序崩溃,使用qt5开发的Android应用程序合并了AWS C++库崩溃
- 显卡常识 电脑显卡基础知识普及
热门文章
- 图数据库实战 AWS Neptune Gremlin CloudFormation
- java kind con,java.lang.ClassNotFoundException:afu.com.sun.source.tree.tree$kind
- python 爬虫生成csv文件和图_Python简单爬虫导出CSV文件的实例讲解
- 242. Valid Anagram [easy] (Python)
- 295.数据流的中位数
- 多小区下小区上行速率的计算(3)
- linearlayout之margin和peddling
- 【生信进阶练习1000days】day4-Annotation包中mapIds函数的使用
- pdf 目录导入 macos
- Momentum, RMSprob and Adam