mybatisplus查询(mybatisplus日期查询)

admin 495 0

本篇文章给大家谈谈mybatisplus查询,以及mybatisplus日期查询对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

一、工作中不推荐mybatisplus

1、能不能用到得看公司和项目,不是很大的新项目可能会考虑用mybatis-plus,上手简单。稍大点儿的项目用着挺难受的,有坑且拓展定制灵活度不够。

2、MyBatis-plus是一款Mybatis增强工具,用于简化开发,提高效率。优点:无侵入,只做增加不做改变,引入它对工程无影响;损耗小,启动时会自动注入基本CRUD操作,性能基本无损耗,直接面向对象;强大的CRUD操作,内置Mapper、Service,只需简单少量配置就可以实现对单表大量的CRUD操作,更有强大的条件构造器,满足各类使用需求;内置代买生成器,采用代码或者maven插件,就可以快速生成Mapper、model、service、controller多层代码;支持模板引擎,有更多许多自定义配置使用;内置分页插件,myabyis基于数据库的基本物理分页,开发者无需担心各类操作问题,只要做好简单啊配置,就可以实现分页查询;内置全局拦截插件,提供全表delete,update操作分析阻断策略,也可以自定义拦截规则,预防错误操作。缺点:项目引入第三方插件包,未来升级有一定的兼容性问题;社区技术迭代行快,从而会导致有效部分技术文档得不到及时更新。

二、MyBatis-Plus快速入门源码笔记共享,拿走吧你

答:MyBatisPlus可以节省我们大量工作时间,所有的CRUD代码它都可以自动化完成!

2. sql写在xml里,便于统一管理和优化。

4.提供映射标签,支持对象与数据库的orm字段关系映射

5.提供对象关系映射标签,支持对象关系组建维护

6.提供xml标签,支持编写动态sql。

MyBatis Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。

就像魂斗罗中的 1P、2P,基友搭配,效率翻倍。

无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑。

损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD操作,更有强大的条件构造器,满足各类使用需求支持 Lambda形式调用:通过 Lambda表达式,方便地编写各类查询条件,无需再担心字段写错。

支持组件自动生成:支持多达 4种主键策略(内含分布式唯一 ID生成器 Sequence),可自由配置,完美解决主键问题。

支持 ActiveRecord模式:支持 ActiveRecord形式调用,实体类只需继承 Model类即可进行强大的 CRUD操作。

支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere)。

内置代码生成器:采用代码或者 Maven插件可快速生成 Mapper、 Model、 Service、 Controller层代码,支持模板引擎,更有超多自定义配置等您来使用内置分页插件:基于 MyBatis物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List查询。

分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer等多种数据库。

内置性能分析插件:可输出 Sql语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询。

内置全局拦截插件:提供全表 delete、 update操作智能分析阻断,也可自定义拦截规则,预防误操作。

1.1、引入mybatis-plus相关maven依赖

引入mybatis-plus在spring boot中的场景启动器

ps:切记不可再在pom.xml文件中引入mybatis与mybatis-spring的maven依赖,这一点,mybatis-plus的官方文档中已经说明的很清楚了.

1 package com.example.demo.pojo

1.4、配置application.proprties

ps:在进行crud实验之前,简单对mybatis与mybatis-plus做一个简单的对比

2.1、mybatis与mybatis-plus实现方式对比

(1)提出问题:假设我们已存在一张 tbl_employee表,且已有对应的实体类 Employee,实现 tbl_employee表的 CRUD操作我们需要做什么呢?

(2)实现方式:基于 Mybatis需要编写 EmployeeMapper接口,并手动编写 CRUD方法提供 EmployeeMapper.xml映射文件,并手动编写每个方法对应的 SQL语句.基于 Mybatis-plus只需要创建 EmployeeMapper接口,并继承BaseMapper接口.这就是使用 mybatis-plus需要完成的所有操作,甚至不需要创建 SQL映射文件。

(1)如何理解核心接口BaseMapper?

在使用Mybatis-Plus时,核心操作类是BaseMapper接口,其最终也是利用的Mybatis接口编程的实现机制,其默认提供了一系列的增删改查的基础方法,并且开发人员对于这些基础操作不需要写SQL进行处理操作(Mybatis提供的机制就是需要开发人员在mapper.xml中提供sql语句),那样我们可以猜测肯定是Mybatis-Plus完成了BaseMapper接口提供的方法的SQL语句的生成操作。

(2)BaseMapper接口为我们定义了哪些方法?

(3) mybatis-plus中常用的注解 1

由于我们的数据表名于实体类的类名不一致,并且实体类于数据表还存在字段名不对应的情况,因此我们需要引入mybatis-plus的注解.

编写EmployeeMapper接口继承BaseMapper接口

如果我们不设置实体类的email与gender属性,结果是怎样的呢?

显然,mybatis-plus为我们做了非空判断,空值的话,默认不更新对应的字段.想一想,这是不是类似于mybatis中的动态sql呢?

这种处理效果又会带来什么好处呢?

ps:发现该方法底层使用的竟然是sql的in关键字

3、不得不提的条件构造器---Wrapper

(1)Wrapper:条件构造抽象类,最顶端父类,抽象类中提供3个方法以及其他方法.

三、MyBatis-Plus中如何使用ResultMap

1、MyBatis-Plus对 MyBatis基本零侵入,完全可以与 MyBatis混合使用,这点很赞。

2、在涉及到关系型数据库增删查改的业务时,我比较喜欢用 MyBatis-Plus,开发效率极高。具体的使用可以参考官网,或者自己上手摸索感受一下。

