202011-29 mybatis中的一级缓存深入剖析 mybatis中提供有一级缓存和二级缓存,这里记录一下一级缓存一级缓存(mybatis中默认开启)SqlSession级别的缓存,操作数据库时需要构造SQLSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据,不同的SQLSession对象之间的缓存数据是不共享的,即独立的根据第一点,简单一点讲就是一级缓存是属于对象的(个人记法)从别处搞来一个图,便于我们理解:下面用spring整合mybatis来测试一下mybatis的一级缓存:1、下面... 继续阅读 >
202011-29 解决spring结合mybatis时一级缓存失效的问题 之前了解到mybatis的一级缓存是默认开启的,作用域是sqlSession,是基HashMap的本地缓存。不同的SqlSession之间的缓存数据区域互不影响。当进行select、update、delete操作后并且commit事物到数据库之后,sqlSession中的Cache自动被清空<settingname="localCacheScope"value="SESSION"/>结论spring结合mybatis后,一级缓存作用:在未开启事物的情况之下,每次查询,spring都会关闭旧的sqlSession而创建新的sqlSession,因此此时的... 继续阅读 >
202011-29 在mybatis中去除多余的前缀或者后缀操作 A.where标签会自动删除第一个多余的and或者or,set标签会自动删除最后一个','B.trim标记,是一个格式化的标记,可以完成set或者是where标记的功能,如下代码:1、select*fromuser<trimprefix="WHERE"prefixoverride="AND|OR"><iftest="name!=nullandname.length()>0">ANDname=#{name}</if><iftest="gender!=nullandgender.length()>0">ANDgender=#{gender}</if></trim>假如说name和gender的值都不为null的话打... 继续阅读 >
202011-29 mybatis and,or复合查询操作 要查询的sql:select*fromuserwherename=?and(age=?orcity=?);方法1:不使用Example查询直接在usermapper.xml中修改sql方法2:使用Example查询sql可转换成select*fromuserwhere(name=?andage=?)or(name=?andcity=?);然后使用Example查询UserExampleexample=newUserExample();example.or().orAgeLike("%"+searchParam+"%").andNameEqualTo(userName);example.or().orCityLi... 继续阅读 >
202011-29 巧妙mybatis避免Where 空条件的尴尬 我就废话不多说了,大家还是直接看代码吧~<selectid="findActiveBlogLike"resultType="Blog">SELECT*FROMBLOGWHERE<iftest="state!=null">state=#{state}</if></select>如果state参数为空时,最终生成SQL语句为SELECT*FROMBLOGWHERE执行会出错,当然,你可以在where后加一个1=1,改成<selectid="findActiveBlogLike"resultType="Blog">SELECT*FROMBLOGWHERE1=1<iftest="state!=null">andstate=... 继续阅读 >
202011-29 解决myBatis中删除条件的拼接问题 今天刚刚学习了mybatis,做了简单的对数据库的增删改查。在进行删除操作时,单条删除时很简单,但是批量删除的时候拼接删除条件却有些麻烦,现记录一下做法。Sql语句中,当删除条件并不唯一的时候,我们有两种删除的sql语句,一种使用or拼接where中的条件,例如deletefrom表名where条件1or条件2,另一种是使用in例如deletefrom表名where元素in()利用第一种删除语句在mybatis中的mapping.xml中进行拼接:利用第二种删除语... 继续阅读 >
202011-29 浅谈mybatis mapper.xml文件中$和#的区别 #{}表示一个占位符即?,可以有效防止sql注入。在使用时不需要关心参数值的类型,mybatis会自动进行java类型和jdbc类型的转换。#{}可以接收简单类型值或pojo属性值,如果传入简单类型值,#{}括号中可以是任意名称。<!--根据名称模糊查询用户信息--><selectid="findUserById"parameterType="String"resultType="user">select*fromuserwhereusernamelikeCONCAT(CONCAT('%',#{name}),'%')</select>${}可以将para... 继续阅读 >
202011-29 mybatis通过if语句实现增删改查操作 有时候为了简化我们的代码。1举个例子Student类:@DatapublicclassStudent{privateIntegerid;privateIntegerage;privateIntegersno;}有时候我们想通过age这个属性获取Student对象有时候我们也想通过sno这个属性获取Student对象难道我们在DAO层写两个接口?比如这样子?StudentgetStudentByAge(Intage);StudentgetStudentBySno(Intsno);那么在mapper文件中要这样写?<selectid="getStudentByAge"parameterType=... 继续阅读 >
202011-29 Mybatis 动态sql if 判读条件等于一个数字的案例 在Mybatis中mapper中booleanupdateRegisterCompanyFlag(@Param(value="companyId")StringcompanyId,@Param(value="flag")Stringflag);传入的flag类型为String,但在mapper.XML中进行判断是下意识地以为判断的值要加上引号<iftest="'4'==flag">,LAST_CHECK_TIME=sysdate</if>但是这样写,传入flag=“4”后,这个if语句一直不成立sql没有拼接。后来网上查了一番后将test中的4的引号去除才成功。<iftest=... 继续阅读 >
202011-29 mybatis不加@Parm注解报错的解决方案 我的idea版本2017.3.4,低版本貌似不会加上这个配置,idea高版本会补充知识:Mybatis传多个参数的问题及MyBatis报错Parameter'0'notfound.Availableparametersare[arg1,arg0,param1问题对于使用Mybatis,传多个参数,我们可以使用对象封装外,还可以直接传递参数对象的封装,例如查询对象条件basequery对象<selectid="getProductByProductQuery"parameterType="com.niulande.product.query.BaseQuery"resultMap="Base... 继续阅读 >
202011-29 mybatis省略@Param注解操作 项目是Springboot+mybatis,每次写一堆@Param注解感觉挺麻烦,就找方法想把这个注解给省了,最后确实找到一个方法1.在mybatis的配置里有个属性useActualParamName,允许使用方法签名中的名称作为语句参数名称我用的mybatis:3.4.2版本Configuration中useActualParamName的默认值为true源码简单分析:MapperMethod的execute方法中获取参数的方法convertArgsToSqlCommandParampublicObjectexecute(SqlSessionsqlSession,Object[]a... 继续阅读 >
202011-29 mybatis 逆向生成后遵循java驼峰法则的解决 当时用逆向生成后,实体类中的下划线都被去掉,这时只需要在sqlmap.xml中加以下代码即可。打开mybatis驼峰法则。<settings><!--打印查询语句--><settingname="logImpl"value="STDOUT_LOGGING"/><!--是否开启自动驼峰命名规则(camelcase)映射,即从经典数据库列名A_COLUMN到经典Java属性名aColumn的类似映射--><settingname="mapUnderscoreToCamelCase"value="true"/></settings>补充知识:【Java】Ite... 继续阅读 >
202011-29 Mybatis插件之自动生成不使用默认的驼峰式操作 数据库里面表的字段中带有“”_“下划线,我们知道插件默认的是将这些带有下划线的字段默认的变成“优美的驼峰式”的。表是肯定不能动的,实体类的字段也是非常多,改起来非常麻烦,所以就研究了下面这种依靠代码来实现的方式。修改配置文件:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEgeneratorConfigurationPUBLIC"-//mybatis.org//DTDMyBatisGeneratorConfiguration1.0//EN""http://mybatis.org/dtd/my... 继续阅读 >
202011-29 浅谈myBatis中的插件机制 插件的配置与使用在mybatis-config.xml配置文件中配置plugin结点,比如配置一个自定义的日志插件LogInterceptor和一个开源的分页插件PageInterceptor:<plugins><plugininterceptor="com.crx.plugindemo.LogInterceptor"></plugin><plugininterceptor="com.github.pagehelper.PageInterceptor"><propertyname="helperDialect"value="oracle"/></plugin></plugins>插件的工作原理借助责任链模式,定义一系列的过滤器... 继续阅读 >
202011-25 mybatis 返回Integer,Double,String等类型的数据操作 在使用mybatis的过程中会遇到只返回单独数据类型的问题会用到resultType。//返回Integer<selectid="getSpeedByLinkId"parameterType="java.lang.String"resultType="Integer">SELECTspeedfromdws_tfc_state_speed_link_last_rtwherelink_id=#{linkId}</select>//返回Double类型<selectid="getTravelTimeByLinkId"parameterType="java.lang.String"resultType="Double">SELECTtravel_timefromdws_tfc_state_... 继续阅读 >
202011-25 mybatis某些字段无法映射成功的解决 随笔记录下:刚刚遇到一个mybatis中reultMap定义正确column与property也都正确,字段的getset方法也都有,但是返回对象时,有些字段可以对应上有一些则不可以。找了好久才发现在sql语句中的resultMap写成了resultType。。。很low但是痛。改成resultMap一切正常!补充知识:MyBatis学习总结——解决字段名与实体类属性名不相同的冲突在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示... 继续阅读 >