一点唐城 | Mybatis
文章平均质量分 59
Mybatis
唐 城
知识点搬运工。阿里云社区专家博主,CSDN博主,51CTO博主,博客园博主。
展开
-
刚入职新公司,懵逼乱用MyBatis-foreach 批量插入5000 条数据花了 14 分钟,导致项目组炸锅。
近日,项目中有一个耗时较长的Job存在CPU占用过高的问题,经排查发现,主要时间消耗在往MyBatis中批量插入数据。所以,如果非要使用 foreach 的方式来进行批量插入的话,可以考虑减少一条 insert 语句中 values 的个数,最好能达到上面曲线的最底部的值,使速度最快。的方式来插入,可以提升性能的方式。乍看上去这个foreach没有问题,但是经过项目实践发现,当表的列数较多(20+),以及一次性插入的行数较多(5000+)时,整个插入的耗时十分漫长,达到了14分钟,这是不能忍的。原创 2022-09-09 10:24:31 · 372 阅读 · 1 评论 -
Fluent Mybatis 牛逼!做到代码逻辑和sql逻辑的合一
使用fluent mybatis可以不用写具体的xml文件,通过java api可以构造出比较复杂的业务sql语句,做到代码逻辑和sql逻辑的合一。不再需要在Dao中组装查询或更新操作,在xml或mapper中再组装参数。那对比原生Mybatis, Mybatis Plus或者其他框架,FluentMybatis提供了哪些便利呢?场景需求设置我们通过一个比较典型的业务需求来具体实现和对比下,假如有学生成绩表结构如下:createtable`student_score`(...原创 2021-08-02 16:23:31 · 1071 阅读 · 3 评论 -
MyBatis-Plus 条件构造器
#条件构造器说明:以下出现的第一个入参boolean condition表示该条件是否加入最后生成的sql中,例如:query.like(StringUtils.isNotBlank(name), Entity::getName, name) .eq(age!=null && age >= 0, Entity::getAge, age) 以下代码块内的多个方法均为从上往下补全个别boolean类型的入参,默认为true 以下出现的泛型Param均为Wrapper的子类实例(原创 2021-07-21 14:10:15 · 1038 阅读 · 2 评论 -
Mybatis if 标签使用总结,有图易懂
在项目开发中,mybatis<if>标签使用广泛,本文讲解if标签的两种使用方式其一、使用<if>标签判断某一字段是否为空其二、使用<if>标签判断传入参数是否相等具体代码如下数据库表结构和数据实体类:package com.demo.bean; public class Commodity { private String name; private String date; public String g...原创 2021-07-06 16:29:24 · 20966 阅读 · 0 评论 -
Mybatis 批量将list数据插入到数据库竟然这样处理
随着业务需要,有时我们需要将数据批量添加到数据库,mybatis提供了将list集合循环添加到数据库的方法。具体实现代码如下:mapper/serverice层中创建insertForeach 接口方法,返回值是批量添加的数据条数 package com.center.manager.mapper; import java.util.List; import org.apache.ibatis.annotations.Mapper; import com.center.manager.en原创 2021-07-06 16:21:50 · 517 阅读 · 0 评论 -
超详细!Mysql错误1452 - Cannot add or update a child row: a foreign key constraint fails 原因及解决方法
报错的原因大概分为三种:原因一:添加的外键列与另一个表的唯一索引列(一般是主键)的数据类型不同原因二:要添加外键的表类型与另一个表的存储引擎是不是都为innodb引擎#查看表引擎法一: show create table 表名;法二:show table status from 数据库 where name=‘表名’;法三:use information_schema;select table_catalog,table_schema,table_name,engine from tab原创 2021-06-21 11:57:56 · 39414 阅读 · 0 评论 -
Could not resolve type alias ‘xxxResultMap‘
xml文件:<select id="findDepartmentList" resultType="xxxResultMap"> SELECT id,name FROM t_department</select>解决:将resultType改为resultMap,再重启tomcat。...原创 2021-04-25 21:01:57 · 751 阅读 · 0 评论 -
mybatis批量更新数据三种方法效率对比【Mysql】
探讨批量更新数据三种写法的效率问题。实现方式有三种,用for循环通过循环传过来的参数集合,循环出N条sql, 注意第一种方法要想成功,需要在db链接url后面带一个参数 &allowMultiQueries=true 即:jdbc:mysql://localhost:3306/mysqlTest?characterEncoding=utf-8&allowMultiQueries=true <!-- 批量更新第一种方法,通过接收传进来的参数list进行...原创 2021-03-20 14:15:16 · 545 阅读 · 1 评论 -
mybatis 批量插入 Column count doesn‘t match value count at row 1
错误写法:INSERT INTO table (id, a, b) values<foreach collection="lists" close=")" open="(" index="i" item="item" separator=","> #{item.id}, #{item.a}, #{item.b}</foreach>正确写法:注意括号位置INSERT INTO table(id, a, b) values<fore..原创 2021-03-20 11:10:54 · 799 阅读 · 0 评论 -
MyBatis批量插入数据实现(MySQL)
假如需要搬一万块砖到楼顶,有一部电梯,电梯一次可以放适量的砖(最多放 500)。可以选择一次运送一块砖,也可以一次运送 500 块砖,哪个时间消耗大?一、sql 层面实现数据插入单条插入数据的写法:insert into table ([列名],[列名]) values ([列值],[列值]));或:insert into table values ([列值],[列值]));批量插入 一种可以在代码中循环执行上面的语句,但是这种效率太差。另一种,可以用MySQL支持的批量插入语..原创 2021-03-20 09:54:39 · 4125 阅读 · 1 评论 -
JetBrains 出品的这款数据库工具,惊艳到我了!
最近看到一款数据库客户端工具,DataGrip,是大名鼎鼎的JetBrains公司出品的,就是那个出品 Intellij IDEA 的公司。DataGrip是一款数据库管理客户端工具,方便连接到数据库服务器,执行sql、创建表、创建索引以及导出数据等。之前试用的客户端工具是dbvisualizer,但是在试用了DataGrip以后,我就决定抛弃 dbvisualizer。先说一句,下面实操是基于 IDEA 编辑器的,如果你想获取更多 IDEA 相关的文章,可以关注微信公众号「Java后端」回复 66转载 2021-03-17 14:11:08 · 537 阅读 · 0 评论 -
mybatis plus、条件、构造器、常用词解释
实体包装器,用于处理 sql 拼接,排序,实体参数查询进行详细拼接解析:拼接 sql 方式 一@Testpublic void testTSQL11() {/** 实体带查询使用方法 输出看结果*/EntityWrapper<User> ew = new EntityWrapper<User>();ew.setEntity(new User(1));ew.where("user_name={0}", "'zhangsan'").and("id=1")...转载 2021-02-03 15:18:28 · 374 阅读 · 0 评论 -
mybatis传参、被逗号、分割的字符串、数组传参
案例借鉴: SELECT * FROM yp_popup_store_info store WHERE store.store_id IN <foreach item="item" index="index" collection="ids.split(',')" open="(" separator="," close=")"> '${item}' &.原创 2020-11-24 15:20:48 · 1081 阅读 · 0 评论 -
这样规范写代码,同事,拍桌子 大喊 “666”
一、MyBatis 不要为了多个查询条件而写 1 = 1当遇到多个查询条件,使用where 1=1 可以很方便的解决我们的问题,但是这样很可能会造成非常大的性能损失,因为添加了 “where 1=1 ”的过滤条件之后,数据库系统就无法使用索引等查询优化策略,数据库系统将会被迫对每行数据进行扫描(即全表扫描) 以比较此行是否满足过滤条件,当表中的数据量较大时查询速度会非常慢;此外,还会存在SQL 注入的风险。反例:<selectid="queryBookInfo"parameterTy..转载 2020-09-17 17:07:51 · 243 阅读 · 0 评论 -
mybatis几种传值方式
第一种方案DAO层的函数方法Public User selectUser(String name,String area);对应的Mapper.xml<select id="selectUser" resultMap="BaseResultMap"> select * from user_user_t where user_name = #{...原创 2019-08-28 09:53:37 · 750 阅读 · 0 评论 -
Web SpringMVC简介绍之简单入门
实用请点赞和关注,后期有更多内容分享,携手同行!Web MVC简介1.1、Web开发中的请求-响应模型: 在Web世界里,具体步骤如下:1、 Web浏览器(如IE)发起请求,如访问http://sishuok.com2、 Web服务器(如Tomcat)接收请求,处理请求(比如用户新增,则将把用户保存一下),最后产生响应(一般为html)。3、web服务器处理完成...原创 2018-12-01 10:47:42 · 273 阅读 · 1 评论 -
mybatis-plus 简介、安装、配置(1)【just Like】
版权声明:本文为博主原创文章,未经博主允许不得转载https://blog.csdn.net/qq_41570658使用请点赞和关注,后期还有更多内容分享和更新,谢谢!MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集。MyBatis 使用简单的 XML 或注解来配置和映...原创 2018-12-10 11:14:06 · 1029 阅读 · 0 评论 -
严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis
严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListenerjava.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener at o...原创 2019-01-03 17:24:37 · 425 阅读 · 0 评论 -
Java代码之JDBC实现数据库之间定时的表格传输(由一个库读取到另一个库)实例
本代码主要是JDBC和Java定时器,注释很详细,希望对大家有用,有什么不明白的可以在评论处留言 共同探讨package first;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;impo...原创 2018-12-18 21:42:14 · 2033 阅读 · 0 评论 -
WebSocket 详解教程
目录WebSocket 是什么?为什么需要 WebSocket ?WebSocket 如何工作?WebSocket 客户端客户端 APIWebSocket 服务端Node.jsJavaWebSocket 代理FAQHTTP 和 WebSocket 有什么关系?Html 和 HTTP 有什么关系?完整示例资料WebSocket 是什么?...原创 2019-01-04 11:32:26 · 617 阅读 · 0 评论 -
严重: A child container failed during start
严重: A child container failed during startjava.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]....原创 2019-01-22 16:34:04 · 280 阅读 · 0 评论 -
编程到底难在哪里?
知乎上不错的解释和回答:普通人:我今天要买一斤苹果。程序员:我今天要买一斤苹果。因为我只喜欢红富士苹果,所以我只买红富士苹果。我能接受的最高价格是 10 元 / 斤。正常情况下一斤苹果用一个袋子能装下,但是为防万一,我会带两个袋子。我知道附近的 3 家水果店,所以我会依次访问这 3 家水果店。根据上述条件,我设计出以下的买苹果的流程:经过一番测试后的流程...原创 2019-03-29 14:56:51 · 288 阅读 · 0 评论 -
mysql 同表 父子关系查询 【亲测可用】
一、函数系列:1、根据传入id查询所有父节点的iddelimiter // CREATE FUNCTION `getParList`(rootId INT)RETURNS varchar(1000) BEGIN DECLARE sTemp VARCHAR(1000); DECLARE sTempPar VARCHAR(1000); SET sTemp =...原创 2019-04-18 18:06:41 · 11118 阅读 · 0 评论 -
TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 7
你希望返回一行,但实际select得到的,超过一行记录。先查清楚WHERE条件,确定是返回一行的情况,再用selectOne一般出现在通过某字段查询某对象,希望得到一个对象,但是此结果有多条喜欢请点赞:...原创 2019-05-05 11:45:23 · 10478 阅读 · 0 评论 -
Mybatis.xml文件中大于、小于、等于
第一种写法:原符号 < <= > >= & ' "替换符号 < <= > >= & ' "例如:sql如下:create_date_time >= #{startTime} and create_date_time &l...原创 2019-05-31 11:23:08 · 41869 阅读 · 3 评论 -
Cannot find class: BaseResultMap解决方法
我们在使用mybatics的时候,在我们的xml编写之中,偶尔会遇到Cannot find class: BaseResultMap这样的问题,但是我们都很清楚的看到了,自己确确实实的定义了这样一个BaseResultMap类,那么这究竟是什么样子的问题呢?就由我给大家带来简单而又高效的解决办法吧。 我们先来说一下解决办法吧,其实很简单,第一是你要确认我们定义了这么一个BaseResu...原创 2019-05-28 20:05:09 · 5864 阅读 · 2 评论