MyBatis

springboot2整合mybatis-plus3踩到的坑

喜欢而已 提交于 2020-08-11 13:33:52
前言 最近在进行项目重构,在架构师的建议下,就把项目中mybatis切换成mybatis-plus。因为mybatis-plus在mybatis的基础上只做增强不做改变,因此切换的成本很低,就只需改jar和配置内容,原先的代码无需改动。 因为mybatis-plus对mybatis的友好支持,我们花了一点时间就把mybatis改成mybatis-plus,那改造成不成功,先启动一下看不就知道了。然而一启动就翻车了,报了如下的错误 com.baomidou.mybatisplus.core.MybatisConfiguration.getLanguageDriver(Ljava/lang/Class;)Lorg/apache/ibatis/scripting/LanguageDriver; 完整的异常信息如下图 排查思路 从打印的异常信息,我们知道是不存在getLanguageDriver()这个方法。跟进源码会发现 getLanguageDriver这个方法可能是由 com.baomidou.mybatisplus.core.MybatisConfiguration 或者MybatisConfiguration的父类 org.apache.ibatis.session.Configuration 提供。由异常信息我们可以猜测如果项目要启动成功

项目中如何实现 SQL 耗时监控?(实现篇)

落爺英雄遲暮 提交于 2020-08-11 11:11:32
项目开发中,经常会对耗时较长的 SQL 进行针对性优化,而在搭建项目雏形时, 统计 SQL 耗时的能力,是项目中必不可少的 基础服务能力。 那么,大家平时在项目中,都是怎么实现 SQL 耗时监控的呢? 本次结合实际项目,去看看如何实现 SQL 耗时监控?当下的绝大多数项目还是主要基于 MyBatis 技术栈完成 CRUD,接下来主要基于 MyBatis 技术栈去谈实现。 1 关键位置,横插一刀,学名:拦截器。 倘若要统计 Mybatis 数据库操作的耗时,那么需要人为指定拦截 Executor 类,因为在 Mybatis 中 SQL 的操作都是从 Executor 类开始的。 上面代码截图,主要是要告诉 MyBatis,当前插件用来拦截哪个对象的哪个方法。 其中 type 指定要拦截的对象,例如 Excutor; method 指定要拦截的方法,例如要拦截 update、query 方法; args 代表传递的参数。 接下来就实现 MyBatis 提供的 Interceptor 接口的方法,代码截图如下 。 重点关注上图中的标注 1 部分,拦截目标对象的目标方法的执行。此时便可以通过 MappedStatement 对象获取 xml 映射文件中的每一条 SQL 语句,进而完成 SQL 耗时的监控,当然可以进行美化 SQL 输出。 其余代码不解释,为了助你实现 SQL 监控功能

spring boot系列(六) 使用MybatisGenerator生成dao实体类和xml映射文件

倖福魔咒の 提交于 2020-08-11 10:44:12
[toc] mybatis generator 官网教程 mybatis配置类 @Configuration @MapperScan("com.example.codercow.core.dao") public class MybatisConfig { @Autowired private DataSource dataSource; @Bean public SqlSessionFactory sessionFactoryBean() throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); factoryBean.setTypeAliasesPackage("com.example.codercow.core.model"); PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); factoryBean.setMapperLocations(resolver.getResources("classpath*:**/sqlmapper/*.xml")); return

颓废程序员,大四=失业,用一个月时间让我遇见更好的我自己,努力ing,我会持续更新我自己的成果以及遇到的问题的

左心房为你撑大大i 提交于 2020-08-11 10:12:18
因为太菜了,所以本博客基本就是写日记呀,写写心得写写学到的东西遇到的坑,以后复习起来也方便,不是做什么大型项目 资料基本都是看的一些b站上面的视频可能会很浅显,希望有看到的大佬们能给点建议,根据大佬们的建议我会去更改自己的计划,在这就先谢谢那些大佬们啦,谢谢你们的帮助!!! Java基础知识以及servlet之前已经看过了,应该还可以,如果之后又要用到遗忘的用到的时候再去快速得补一下 我必须要把这些进度完成,不然不睡觉!!! 8.8 计算机网络,tcp/ip协议,socket,操作系统,cpu底层(马士兵老师的课程) 8.9Spring复习 8.10-8.11SpringMVC 8.13-8.14MyBatis 8.15-8.16SpringBoot 8.17-8.19struts框架 8.20-8.22habinate框架 8.23-8.25分布式架构 8.26-8.28Netty框架 8.29-8.30radis 8.31-9.2SpringCloud 9.3-9.5Nginx 9.6-9.7Zookeeper 9.8-9.9SVN,git,Maven,docker 可能我写的都很菜,大家别介意啊,只是想写一个博客来记录我自己,为自己而奋斗一把,不让游戏一直占据着我的生活 因为我是2021届的本科生,学校是以前的三本所以要靠自己去学,现在学校里面催着要快点找到工作

Hibernate 与 Mybatis 如何共存?打破你的认知!

折月煮酒 提交于 2020-08-11 10:07:37
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 很长一段时间,网上有很多关于Hibernate与Mybatis孰优孰劣的争论,两个阵营的人谁也不能说服谁,每个人的理由都很有道理。 今天,我分享的主题是:在一个项目中同时使用Hibernate和Mybatis两个ORM框架。 作为一个开发者,没有必要花费过多的时间去证明技术无用论,当你开始指责某个框架垃圾,另外一个框架最好时,隐性的暴露出你对某个框架没有深入的研究,无知的指责对于技术的提升没有任何的帮助。 框架本身没有对错一说,只有适合和更适合项目的选择。任何框架都有自身的能力范围,就拿Hibernate和Mybatis这两个ORM框架来说。 Hibernate封装了很多有用的API给开发者,降低了操作数据库的难度和复杂度,同时也减少了模板代码的数量,但Hibernate留给开发者可操作的空间相对Mybatis少了很多。 Mybatis框架使用起来很灵活,开发者可以自定义查询语句,但增加了模板代码的数量,看起来没有Hibernate那么便捷。 两种框架在便捷与灵活两个指标上做出了取舍与妥协,这不能说是框架的错。对于一个框架而言,需要有自身专注的领域和设计愿景,不可能面面俱到。 使用任何一种技术框架,都需要贴合现实的业务需求以及自身的技术能力

