202103-30 Mybatis批量插入返回插入成功后的主键id操作 我们都知道Mybatis在插入单条数据的时候有两种方式返回自增主键:1、对于支持生成自增主键的数据库:增加useGenerateKeys和keyProperty,<insert>标签属性。2、不支持生成自增主键的数据库:使用<selectKey>。但是怎么对批量插入数据返回自增主键的解决方式网上看到的还是比较少,至少百度的结果比较少。Mybatis官网资料提供如下:First,ifyourdatabasesupportsauto-generatedkeyfields(e.g.MySQLandSQLServer),the... 继续阅读 >
202103-29 详解MyBatisPlus逻辑删除与唯一索引冲突问题 1、问题背景:在开发中,我们经常会有逻辑删除和唯一索引同时使用的情况。但当使用mybatisplus时,如果同时使用逻辑删除和唯一索引,会报数据重复Duplicateentry的问题。举个例子:原来数据库结构:这里location_id是唯一索引CREATETABLE`eam_location`(`id`int(11)NOTNULLAUTO_INCREMENT,`location_id`varchar(50)UNIQUENOTNULLCOMMENT'位置代码',`location_level`tinyint(1)NOTNULLCOMMENT'位置级别',... 继续阅读 >
202103-23 mybatis中insert主键ID获取和多参数传递的示例代码 一、插入数据主键ID获取一般我们在做业务开发时,经常会遇到插入一条数据并使用到插入数据的ID情况。如果先插入在查询的话需要多一次sql查询,未免效率太低。因此mybatis也有提供插入数据并返回主键ID的方式。如下1、Insert/update1.1、属性解释keyPropertyselectKey语句结果应该被设置的目标属性。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。re... 继续阅读 >
202103-17 Mybatis控制台打印SQL语句的两种方式实现 问题描述在使用mybatis进行开发的时候,由于可以动态拼接sql,这样大大方便了我们。但是也有一定的问题,当我们动态sql拼接的块很多的时候,我们要想从*mapper.xml中直接找出完整的sql就会非常的难,这个时候经常会需要把组合之后的完整sql调试出来比较好。下面来看两种调试出sql的两种方式解决方案方案1:网上说的比较多的,之前也是这么用的一种方式 1:首先将ibatislog4j运行级别调到DEBUG可以在控制台打印出ibatis运行的... 继续阅读 >
202103-17 MyBatis控制台显示SQL语句的方法实现 一、单独使用MyBatis(1)在mybatis.xml配置文件中添加如下配置<settingname="logImpl"value="STDOUT_LOGGING"/>(2)使用slf4j输出因此要先添加slf4j的依赖<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.6</version></dependency>log4j配置文件:log4j.logger.com.ibatis=DEBUGlog4j.logger.com.ibatis.common.jdbc.Si... 继续阅读 >
202103-16 mybatis的动态SQL和模糊查询实例详解 现在以一个例子来介绍mybatis的动态SQL和模糊查询:通过多条件查询用户记录,条件为姓名模糊匹配,并且年龄在某两个值之间。新建表d_user:createtabled_user(idintprimarykeyauto_increment,namevarchar(10),ageint(3));insertintod_user(name,age)values('Tom',12);insertintod_user(name,age)values('Bob',13);insertintod_user(name,age)values('Jack',18);建表成功:新建实体类User:publicclassU... 继续阅读 >
202103-14 如何将Mybatis连接到ClickHouse 场景最近在做数据分析项目,里面有这样一个业务:把匹配的数据打上标签,放到新的索引中。数据量:累计亿级的数据使用场景:可能会单次查询大量的数据,但不会设置复杂的条件,且这些数据不会被再次修改原来使用的数据库:ElasticSearch问题:上面也说了我这里打上标记后,这些数据几乎不会再修改了。ES是一个全文检索引擎,更适用于进行大量文本检索的情况。这里与我上面的使用场景就不太匹配了。技术选型的考虑:改用战斗民族开... 继续阅读 >
202103-12 Spring Boot 集成 Mybatis Plus 自动填充字段的实例详解 一般在表设计的时候,都会在表中添加一些系统字段,比如create_time、update_time等。阿里巴巴开发手册中也有这样的提示,如果对于这些公共字段可以进行统一处理,不需要每次进行插入或者更新操作的时候set一下,就可以提高开发效率,解放双手。加入依赖下面就通过MyBatisPlus来完成字段自动填充,首先加入MyBatisPlus依赖:<dependency> <groupId>com.baomidou</groupId>  ... 继续阅读 >
202103-09 MyBatis映射文件resultMap元素中使用多个association的方法 现在有一张订单表t_stockorder,其拥有id、code、client_id、merchandise_id、merchandise_number、order_date、operator_id这些字段,其中client_id关联t_client表中code字段,merchandise_id关联t_merchandise表的code字段,operator_id关联t_employee表的code字段。现在要通过SQL语句将订单表中t_stockorder的数据全部查询出来,SQL语句如下所示:selectso.id,so.code,c.namecname,m.namemname,so.merchandise_number... 继续阅读 >
202103-09 详解Mybatis中万能的Map和模糊查询写法 1、万能的Map假设,我们的实体类,或者数据库中的表,字段或参数过多,我们接口参数以前用的是实体类,现在考虑使用下Map!接口://万能的MapintaddUser2(Map<String,Object>map);mapper.xml:<!--Map中的key--><insertid="addUser2"parameterType="map">insertintomybatis.user(id,name,pwd)values(#{userid},#{userName},#{passWord});</insert>测试方法:@TestpublicvoidaddUser2(){SqlSessionsqlSession=MybatisUt... 继续阅读 >
202103-05 Mybatis 如何批量删除数据的实现示例 本期以最常用的根据id批量删除数据为例:接口设计1:List类型单参数IntegerdeleteByIds(List<Integer>ids);接口设计2:Array数组类型单参数IntegerdeleteByIds(Integer[]ids);接口设计3:可变长度参数IntegerdeleteByIds(Integer...ids);此以接口2为例子mapper.xml配置如下:<deleteid="deleteByIds">DELETEFROMt_userWHEREidIN(<foreachcollection="array"item="id"separator=",">#{id}</foreach>)</d... 继续阅读 >
202103-05 Mybatis常见注解有哪些(总结) 当下,注解非常流行,以前很长篇的代码,现在基本上一个注解就能搞定。那,在Mybatis中又有哪些注解呢?Mybatis中的注解基本上都在org.apache.ibatis.annotations目录下: @MapperScan该注解存在着争议,但不可否认的是这个注解确实是Mybatis的注解,是为了集成Spring而写的注解。该注解主要是扫描某个包目录下的Mapper,将Mapper接口类交给Spring进行管理。org.mybatis.spring.annotation.MapperScan使用方式@SpringBootAppl... 继续阅读 >
202103-05 Mybatis中返回Map的实现 在Mybatis中,我们通常会像下边这样用:返回一个结果UserselectOne(Useruser);<selectid="selectOne"parameterType="cn.lyn4ever.entity.User"resultType="cn.lyn4ever.entity.User">selectid,username,telphonefromuserwheretelphone=#{telphone}andpassword=#{password}</select>返回多个结果(其实这个和上边一样,只不过是查询条件的控制而已)List<User>selectList(Useruser);<selectid="selectOne"par... 继续阅读 >
202103-05 mybatis 字段名自动转小写的实现 1、什么是Mybatis?MyBatis是一个优秀的持久层框架,是一个半ORM(对象关系映射)框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如加载驱动、创建连接、创建statement等繁杂的过程。Mybatis通过xml或注解的方式将要执行的statement配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。2、Mybatis... 继续阅读 >
202102-23 mybatis 事务回滚配置操作 在mybatis进行批量操作的时候,插入多条数据时,设置回滚但是前面几条还是插入,经过尝试问题所在:官网api上openSession(false)就可以回滚了,但是用session.getConnection().getAutoCommit()查看还是true解决方法:将DataSource配置改为AutoCommit(false)将conn设置setAutoCommit(false),用conn进行提交,回滚操作例子:SqlSessionsession=sqlSessionFactory.openSession(false);Connectionconn=session.getConnection(... 继续阅读 >
202102-23 MyBatis中#{}占位符与${}拼接符的用法说明 1、关于#{}占位符先来看以下的示例,该示例是MyBatis中的SQL映射配置文件(Mapper配置文件),在该配置中使用了#{}占位符。<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="test"><!--根据用户编号,查询单个用户实体--><selectid="findUserById"parameterType="int"resultType=... 继续阅读 >