3、下面简单总结一下在 MyBatis-Plus中如何使用 ResultMap。

4、其中, tb_hero中的 bid关联 tb_book表的 id。

5、下面先看 Hero实体类的代码,如下:

6、注意了,我特地把 tb_hero表中的 bid字段映射成实体类 Hero中的 bookId属性。

7、没毛病, MyBatis-Plus会根据@TableField指定的映射关系,生成对应的 SQL。

8、也没毛病,可以看到生成的 SELECT中把 bid做了别名 bookId。

9、比如现在我想连接 tb_hero与 tb_book这两张表,如下:

10、查询 MyBatis-Plus打印出的 SQL为:

11、 SQL没啥问题,过滤与分页也都正常,但是此时你会发现 bookId属性为 null,如下:

12、调用 BaseMapper中内置的 selectById()方法并没有出现这种情况啊???

13、回过头来再对比一下在 HeroMapper中自己定义的查询与 MyBatis-Plus自带的 selectById()有啥不同,还记得上面的刚刚的测试吗,生成的SQL有啥不同?

14、原来, MyBatis-Plus为 BaseMapper中内置的方法生成SQL时,会把 SELECT子句中 bid做别名 bookId,而自己写的查询 MyBatis-Plus并不会帮你修改 SELECT子句,也就导致 bookId属性为 null。

15、在这里就是 tb_hero表中的 bid字段映射成实体类 Hero中的 bid属性。这样当然可以解决问题,但不是本篇讲的重点。

16、在@TableName设置 autoResultMap= true

17、然后在自定义查询中添加@ResultMap注解,如下:

18、下面简单看下源码,@ResultMap("mybatis-plus_实体类名")怎么来的。

19、详情见: com.baomidou.mybatisplus.core.metadata.TableInfo#initResultMapIfNeed()

20、注意看上面的字符串 id的构成,你应该可以明白。

21、思考:这种方式的 ResultMap默认是强绑在一个@TableName上的,如果是某个聚合查询或者查询的结果并非对应一个真实的表怎么办呢?有没有更优雅的方式?

22、基于上面的思考,我做了下面简单的实现:

23、关键代码其实没有几行,耐心看下应该不难懂。

24、其中 BookAgg的定义如下,在实体类上使用了@AutoResultMap注解:

四、MyBatis-Plus被网友推荐好用,它可以解决多表关联的问题吗

1、MyBatis-Plus之所以被网友称赞,不仅仅是因为他为了简化而生,为了提高效率而开发,而是因为他可以解决多表关联的问题。

2、MyBatis-Plus的基础MyBatis,他说是从mybatis进化而来的,在 MyBatis的基础上增强性能,但是不改变根本,为简化开发、提高效率而生的mybatis-puls,由于它的只加强不改变,让它拥有了无侵入性能,这个特性可以让它在介入工程时,不会有卡顿现象,它还有强大的 CRUD操作,可以满足用户各类需求,它还有性能分析拦截器,如果超过指定时间机会停止运行,可以及时发现问题解决问题。

3、mybatis-puls可以通过业务创建多个表,并且将这些表结合起来,建立实体关系方式,实现一对多实体查询,方便承载账户信息,它的SQL可以使代码拥有极好的可维护性,可以利用数据库的缓存,提高性能。

4、mybatis-puls可以快速集成多数据源,可以最简洁的完成数据库操作分析,引入 lombok依赖,进而简化代码,减少使用 gette方法,不需要编写xml文件,简单方便快捷,MyBatis-Plus的代码生成器是AutoGenerator,它可以最大程度提高开发效率,布局全局信息,配置数据源信息,最大程度简化代码数据,只做切换数据源,不限制用户具体操作。

五、mybatisplus是什么

MyBatis-Plus(opens new window)(简称 MP)是一个MyBatis(opens new window)的增强工具,在 MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。

无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑

损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作

强大的 CRUD操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD操作,更有强大的条件构造器,满足各类使用需求

支持 Lambda形式调用:通过 Lambda表达式,方便的编写各类查询条件,无需再担心字段写错

支持主键自动生成:支持多达 4种主键策略(内含分布式唯一 ID生成器- Sequence),可自由配置,完美解决主键问题

支持 ActiveRecord模式:支持 ActiveRecord形式调用,实体类只需继承 Model类即可进行强大的 CRUD操作

支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere)

内置代码生成器:采用代码或者 Maven插件可快速生成 Mapper、 Model、 Service、 Controller层代码,支持模板引擎,更有超多自定义配置等您来使用

内置分页插件:基于 MyBatis物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List查询

分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer等多种数据库

内置性能分析插件:可输出 Sql语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询

内置全局拦截插件:提供全表 delete、 update操作智能分析阻断,也可自定义拦截规则,预防误操作

六、来了,MyBatisPlus的join联表查询

众所周知,mybatis plus封装的 mapper不支持 join,如果需要支持就必须自己去实现。但是对于大部分的业务场景来说,都需要多表达 join,要不然就没必要采用关系型数据库了。

那么有没有一种不通过硬 SQL的形式,通过框架提供 join能力呢?答案是,可以有。经过一段时间的插眼排眼操作,成功地封装了一个 jar包。本文讲讲它的用法。

或者 clone代码到本地执行 mvn install,再引入以上依赖。

注意:mybatis plus version>= 3.4.0。

MPJLambdaWrapper还有很多其他的功能

针对以上 jar感兴趣的,可以下载对应的源码,进一步地学习!

mybatisplus查询和mybatisplus日期查询的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!