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多表操作
		
一:引言 在学习完前面的mybatis基本语法后,大家都有个认知,这个Mybatis太强大了,比之前使用JDBC写方便多了,但是你们当初在使用原生JDBC写SQL查询的时候有没有遇到过多表查询呢?肯定 ...
 - (转)springMVC+mybatis+ehcache详细配置
		
一. Mybatis+Ehcache配置 为了提高MyBatis的性能,有时候我们需要加入缓存支持,目前用的比较多的缓存莫过于ehcache缓存了,ehcache性能强大,而且位各种应用都提供了解决方 ...
 - spring mvc mybatis集成踩的坑
		
开园这么多年了也没写几篇文章,现在想想光看别人的也不行啊,咱也自己写写,就写这天我我在做spring mvc与mybatis的集成时遇到的问题 1 spring与mybatis的集成 这个相信大家都弄 ...
 - spring boot 整合mybatis + swagger2
		
之前使用springMVC+spring+mybatis,总是被一些繁琐的xml配置,有时候如果配置出错,还要检查各种xml配置,偶然接触到了spring boot 后发现搭建一个web项目真的是1分 ...
 - MyBatis 源码分析系列文章导读
		
1.本文速览 本篇文章是我为接下来的 MyBatis 源码分析系列文章写的一个导读文章.本篇文章从 MyBatis 是什么(what),为什么要使用(why),以及如何使用(how)等三个角度进行了说 ...
 - 【Java】MyBatis与Spring框架整合(一)
		
本文将利用 Spring 对 MyBatis 进行整合,在对组件实现解耦的同时,还能使 MyBatis 框架的使用变得更加方便和简单. 整合思路 作为 Bean 容器,Spring 框架提供了 IoC ...
 - mybatis generator 生成中文注释
		
mybatis generator默认生成 的注释太奇葩了,完全不能拿到生产去用,不过幸亏提供了接口可以自己扩展.长话短说,要生成如下的domain, package com.demo.domain; ...
 - 轻量级封装DbUtils&Mybatis之三MyBatis分页
		
MyBatis假分页 参考DefaultResultSetHandler的skipRows方法. 温馨提示:部分代码请参考轻量级封装DbUtils&Mybatis之一概要 解决方案 1)之前公 ...
 - mybatis的Mapper代理原理
		
前言:在mybatis的使用中,我们会习惯采用XXMapper.java+XXMapper.xml(两个文件的名字必须保持一致)的模式来开发dao层,那么问题来了,在XXMapper的文件里只有接口, ...
 
随机推荐
- LeetCode 258 Add Digits(数字相加,数字根)
			
翻译 给定一个非负整型数字,反复相加其全部的数字直到最后的结果仅仅有一位数. 比如: 给定sum = 38,这个过程就像是:3 + 8 = 11.1 + 1 = 2.由于2仅仅有一位数.所以返回它. ...
 - jquery autocomplete文本自己主动补全
			
文本自己主动补全功能确实非常有用. 先看下简单的效果:(样式不咋会写) 以下介绍几种: 1:jqery-actocomplete.js 这个网上有个写好的实例,上面挺具体的,能够下来执行下就清楚了就不 ...
 - 云计算时代告别phpMyAdmin
			
云计算时代告别phpMyAdmin phpMyAdmin是一款很经典的MySQL数据库管理工具,在云计算快速发展的今天,phpMyAdmin交互老旧.已经不能适应时代步伐.因此有很多人開始选择一些更高 ...
 - 聊聊高并发(十九)理解并发编程的几种"性" -- 可见性,有序性,原子性
			
这篇的主题本应该放在最初的几篇.讨论的是并发编程最基础的几个核心概念.可是这几个概念又牵扯到非常多的实际技术.比方Java内存模型.各种锁的实现,volatile的实现.原子变量等等,每个都可以展开写 ...
 - Google开源新的 RISC-V IP核: “BottleRocket”(https://cnrv.io)
			
BottleRocket是RISCV RV32IMC的实现. Google在2017年11月29日在Github上非官方开源了BottleRocket的RTL代码,同时表明这并不是一个官方支持的Goo ...
 - Android 计算Bitmap大小
			
今天使用LruCache写demo的时候,要获取Bitmap的大小 于是就用到了 return bitmap.getRowBytes() * bitmap.getHeight();// 获取大小并返回 ...
 - three.js  运行3D模型
			
HTML <!DOCTYPE html> <html style="height: 100%;"> <head> <title>m ...
 - #学习笔记#——JavaScript 数组部分编程(三)
			
3.在数组 arr 末尾添加元素 item.不要直接修改数组 arr,结果返回新的数组 主要考察数组的concat方法,代码如下: arr.concat(item); concat 方法不修改原数组. ...
 - css3--根据数据加载显示的一个动画
			
css: .circle { width: 200px; height: 200px; position: absolute; border-radius: 50%; background: #0cc ...
 - LAMP环境搭建成功后的部分相关配置
			
LAMP环境搭建成功后,通常还需要做一些其他配置来完善,本文主要记录常用到的一些设置. 所有的配置是基于Ubuntu 16.04 + Apache2.4 + Mysql5.7 + Php7.0,对于其 ...