mybatis 常用
1、新增时获得主键
<insert ...>
<selectKey resultType="java.lang.Integer" keyProperty="id" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO ...
</insert>
或
<insert id="insert" parameterType="com.test.User" keyProperty="id" useGeneratedKeys="true" >
INSERT INTO ...
</insert>
2、Boolean判断
<if test="isReturnReport !=null and isReturnReport.toString() == 'true'.toString()">
...
</if>
3、大于、小于符号转义
& &
" "
' '
大于号: > > 或 <![CDATA[ > ]]>
小于号: < < 或 <![CDATA[ < ]]>
eg.
AND DATE_FORMAT(create_date,'%Y-%m-%d') >= #{beginDate, jdbcType=VARCHAR}
AND DATE_FORMAT(create_date,'%Y-%m-%d') <![CDATA[ >= ]]> #{beginDate, jdbcType=VARCHAR}
4、参数为逗号隔开的字符串
FIND_IN_SET(field,param)函数:
AND FIND_IN_SET(user_id,#{_parameter})
_parameter:
获取传入的原参数值,不作预编译处理
5、模糊查询
AND settle_name LIKE CONCAT('%',#{settleName,jdbcType=VARCHAR},'%')
6、级联查询
一对多查询:
一中的xml:
<collection property="optionsList"
column="id"
ofType="com.hs.qmct.app.web.model.question.QuestionOptions"
select="com.hs.qmct.app.web.dao.question.QuestionOptionsMapper.selectByQuestionId">
</collection>
多中的dao:
List<QuestionOptions> selectByQuestionId(Integer questionId);
传递多个参数时:
一中的xml:
column= "{prop1=col1,prop2=col2}"
多中的xml:
<select parameterType="java.util.Map" ....>
select .... where val1=prop1 and val2=prop2
</select>
多对一查询:
一中的xml:
<association property="district"
column="receive_district_id"
javaType="com.hs.qmct.app.web.model.district.District"
select="com.hs.qmct.app.web.dao.district.DistrictMapper.selectByPrimaryKey">
</association>
另一个一中的dao:
District selectByPrimaryKey(Integer id);
7、传参占位符#{}和${}的区别
#{} 具有预编译效果,一般作为条件传参时使用,可防止sql注入
${} 不具有预编译效果,一般在排序中会用到,偶尔也会作为条件传参
eg1.
SELECT id from tables where id=#{id} 解析为:SELECT id from tables where id=?
SELECT id from tables where id='${id}' 解析为:SELECT id from tables where id=原参数值
eg2.
ORDER BY ${param} 此时param是一个列名
ORDER BY #{_parameter} 此时传入的参数有且仅为一个列名
8、批量新增使用forEach
int batchInsert(List<Event> records);
<!--批量新增事件-->
<insert id="batchInsert">
insert into
hserp_sys_event(id, event_name_parent, event_name,event_desc, class_path, interface_path,create_by, create_date)
values
<foreach item="item" index="index" collection="list" separator=",">
(#{item.id}, #{item.eventNameParent}, #{item.eventName},
#{item.eventDesc}, #{item.classPath}, #{item.interfacePath},
#{item.createBy}, sysdate())
</foreach>
on DUPLICATE key update last_update_date = sysdate()
</insert>
传参主要有一下3种情况:
1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了
9、解决int类型返回报错
IFNULL(MAX(SORT),0)
10、一次执行多条sql
需要在xml中加入
<property name="url" value="jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8&allowMultiQueries=true"/>
或在配置文件中加入
hikariConfig.security.jdbcUrl=jdbc:mysql://xx.xx.xx:3306/xxxxx?characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true
mybatis 常用的更多相关文章
- Mybatis 常用注解
Mybatis常用注解对应的目标和标签如表所示: 注解 目标 对应的XML标签 @CacheNamespace 类 <cache> @CacheNamespaceRef 类 <cac ...
- MyBatis 常用写法
MyBatis 常用写法 1.forEach 循环 forEach 元素的属性主要有 item, idnex, collection, open, separator, close. collec ...
- Mybatis常用xml
工作中mybatis常用的xml代码 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ma ...
- MyBatis - 常用标签与动态Sql
MyBatis常用标签 ● 定义sql语句:select.insert.delete.update ● 配置JAVA对象属性与查询结构及中列明对应的关系:resultMap ● 控制动态sql拼接:i ...
- Mybatis 常用标签
MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格,还要注意省掉 ...
- mybatis常用配置
前面两篇博客我们简单介绍了mybatis的使用,但是在mybatis的配置问题上我们只是使用了最基础的配置,本文我们就来说说其他一些常用的配置.如果小伙伴对mybatis尚不了解,可以先参考这两篇博客 ...
- [Mybatis]Mybatis 常用标签及功能整理
Mybatis中生成动态SQL的标签有四类,分别是: if choose (when, otherwise) trim (where, set) foreach 1.if 当需要动态生成where条件 ...
- mybatis常用标签
1. 定义sql语句 1.1 select 标签 属性介绍: id :唯一的标识符. parameterType:传给此语句的参数的全路径名或别名 例:com.test.poso.User或user ...
- MyBatis常用对象SqlSessionFactory和SqlSession介绍和运用
学习框架一个比较好的路径阅读源码.本文介绍的SqlSessionFactory和SqlSession.可以通过了解SqlSessionFactory接口和SqlSession接口以及两个的实现类入手, ...
- [Mybatis]Mybatis常用操作
Mybatis是目前国内比较流行的ORM框架,特点是可以写灵活的SQL语句,非常适合中小企业的面向数据库开发. 本文总结自己开发过程中常用的Mybatis操作. 一.插入操作 主键自增插入单条 < ...
随机推荐
- Codeforces389D(SummerTrainingDay01-J)
D. Fox and Minimal path time limit per test:1 second memory limit per test:256 megabytes input:stand ...
- Spring学习之旅(四)Spring工作原理再探
上篇博文对Spring的工作原理做了个大概的介绍,想看的同学请出门左转.今天详细说几点. (一)Spring IoC容器及其实例化与使用 Spring IoC容器负责Bean的实例化.配置和组装工作有 ...
- C# RichTextBox 制作文本编辑器
本文利用一个简单的小例子[文本编辑器],讲解RichTextBox的用法,仅供学习分享使用,如有不足之处,还请指正. Windows窗体中的RichTextBox控件用于显示,输入和操作格式化的文本, ...
- adb连接安卓模拟器
为了在电脑上玩手机游戏,国内推出了很多安卓模拟器,mumu.夜神.itools.海马等等.我们也可以用他们来做安卓开发,相对genymotion或者android studio自带的模拟器而言,国产模 ...
- git 入门教程之版本控制
版本控制 我们知道 git 是分布式版本控制系统,所以称被控制对象是版本本身没错,但是从git 命令中发现,并没有版本这个名词,有的只是commit,所以前几节我一直称其为提交. 为了避免后续教程引发 ...
- 从面向服务架构(SOA)学习:微服务时代应该借鉴的5条经验教训
[编者按]本文作者为 Matt McLarty,通过介绍 SOA 的兴衰变化,总结了微服务应该借鉴的5条经验教训.文章系国内 ITOM 管理平台 OneAPM 编译呈现. SOA 的兴衰变化让我们更了 ...
- Centos7开启ssh免密码登录
1.输入命令:cd .ssh进入rsa公钥私钥目录(清空旧秘钥) 2.在当前目录下执行ssh-keygen -t rsa,三次回车后生成新的公钥(id_rsa.pub)私钥(id_rsa)文件(每个节 ...
- peewee基本操作
本文将简单的介绍Peewee,一览它的主要特点,主要涉及到: 模型定义 存储数据 检索数据 注意:如果你偏爱稍微高级一点的教程, peewee建立类似twitter应用 是一篇结合Flask框架与pe ...
- [20181122]模拟ORA-08103错误.txt
[20181122]模拟ORA-08103错误.txt $ oerr ora 810308103, 00000, "object no longer exists"// *Caus ...
- C#-继承(十一)
继承概念 承用于创建可重用.扩展和修改在其他类中定义的行为的新类 创建一个类的时候,不是要写全新的数据成员和成员函数,可以指定新的类继承一个已经存在的类的成员.已有的类称为基类,新的类称为派生类 派生 ...