聊聊最近撸Spring源码感悟

只谈情不闲聊 提交于 2020-08-11 08:17:20
一、前言 最近一段时间撸了Spring IOC、AOP、Transactional源码,这篇文章聊聊我写了哪些小玩意,这可能就是阅读源码以后最大收获。希望大家在里面能学习一些什么东西吧; 二、Spring IOC简单实现 第一步首先看一下配置文件,配置文件模拟Spring Bean注入时候的样子,少了XML验证头的一些东西; <?xml version="1.0" encoding="UTF-8"?> <beans> <bean id="student" class ="org.handwriting.spring.entity.Student"> <property name="name" value="wtz" /> <property name="age" value="20" /> </bean> </beans> View Code 第二步是实体类; public class Student { private String name; private String age; public String getName() { return name; } public void setName(String name) { this .name = name; } public String getAge() { return age; } public void

MyBatis生命周期和作用域

自古美人都是妖i 提交于 2020-08-11 06:50:59
一 点睛 生命周期和作用域是至关重要的,因为错误的使用会导致非常严重的并发问题。 1 SqlSessionFactoryBuilder 一旦创建了SqlSessionFactory,就不再需要它了。 一般用于局部变量。 2 SqlSessionFactory 可以想象成数据库连接池。 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。 SqlSessionFactory 的最佳作用域是应用作用域。 最简单的就是使用单例模式或者静态单例模式。 3 SqlSession 连接到连接池的一个请求! SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。 用完之后需要关闭,否则资源被占用! 每一个Mapper就代表一个具体的业务。 二 图解 来源: oschina 链接: https://my.oschina.net/u/4306931/blog/4318196

Mybatis 返回自增主键的id

一世执手 提交于 2020-08-11 05:53:49
Mybatis 返回自增主键的id keyProperty=id:封装到对象中的id字段当中 keyColumn=id:封装到数据库的id这一列 order=AFTER:在新增语句之后执行 方法一 <insert id="insertUser" parameterType="com.itqf.pojo.User"> <selectKey resultType="int" keyProperty="id" keyColumn="id" order="AFTER"> select last_insert_id() </selectKey> insert into user() values() </insert> 方法二 <insert id="insertUser" parameterType="com.itqf.User" useGeneratedKeys="true" keyProperty="id" keyColumn="id"> insert into user()value() </insert> 来源: oschina 链接: https://my.oschina.net/u/4267017/blog/4288087

MySql查询所有字段不为空值的数据及Mybatis的#号和$符的区别引起的问题

回眸只為那壹抹淺笑 提交于 2020-08-11 05:33:26
1.MySql查询所有字段不为空值的数据 搜了一上午搜不到,最后用Mybatis的foreach标签,先查询出表字段, SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.Columns WHERE table_name='lltest' 然后传入了另一条SQL中,使用foreach标签完成了这个操作。 <select id ="getNotNullData" resultType ="com.example.bean.LlTest" > SELECT * FROM lltest WHERE <foreach collection ="list" open ="" close ="" separator ="AND" item ="item" > ${item} IS NOT NULL </foreach> </select> 2.#号和$符号的区别 在使用foreach的时候,发现使用#号来获取字段名时,查询到的结果跟mysql直接查询的结果不一样,会查询出所有数据,感觉没有条件限制。 这个原因是#号会把获取到的值加上双引号,当字符串来使用,而我循环的是字段名,字段名不能用双引号。改为$符号就可以了。 #相当于对数据 加上 双引号,$相当于直接显示数据 3.对比: ###使用#号时log4j打印的SQL语句 SELECT * FROM

阿里P8大牛的建议,工作1-5年的Java工程师如何让自己变得更值钱

不羁的心 提交于 2020-08-11 04:16:09
今天这篇文章主要想跟大家分享:工作 1-5 年的 Java 工程师们,如何变得更值钱? 如果你现在已经是一个 Java 工程师,但是经验积累的还不够,那这个阶段就是你成长极快的时候。 前提是,你认同我之前经常说那句话: 从你入行那一刻起,你就要不停地学习。 对于 Java 工程师来说,想在业务能力上更进一步、让自己更值钱,最大的捷径就是用正确的方法来学习,好的方法能让你事半功倍。 我面试过多人,之前也在大厂待过,深知一个道理: 作为一个程序员,你的知识体系,和企业的用人需求,是不一样的。 Java 工程师尤其是。 我也见过一些读者朋友,觉得自己的 Java 技术过关,但是一到面试就被 pass 了,问题就出在这,无法将 Java 技术应用到实际开发中。 这里我建议 Java 经验 1-5 年的读者,可以对标阿里 P7 的标准。 给大家分享一份《对标阿里P7Java架构师学习路线图》,刚开始参加工作及已经工作五六年的朋友都可以参考参考,梳理一下自己的技术栈,这些东西可能你们平时在工作中接触过,但是缺少的全面系统的学习,所以掌握的都不深,希望看了路线图以后大家知道从哪里开始入手学习。 这是通往架构师的必经之路,由浅入深地沉稳扎根基础。 需要完整版《对标阿里P7Java架构师学习路线图》的朋友,请转发+关注,然后私信回复 “666” 获取免费领取方式。 一、扎实基础、深入底层