
ORM
文章平均质量分 75
ORM常见框架:Hibernate, Mybatis,TopLink
狂奔的蜗牛Evan
hello world
展开
-
@Select @SelectProvider中使用<foreach>时不生效问题
解决办法:、等标签属于xml语法,必须配合标签使用。问题:@Select @SelectProvider中使用时不生效。原创 2022-10-12 18:34:39 · 1113 阅读 · 0 评论 -
MyBatis-Plus学习路线
官方网址:简介 | MyBatis-PlusMyBatis-Plus(opens new window)(简称 MP)是一个MyBatis(opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。愿景我们的愿景是成为 MyBatis 最好的搭档,就像魂斗罗中的 1P、2P,基友搭配,效率翻倍。#特性无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自动注入基本 CURD,性...转载 2022-05-12 00:30:24 · 215 阅读 · 0 评论 -
MapStruct超级简单的学习笔记
使用MapStruct首先来了解一下DTO,DTO简单的理解就是做数据传输对象的,类似于VO,但是VO用于传输到前端。(~~)1.MapStruct是用来做什么的?现在有这么个场景,从数据库查询出来了一个user对象(包含id,用户名,密码,手机号,邮箱,角色这些字段)和一个对应的角色对象role(包含id,角色名,角色描述这些字段),现在在controller需要用到user对象的id,用户名,和角色对象的角色名三个属性。一种方式是直接把两个对象传递到controller层,但是这样会多出很多没用的属转载 2021-08-20 16:50:31 · 755 阅读 · 0 评论 -
mapstruct使用详解
阅读目录:序 一、准备工作 1.1、了解@Mapper 注解 1.2、依赖包 二、先简单玩一把 2.1、定义实体类以及被映射类 2.2、定义接口: 2.3、使用 2.4、查看编译结果 2.5、浏览器查看结果 三、不简单的情况 3.1、类型不一致 3.2、字段名不一致 3.3、属性是枚举类型 源代码阅读正文:我们都知道,随着一个工程的越来越成熟,模块划分会越来越细,其中实体类一般存于 domain 之中,但 domain 工程最好不要被其他工转载 2021-08-20 16:40:05 · 2303 阅读 · 0 评论 -
MyBatis中@MapKey使用详解
MyBatis中@MapKey使用详解我们在上一篇文章中讲到在Select返回类型中是返回Map时,是对方法中是否存在注解@MapKey,这个注解我也是第一次看到,当时我也以为是纯粹的返回单个数据对象的Map类型,但是发现还是有些不同的,这个可以用来返回多条记录,具体用法与分析如下。@MapKey用法我查了一下MapKey的用法,这里加上MapKey注解后,还有指定一个字段作为返回Map中的key,这里一般也就是使用唯一键来做key,我这就使用id做key吧。在UserMapper中添加一个转载 2021-08-18 15:59:18 · 3339 阅读 · 0 评论 -
(工具类)mybatis如何开启batch模式
一般来说,对于SSM项目工程来说,mybatis的ExectoryType默认是simple,那么又如何能动态使用batch模式呢?直接上源码实现干货:import org.apache.ibatis.session.ExecutorType;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSes转载 2021-04-08 16:09:09 · 1643 阅读 · 0 评论 -
MyBatis批量插入几千条数据慎用foreach
近日,项目中有一个耗时较长的Job存在CPU占用过高的问题,经排查发现,主要时间消耗在往MyBatis中批量插入数据。mapper configuration是用foreach循环做的,差不多是这样。(由于项目保密,以下代码均为自己手写的demo代码)<insert id="batchInsert" parameterType="java.util.List"> insert into USER (id, name) values <foreach collect...转载 2021-04-08 15:38:03 · 1910 阅读 · 0 评论 -
批处理 rewriteBatchedStatements=true(批量插入更新)
最近在优化大批量数据插入的性能问题。项目原来使用的大批量数据插入方法是Mybatis的foreach拼接SQL的方法。我发现不管改成Mybatis Batch提交或者原生JDBC Batch的方法都不起作用,实际上在插入的时候仍然是一条条记录的插,速度远不如原来Mybatis的foreach拼接SQL的方法。这对于常理来说是非常不科学的。下面先罗列一下三种插入方式:public class NotifyRecordDaoTest extends BaseTest { @Reso.转载 2021-04-08 15:34:43 · 1581 阅读 · 0 评论 -
mybatis批量更新数据三种方法效率对比
探讨批量更新数据三种写法的效率问题。实现方式有三种,一种用for循环通过循环传过来的参数集合,循环出N条sql,另一种 用mysql的case when 条件判断变相的进行批量更新 还有一个是用ON DUPLICATE KEY UPDATE进行批量更新下面进行实现。注意第一种方法要想成功,需要在db链接url后面带一个参数 &allowMultiQueries=true即:jdbc:mysql://localhost:3306/mysqlTest?characte...转载 2021-04-08 10:48:25 · 957 阅读 · 0 评论 -
SqlSessionFactoryBean详解
文章目录 官方学习地址 作用 代码分析 buildSqlSessionFactory方法 官方学习地址官网:http://mybatis.org/spring/zh/factorybean.html作用代码分析类图:继承的接口:InitializingBean:这个接口的作用是spring初始化的时候会执行实现了InitializingBean接口的afterPropertiesSet方法;具体怎么执行暂时就不说了; ApplicationListener.转载 2020-12-29 11:52:32 · 1268 阅读 · 0 评论 -
SqlSession和SqlSessionTemplate的不解姻缘系列之一(总体阐述)
写在之前最近在使用Mybatis的时候很是好奇一些实现细节,所以也就多留意了下。 SqlSessionFactory、SqlSessionFactoryBean、SqlSession和SqlSessionTemplate是大家直接使用比较多的。这里我先不说这些类的实现细节,先大致说下它们之间的关系,相信会有同样的人对于它们之间的关系感兴趣。设计者设计这个类的时候肯定是有目的性的,搞清楚目的性再去看实现源码才会有方向性,从而达到事半功倍的效果。我会结合自己的理解,连续通过几篇文章来讲述下它们之间的感情纠葛转载 2020-12-29 11:30:52 · 1156 阅读 · 0 评论 -
MyBatis常用对象SqlSessionFactory和SqlSession介绍和运用
前言:学习框架一个比较好的路径阅读源码.本文介绍的SqlSessionFactory和SqlSession.可以通过了解SqlSessionFactory接口和SqlSession接口以及两个的实现类入手,去看源码了解实现过程.最好能把项目下载到本地,慢慢分析实现过程.Myabtis官网:http://www.mybatis.org/github地址:https://github.com/mybatis/mybatis-3MyBatis的持久化解决方案是将用户从原始的JDBC访问中解.转载 2020-12-29 11:18:26 · 783 阅读 · 0 评论 -
对于SqlSessionTemplate的理解
写在开始最近利用闲暇时间猫了一下mybatis和mybatis-spring的源码,看后发现SqlSessionTemplate和MapperFactoryBean这两个类对于mybatis的事务操作起到了关键的作用,因此写个随笔记录一下。本篇主要讲述下我个人对于SqlSessionTemplate的理解,关于MapperFactoryBean后续有时间会再写一篇文章记录一下。SqlSessionTemplateSqlSessionTemplate对于Mybatis事务提交起到了一个关键作用。先转载 2020-11-25 15:13:22 · 11178 阅读 · 3 评论 -
MyBatis升级踩的坑(从3.2.8升级到3.3.0以上) invalid comparison: java.util.Date and java.lang.String
MyBatis 查询错误:java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String项目中用 MyBatis Plus 替换了 MyBatis,原来的 MyBatis版本是3.2.8, MyBatis Plus 的版本是3.1.0,是基于 MyBatis3.5.0开发的,测试没啥问题,上线之后有一些功能不能使用,排查日志发现错误Error querying database....原创 2020-11-24 19:06:06 · 1404 阅读 · 1 评论 -
从一次MyBatis版本升级引发的线上告警说起
本文从一次MyBatis版本升级引发的线上告警开始讲起,然后针对告警定位过程、源码原理进行了深入的分析,并加入了不同版本的类比分析,最后结合实际工作做了一些经验总结,希望能对大家的工程实践有一定的帮助。背景某天晚上,美团到店事业群某项系统服务正在进行常规需求的上线。因为在发布时,提示inf-bom版本需要升级,于是我们就将inf-bom版本从1.3.9.6升级至1.4.2.1,如下图1所示: 图1 版本升级不过,当服务上线后,开始陆续出现了一些更新系统交互日志方面的报警,这属于系统的辅助流程转载 2020-11-23 17:15:45 · 241 阅读 · 1 评论 -
mysql使用mybatis批量更新问题 the error occurred while setting parameters
一、好言在光芒万丈之前,我们都要欣然接受眼下的难堪和不易,接受一个人的孤独和偶尔的无助。二、背景其实这是在处理一个问题的时候,需要批量更新数据,结果这个批量更新数据是有问题的,所以改了顺便记载下。问题SQL: update t_user set user_name = ?, age = ?, login_token = ? where login_token = ? ; update t_user set user_name = ?, age = ?, login_token .转载 2020-08-19 19:20:54 · 5074 阅读 · 0 评论 -
Sentinel整合Dubbo限流实战(分布式限流)
之前我们了解了 Sentinel 集成 SpringBoot实现限流,也探讨了Sentinel的限流基本原理,那么接下去我们来学习一下Sentinel整合Dubbo及 Nacos 实现动态数据源的限流以及分布式限流。 先来看一下我的工程目录:单服务的限流: Provider : 首先从 api 模块开始: 其中只是定义了一个接口:public interface SentinelService { String sayHello(String txt);}转载 2020-08-10 10:17:06 · 1287 阅读 · 0 评论 -
流量控制组件, 技术选型:Sentinel vs Hystrix
这是围绕 Sentinel 的使用场景、技术对比和实现、开发者实践等维度推出的系列文章的第三篇。第一篇回顾:Dubbo 的流量防卫兵 | Sentinel如何通过限流实现服务的高可用性 - 传送门第二篇回顾:RocketMQ 的保险丝| Sentinel 如何通过匀速请求和冷启动来保障服务的稳定性 - 传送门Sentinel 是阿里中间件团队研发的面向分布式服务架构的轻量级高可用流量控制组件,于今年7月正式开源。Sentinel 主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多转载 2020-08-10 10:04:11 · 743 阅读 · 0 评论 -
Mybatis 的工作原理,写得太好了!
近来想写一个mybatis的分页插件,但是在写插件之前肯定要了解一下mybatis具体的工作原理吧,于是边参考别人的博客,边看源码就开干了。核心部件: SqlSession Executor StatementHandler ParameterHandler ResultSetHandler TypeHandler MappedStatement Configuration 在分析工作原理之前,首先看一下我...转载 2020-07-14 09:41:30 · 218 阅读 · 0 评论 -
Mybatis源码中使用的9种设计模式总结
导读相信大家都知道有26种设计模式,很多人都熟知多种设计模式概念.如果我们理解的不透彻,在实际开发中,很难做到学以致用.Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的运用,能够帮助我们更深入的理解设计模式,希望给大家带来一些启发.Mybatis源码中运用的设计模式:Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuil...转载 2020-07-09 18:49:46 · 434 阅读 · 1 评论 -
Mybatis实战之TypeHandler高级进阶
上篇文章分享了在项目实战中自定义Mybatis的TypeHandler来处理枚举类型。文章结尾也指出了美中不足之处,那就是每次都需要指定我们自定义的枚举TypeHandler。 随着项目枚举类型的增多,每次都要写一遍这个会令人很反感。那么,本次我们就来解决这一痛点。思路分析 上篇文章讲到, mybatis有默认的处理枚举类型的TypeHandler,因此,我们要将我们自定义的枚举TypeHandler注册进入Mybatis。 注册完我们自定义的TypeHandler后,还得告诉Mybat转载 2020-07-01 09:41:16 · 182 阅读 · 0 评论 -
Mybatis实战之自定义TypeHandler处理枚举
在Mybatis中,处理枚举类的TypeHandler有两个:EnumTypeHandler: 用于保存枚举名 EnumOrdinalTypeHandler: 用于保存枚举的序号。在实际项目中,以上往往不能满足我们的需求。需求分析枚举需要包含两个属性,label(用于显示), value(实际的枚举值)。数据库保存枚举值(value)。这很明显Mybatis提供的两个枚举TypeHandler不能满足我们的需求。此时,我们可以自定义一个通用的枚举TypeHandler来满足我们的需求。转载 2020-07-01 09:41:07 · 628 阅读 · 1 评论 -
深入浅出Mybatis系列(十)---SQL执行流程分析(源码篇)
最近太忙了,一直没时间继续更新博客,今天忙里偷闲继续我的Mybatis学习之旅。在前九篇中,介绍了mybatis的配置以及使用, 那么本篇将走进mybatis的源码,分析mybatis 的执行流程, 好啦,鄙人不喜欢口水话,还是直接上干活吧:1. SqlSessionFactory 与 SqlSession. 通过前面的章节对于mybatis 的介绍及使用,大家都能体会到SqlSession的重要性了吧, 没错,从表面上来看,咱们都是通过SqlSession去执行sql语句(注意:是从表面看,实际转载 2020-06-30 15:58:25 · 186 阅读 · 0 评论 -
深入浅出Mybatis系列(九)---强大的动态SQL
上篇文章《深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap》简单介绍了mybatis的查询,至此,CRUD都已讲完。本文将介绍mybatis强大的动态SQL。那么,问题来了: 什么是动态SQL? 动态SQL有什么作用? 传统的使用JDBC的方法,相信大家在组合复杂的的SQL语句的时候,需要去拼接,稍不注意哪怕少了个空格,都会导致错误。Mybatis的动态SQL功能正是为了解决这种问题, 其通过 if, choose, when, otherwise,转载 2020-06-30 15:56:54 · 202 阅读 · 0 评论 -
深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap
上篇《深入浅出Mybatis系列(七)---mapper映射文件配置之insert、update、delete》介绍了insert、update、delete的用法,本篇将介绍select、resultMap的用法。select无疑是我们最常用,也是最复杂的,mybatis通过resultMap能帮助我们很好地进行高级映射。下面就开始看看select 以及 resultMap的用法:先看select的配置吧:<select <!-- 1. id (必须配置)转载 2020-06-30 15:55:36 · 623 阅读 · 0 评论 -
深入浅出Mybatis系列(七)---mapper映射文件配置之insert、update、delete
上篇文章《深入浅出Mybatis系列(六)---objectFactory、plugins、mappers简介与配置》简单地给mybatis的配置画上了一个句号。那么从本篇文章开始,将会介绍mapper映射文件的配置, 这是mybatis的核心之一,一定要学好。在mapper文件中,以mapper作为根节点,其下面可以配置的元素节点有: select, insert, update, delete, cache, cache-ref, resultMap, sql 。本篇文章将简单介绍insert, .转载 2020-06-30 15:53:27 · 714 阅读 · 0 评论 -
深入浅出Mybatis系列(六)---objectFactory、plugins、mappers简介与配置
上篇文章《深入浅出Mybatis系列(五)---TypeHandler简介及配置(mybatis源码篇)》简单看了一下TypeHandler, 本次将结束对于mybatis的配置文件的学习, 本次涉及到剩下没提及到的几个节点的配置:objectFactory、databaseIdProvider、plugins、mappers。那么,接下来,就简单介绍一下这几个配置的作用吧:1、objectFactory是干什么的? 需要配置吗? MyBatis 每次创建结果对象的新实例时,它都会使用一个对象转载 2020-06-30 15:51:31 · 194 阅读 · 0 评论 -
深入浅出Mybatis系列(五)---TypeHandler简介及配置(mybatis源码篇)
上篇文章《深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)》为大家介绍了mybatis中别名的使用,以及其源码。本篇将为大家介绍TypeHandler, 并简单分析其源码。Mybatis中的TypeHandler是什么? 无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成 Java 类型。Mybatis默认为我们实现了许多TypeHan转载 2020-06-30 15:49:41 · 329 阅读 · 0 评论 -
深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)
上篇文章《深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)》 介绍了properties与environments, 本篇继续讲剩下的配置节点之一:typeAliases。 typeAliases节点主要用来设置别名,其实这是挺好用的一个功能, 通过配置别名,我们不用再指定完整的包名,并且还能取别名。 例如: 我们在使用 com.demo.entity. UserEntity 的时候,我们可以直接配置一个别名user, 这样以后在配转载 2020-06-30 15:48:18 · 291 阅读 · 0 评论 -
深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)
上篇文章《深入浅出Mybatis系列(二)---配置简介(mybatis源码篇)》我们通过对mybatis源码的简单分析,可看出,在mybatis配置文件中,在configuration根节点下面,可配置properties、typeAliases、plugins、objectFactory、objectWrapperFactory、settings、environments、databaseIdProvider、typeHandlers、mappers这些节点。那么本次,就会先介绍properties节点转载 2020-06-30 15:46:58 · 185 阅读 · 0 评论 -
深入浅出Mybatis系列(二)---配置简介(mybatis源码篇)
上篇文章《深入浅出Mybatis系列(一)---Mybatis入门》, 写了一个Demo简单体现了一下Mybatis的流程。本次,将简单介绍一下Mybatis的配置文件:上次例子中,我们以SqlSessionFactoryBuilder 去创建 SqlSessionFactory, 那么,我们就先从SqlSessionFactoryBuilder入手, 咱们先看看源码是怎么实现的:SqlSessionFactoryBuilder源码片段: 1 public class SqlSessi..转载 2020-06-30 15:44:27 · 171 阅读 · 0 评论 -
深入浅出Mybatis系列(一)---Mybatis入门
最近两年 springmvc + mybatis 的在这种搭配还是蛮火的,楼主我呢,也从来没真正去接触过mybatis, 趁近日得闲, 就去学习一下mybatis吧。 本次拟根据自己的学习进度,做一次关于mybatis 的一系列教程, 记录自己的学习历程, 同时也给还没接触过mybatis的朋友探一次道。本系列教程拟 由浅(使用)入深(分析mybatis源码实现),故可能需要好长几天才能更新完。好啦,下面就开始本次的mybatis 学习之旅啦, 本次为第一篇教程, 就先简单地写个demo, 一起来认识一下m转载 2020-06-30 15:40:00 · 188 阅读 · 1 评论 -
mybatis 动态SQL查询总结
背景××项目需要提供系统部分函数第三方调用接口,基于安全性和避免暴露数据库表信息的基础上进行函数接口的设计,根据第三方调用身份的权限提供某张表的自定义集合。本项目基于mybatis的持久层框架,支持定制化的SQL,这样可以避免拼接sql语句的痛苦。例如拼接时要确保不能添加空格,还要注意去掉列表的最后一个列名的都逗号。基于OGNL的表达式的mybatis框架可以彻底解决这种痛苦。动态返回mysql某张表指定列的名字,类型和注释<select id="queryColumns" result转载 2020-06-23 16:16:34 · 413 阅读 · 0 评论 -
极简Spring Boot整合MyBatis多数据源
关于多数据源的配置,前面和大伙介绍过JdbcTemplate多数据源配置,那个比较简单,本文来和大伙说说MyBatis多数据源的配置。 其实关于多数据源,我的态度还是和之前一样,复杂的就直接上分布式数据库中间件,简单的再考虑多数据源。这是项目中的建议,技术上的话,当然还是各种技术都要掌握的。工程创建首先需要创建MyBatis项目,项目创建和前文的一样,添加MyBatis、MySQL以及Web依赖:项目创建完成后,添加Druid依赖,和JdbcTemplate一样,这里添加Druid依赖.转载 2020-06-23 15:27:30 · 702 阅读 · 0 评论 -
MyBatis快速入门(一)
Mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 中文官网地址:http://www.mybatis.org/mybatis-3/zh/index.html GitH转载 2020-06-23 14:57:54 · 251 阅读 · 0 评论 -
(1)为什么使用Mybatis
1) 什么是框架?2) 3种架构表现层:用于展示数据的 (SpringMVC)业务层:处理业务需求持久层:和数据库交互的 (MyBatis)3)结构MyBatis : 表现层SpringMVC : 持久层Spring:不属于任何一层4) 持久层技术解决方案疑问:既然我们会JDBC和Spring的JdbcTemplate都能进行增删改查了 为什么还要学习MyBatis框架呢?我们来回顾一下JDBC的代码:既然能写,也能实现功能,那么必然存在问题比如J转载 2020-06-23 14:21:56 · 215 阅读 · 0 评论 -
[Java]为什么要使用MyBatis
侃一侃为什么要使用MyBatis,不能直接使用java操作数据库吗?答案当然是不能,不仅仅是因为程序员懒,更重要的是提高工作效率和代码性能。MyBatis是非常优秀的持久层ORM框架,简化开发人员对关系数据库的使用。如果不清楚MyBatis的原理、MyBatis的配置则需要参考其他的文章,此处不做详述。此处将详细说明MyBatis的优势。Mybatis要想知道MyBatis有哪些优势,首先需要了解Java操作数据库的原始方式。传统JDBC步骤传统的JDBC(Java DataBase转载 2020-06-23 14:10:50 · 381 阅读 · 0 评论 -
国内mybatis流行的原因
回答一:作者:Java架构师链接:https://www.zhihu.com/question/50729231/answer/625854112来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。近期很多技术论坛都在热议:为什么MyBatis在国内非常流行,而国外好像无人问津?那我就说说自己的看法吧。从下图我们可以非常直观地看出,在最近的JVM生态报告中,Mybatis的确不高。但是在国内为什么MyBatis如此之流行?我认为有以下几个原因:...转载 2020-06-23 14:08:50 · 497 阅读 · 0 评论 -
常见ORM框架理解
JAVA编程免不了和数据库打交道,那么如何高效便捷地操作数据库,也是一个需要而对的问题,原生的基于JDBC的方式当然是非常低效,而且要写一大堆无用的模板代码,不值得选取。好在我们不需要重复的造轮子,目前已经有很多优秀的ORM框架可供使用了,常见的比如Hibernate, Mybatis,TopLink等,JAVA EE3.0规范中提出的JPA,同样也是十分的好用,所以有时面试官也会问一下些和这个相关的面试题,下面整理一些个人遇到,或者网上经常看到的一些面试题 。 一、什么是JPA,为什么要有JPA?转载 2020-06-23 11:54:54 · 387 阅读 · 0 评论 -
什么是ORM?为什么用ORM?浅析ORM的使用及利弊
什么是ORMORM(Object-relational mapping),中文翻译为对象关系映射,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。为什么用ORM在程序开发中,数据库保存的表,字段与程序中的实体类之间是没有关联的,在实现持久化时就比较不方便。那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。这种方案存在以下不足:转载 2020-06-23 11:40:51 · 6256 阅读 · 0 评论