
mybatis
波波仔86
生活与技术并发!
展开
-
mybatis批量更新数据三种方法效率对比
探讨批量更新数据三种写法的效率问题,实现方式有三种:一种用for循环通过循环传过来的参数集合,循环出N条sql, 另一种 用mysql的case when 条件判断变相的进行批量更新 还有一个是用ON DUPLICATE KEY UPDATE进行批量更新下面进行实现。注意第一种方法要想成功,需要在db链接url后面带一个参数 &allowMultiQueries=true,即:jdbc:mysql://localhost:3306/mysqlTest?characterEnc...转载 2020-11-21 21:07:48 · 545 阅读 · 1 评论 -
mybatis中![CDATA[ ]]语法介绍
记录一下今天遇到的问题:在mybatis的xml文件中需要写一些特殊字符 如 > < & 这些字符在xml解析的时候会被转义,但是我们不希望它被转义,这时候就可以使用<![CDATA[ ]]>来解决问题。<![CDATA[ ]]>是xml语法,在<![CDATA[ ]]>内部的所有内容都会被解析器忽略,不进行转义。如果sql中包含很多像">"、"<"、"&"这样的符号,最好把他们放在<![CDATA[ ]]>中。转载 2020-09-10 22:44:49 · 845 阅读 · 0 评论 -
解决:oracle+myBatis ResultMap 类型为 map 时返回结果中存在 timestamp 时使用 jackson 转 json 报错
前言:最近在做一个通用查询单表的组件,所以 sql 的写法就是select *,然后resultType="map" ,然后使用 jackson @ResponseBody 返回前端报错。后台报错:26-Sep-2018 22:18:08.209 WARNING [http-apr-8080-exec-8] org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.handleHttpMessageNo..转载 2020-06-20 23:33:24 · 2053 阅读 · 0 评论 -
mybatis源码学习之执行过程分析——sql执行后ResultSet的处理及结果返回
mybatis源码学习及分析之执行过程分析——返回结果的处理 上一篇中分析了sql语句的创建和执行过程,使用jdbc时,执行完sql后会返回ResultSet,然后我们会通过getInteger()、getString()等方法拿到数据。而使用Mybatis中我们可以直接将结果转换为POJO对象,下面就来看看mybatis是如何封装ResultSet的。PreparedStatementHandler.java public <E> List<E> que...转载 2020-06-18 23:54:37 · 2048 阅读 · 0 评论 -
SpringMVC中配置mybatis支持多个数据库
在mybatis3.1.0之后就内在的支持multi-db了,可以在select/update/delete/insert加上databaseId的方式来标识不同的数据库,也可以直接使用属性<if test="_databaseId == 'MySQL'">来判断不同的数据库。那如何在spring中集成mybatis使其支持multi-db的特性呢?在mybatis的官方文档中并没有具体说明,后来通过查看源码而得到的配置。下面的vendorProperties中key的值是通过数...转载 2020-06-09 22:49:35 · 642 阅读 · 0 评论 -
Mybatis databaseIdProvider数据库厂商标识
在相同数据库厂商的环境下,数据库厂商标识没有什么意义,在实际的应用中使用得比较少,因为使用不同厂商数据库得系统还是比较少得。Mybatis可能会运行在不同厂商得数据库中,它为此提供一个数据库标识,并提供自定义,它的作用在于指定SQL到对应的数据库厂商提供的数据库中运行。1、系统默认的规则,mybatis提供默认的规则:type="DB_VENDOR"是启动Mybatis内部注册的策略器。首先Mybatis会将你的配置读入Configuration类里面,在连接数据库后调用getDa...原创 2020-06-07 12:20:52 · 1039 阅读 · 0 评论 -
Mybatis映射器
什么是MyBatis映射器?MyBatis框架包括两种类型的XML文件,一类是配置文件,即mybatis-config.xml,另外一类是映射文件,例如XXXMapper.xml等。在MyBatis的配置文件mybatis-config.xml包含了<mappers></mappers>节点,这里就是MyBatis映射器。1、MyBatis映射器发展历史简介映射器是MyBatis中最核心的组件之一,在MyBatis 3之前,只支持XML映射器,所有的SQL语句都必须在..转载 2020-06-07 11:15:12 · 1176 阅读 · 0 评论 -
Mybatis之分页插件PageHelper工作原理
前言数据分页功能是软件系统中必备的功能,在持久层使用mybatis的情况下,pageHelper来实现后台分页则是我们常用的一个选择,所以本文专门介绍下。需要的依赖<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version></depend转载 2020-06-06 23:45:57 · 354 阅读 · 0 评论 -
数据库方言(dialect)是什么?
抛开数据库,生活中的方言是什么?方言就是某个地方的特色语言,是一种区别于其它地方的语言,只有你们这一小块地方能听懂,出了这个地方又是另一种方言。数据库方言也是如此,MySQL 是一种方言,Oracle 也是一种方言,MSSQL 也是一种方言,他们之间在遵循 SQL 规范的前提下,都有各自的扩展特性。拿分页来说,MySQL 的分页是用关键字limit, 而 Oracle 用的是ROWNUM,MSSQL 可能又是另一种分页方式。# mysqlselect * from t_user limi..原创 2020-06-06 23:05:03 · 14363 阅读 · 0 评论 -
深度Mybatis源码分析——SqlSessionFactoryBuilder(建造者模式),Mapper接口绑定原理(代理模式)
一:源码分析流程图二:源码分析开始public class TestMyBatis { public static void main(String[] args) { try { // 基本mybatis环境 // 1.定义mybatis_config文件地址 String resources = "mybatis_config.xml"; // 2.获取Input转载 2020-06-06 18:37:18 · 316 阅读 · 0 评论 -
mybatis 需要注意的点 MyBatis 插入空值时,需要指定JdbcType
前天遇到一个问题 异常显示如下:Exception in thread "main" org.springframework.jdbc.UncategorizedSQLException: Error setting null for parameter #6 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration pr.转载 2020-06-06 17:10:10 · 5290 阅读 · 0 评论 -
操作MyBatis引发Error setting null for parameter #with jdbcType other.无效的列类型
在用mybatis操作oracle的时候,传入null值而引发的错误,异常信息:org.springframework.jdbc.UncategorizedSQLException: Error setting null for parameter #6 with JdbcType OTHER . Try setting a different JdbcType for this para...转载 2020-04-22 22:14:52 · 18211 阅读 · 1 评论 -
Mybatis插件机制解析
Mybatis采用责任链模式,通过动态代理组织多个插件(拦截器),通过这些插件可以改变Mybatis的默认行为(诸如SQL重写之类的),由于插件会深入到Mybatis的核心,因此在编写自己的插件前最好了解下它的原理,以便写出安全高效的插件。概述Mybatis插件又称拦截器,本篇文章中出现的拦截器都表示插件。Mybatis采用责任链模式,通过动态代理组织多个插件(拦截器),通过这些插件可...转载 2020-04-17 17:14:20 · 208 阅读 · 0 评论 -
MyBatis中使用流式查询避免数据量过大导致OOM
本文已springboot项目为例,要实现流式查询需要完成以下几步POM文件中的配置springboot中整合mybatis<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</art...转载 2019-10-30 11:00:10 · 2788 阅读 · 0 评论 -
MyBatis insert后返回自增主键,报错org.apache.ibatis.binding.BindingException: Parameter 'id' not found
1、modelpublic class UserInfo { private int id;//主键自增ID private String userName;//姓名 private String account;//登陆账号 private String password;//密码}2、UserInfoMapper.javapublic inte...转载 2019-10-22 20:29:44 · 1117 阅读 · 0 评论 -
mybatis连接mysql数据库 tinyint为boolean类型,怎样使其返回类型为integer
mysql数据库表中字段类型为:tinyint长度为1,即类型为:tinyint(1)使用Mybatis查询tinyint字段数据,那么tinyint的数据默认会转化为boolean类型数据,如何将改字段的java类型设置为Integer?解决方法:1、在jdbcUrl添加参数tinyInt1isBit=false(默认为true)2、避免使用长度为1的tinyint类型字原创 2017-12-13 20:48:14 · 7908 阅读 · 2 评论 -
Mybatis缓存
1、一级缓存 mybatis默认开启了一级缓存,一级缓存是在SqlSession层面进行缓存的。即,同一个SqlSession,多次调用同一个Mapper和同一个方法的同一个参数,只会进行一次数据库查询,然后把数据缓存到缓冲区,以后直接从缓存中取出数据,不会直接去查数据库。 但是不同的SqlSession对象,因为不用的SqlSession都是相互隔离的,所以相同的Ma...原创 2018-04-16 11:26:55 · 189 阅读 · 0 评论 -
mybatis插入返回自增主键id
由于业务的需求,插入数据时需要返回自增长的主键id,网上查的资料在insert中添加相关属性:<insert id="saveAlarm" parameterType="Alarm" useGeneratedKeys="true" keyProperty="id" keyColumn="id">但是执行,总是报错:`Error getting generated key or se原创 2018-05-04 11:28:21 · 401 阅读 · 0 评论 -
Mybatis批量更新updateByBatch
在项目中我们需要一次更新多条数据,有两种方式:在业务代码汇总循环遍历逐条更新。一次性更新所有数据(一条sql语句来更新所有数据,逐条更新操作放到数据库端,在业务代码展现的就是一次更新所有数据)1、逐条更新逐条更新比较简单,不易出错,但是效率比较低下,我们主要介绍第二种方法。2、批量更新一种用for循环通过循环传过来的参数集合,循环出N条sql另一种用mysql的case when 条件判断变相的进...原创 2018-05-04 13:32:07 · 5287 阅读 · 0 评论 -
Mybatis插入返回自增主键报错
执行mybatis插入,配置返回主键如下:@Insert("insert urun_plan.spider_record (id,taskid,starttime,endtime,receiver,spiderstatus,remarks,timestamp) value(#{record.id},#{record.taskid},#{record.starttime},#{record.e...原创 2018-08-23 15:31:47 · 1468 阅读 · 0 评论 -
mybatis if-else写法
mybaits 中没有else要用chose when otherwise 代替,其语法格式如下:<choose> <when test=""> //... </when> <otherwise> //... </otherwise></choose>原创 2018-08-31 09:57:08 · 1722 阅读 · 0 评论 -
Mybatis批量插入大数据导致堆内存溢出问题解决方案
原文源自:https://my.oschina.net/u/2428301/blog/1796597Exception in thread "Thread-8" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:3332) at java.lang.AbstractStri...转载 2018-11-27 09:46:30 · 13195 阅读 · 2 评论 -
Spring+Mybatis多数据源配置
同一个项目有时会涉及到多个数据库,也就是多数据源。多数据源又可以分为两种情况:1、两个或多个数据库没有相关性,各自独立,这种可以作为两个项目来开发。2、两个或多个数据库时masert-slave的关系,比如mysql搭建一个master-master,其后又带有多个slave。Spring提供两种多数据源配置方式。1、基于AbstractRoutingDataSource和AOP的...原创 2019-01-05 12:17:03 · 362 阅读 · 0 评论 -
mybatis自定义typeHandler处理postgresql枚举类型
由于数据库中定义了一个枚举类型,mybatis generator默认生成的类类型为String,但是我想生成枚举类型,于是自定义typeHandler类型处理。数据库的枚举类型字段定义如下:create type productclass as enum('h','o','a','f')1、定义枚举类/** * Created by bo on 2019/1/7. * c...原创 2019-01-07 20:11:40 · 1688 阅读 · 1 评论 -
mybatis自定义typeHandler处理postgresql数组类型
1、首先,自定义typeHandler/** * Created by bo on 2019/1/6. * java mybatis映射postgresql 数组类型 */@MappedJdbcTypes(JdbcType.ARRAY)@MappedTypes(String[].class)public class ArrayTypeHandler extends BaseTyp...原创 2019-01-09 09:37:20 · 4644 阅读 · 0 评论 -
Mybatis实体关联映射
原文源自:https://blog.youkuaiyun.com/Daybreak1209/article/details/51815753一、一对一 1、resultType返回类型:使用resultType返回相对简单,查询扩展类属性时,创建扩展类。2、resultMap返回类型:使用resultMap首先需要将1:1关联实体例如订单关联查询用户是一对一关系,所以在Order实体中添加单个U...转载 2019-01-16 20:16:16 · 3210 阅读 · 0 评论 -
Mybatis多表关联查询
原文源自:https://blog.youkuaiyun.com/weidong_y/article/details/80557941多表连接查询的方式有两种:1、一对一关系2、一对多关系1、通过ResultMap和association实现一对一关系在 mapper.xml 文件里面的代码: <resultMap type="com.pojo.TRecruitment" id...转载 2019-07-08 17:02:19 · 188 阅读 · 0 评论 -
mybatis mapper接口方法不能重载
转载来源:http://blog.youkuaiyun.com/feiye_wine/article/details/47173005在mybatis框架中,写dao层的mapper接口时,是不可以进行方法的重载的,下面是截图证明:当mapper接口中有方法的重载时,会出现异常:这是mapper接口中定义的两个方法,进行重载: 这是mapper.xml中进行的映射:转载 2017-12-12 21:19:44 · 20172 阅读 · 3 评论