Mybatis-Plus

Mybatis-Plus是一个Mybatis的增强工具,在Mybatis的基础上只做增强不做改变,为了简化开发提高效率而生

特性

重点说明:MP适用于单表操作,如果遇到多表操作,则手写SQL会效率更高

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 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 操作智能分析阻断,也可自定义拦截规则,预防误操作

MP入门案例

注意事项

1.编辑pojo 添加注解 @tableName @tableId
2.实现接口继承BaseMapper
3.编辑YML文件配置信息 将mybatis改为mybatis-plus

导入jar包

说明:由于MP内部兼容了Mybatis则引入MP之后将原来的mybatis的依赖包删除。

删除mybatis的依赖包

<!--spring整合mybatis  暂时  --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency>

导入MP的依赖包

  <!--spring整合mybatis-plus  --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis0plus-boot-starter</artifactId><version>3.4.2</version></dependency>

对象与表映射

继承公共的Mapper接口

修改YML配置文件

说明:springBoot应该由原来的Mybatis数据库连接转换成MP的数据库连接

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hRy9ylT6-1622599384584)(C:\Users\MTA\AppData\Roaming\Typora\typora-user-images\image-20210528113405293.png)]

编辑MP入门案例

对比Sql写法/MP写法的区别…

@SpringBootTest
public class TestMybatis {// sprign容器 <userMapper,代理对象>// 面向接口编程 扩展性好@Autowiredprivate UserMapper userMapper;//JDK动态代理//报错说明:com.jt.mapper.UserMapper.findAll  不匹配!!!!//关于测试类代码说明: 要求: public   返回值void  方法名称不能叫test@Testpublic void test01(){System.out.println(userMapper.getClass());List<User> userList = userMapper.findAll();   //接口的方法  数据库只能识别Sql语句System.out.println(userList);}//查询 用户的全部记录 面向对象的方式操作数据库.//只能用于单表查询@Testpublic void testFind(){//暂时不需要任何where条件  查询的是全部记录.List<User> userList = userMapper.selectList(null);System.out.println(userList);}
}

Mybatis CURD操作练习

编辑测试代码

  @Testpublic void insert(){User user = new User();user.setName("星期五").setAge(18).setSex("男");userMapper.insertUser(user);System.out.println("新增用户成功");}//根据name="星期五",将name="星期六"@Testpublic void update(){String oldName = "星期五";String newName = "星期六";userMapper.updateByName(oldName,newName);System.out.println("更新用户成功");}//删除用户信息 根据name属性删除数据@Testpublic void delete(){String name = "星期六";userMapper.deleteByName(name);System.out.println("删除用户成功");}

编辑Mapper接口

@Insert("insert into demo_user(id,name,age,sex) " +"value (null,#{name},#{age},#{sex})")void insertUser(User user);@Update("update demo_user set name = #{newName} where name=#{oldName}")void updateByName(String oldName, String newName);//Mybatis中如果传递的参数只有一个,则名称任意 一般不用.@Delete("delete from demo_user where name=#{name}")void deleteByName(String name);

MP工作原理

1)通过注解 实现对象与表一一映射

2)通过属性注解 实现对象的属性与表中的字段一一映射

3)将公共的方法进行抽取,抽取到BaseMapper接口中

4)将用户操作的方法对象,转换为数据库能够识别的SQL语句

demo1:userMapper.insert(user对象)

SQL1:insert into 表名(字段名…) value(属性值…)

拼接过程:

insert into 表名(字段名…) value(属性值…)

1)通过userMapper 查找父级接口BaseMapper

2)根据BaseMapper 查找泛型对象 User对象

3)根据user对象 查找指定的注解 @TableName 获取表名

4)根据user对象 动态获取表中的字段 @TableField

5)在获取字段的同时 获取属性的值,最后进行SQL拼接

6)MP将拼接的SQL交给Mybaits框架处理执行

insert into demo|_user(id,name…) value(value1,value2…)

MP练习

根据ID查询

 /*** 1.根据Id=23数据*/@Testpublic void select01(){User user = userMapper.selectById(23);System.out.println(user);}

对象查询

配置日志

 /*** 查询 name="潘凤"  sex="男"* 结果: 1项 userMapper.selectOne()*      多项 userMapper.selectList()* Sql: where name="xxx" and sex="xxx"* queryWrapper: 条件构造器  拼接where条件* 如果遇到多条件查询,则默认的连接符and* 方式1: 可以通过对象的方式进行控制*/@Testpublic void select02(){User user = new User();user.setName("潘凤").setSex("男");QueryWrapper<User> queryWrapper = new QueryWrapper<>(user);//根据对象中不为null的属性 拼接where条件List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}

特殊字符练习

 /*** 要求: age>18岁  or sex=男的用户* 转义字符:   > gt,   < lt , = eq*            >= ge , <= le*/@Testpublic void select03(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();//编辑的是数据库字段信息queryWrapper.gt("age", 18).or().eq("sex","男");//根据对象中不为null的属性 拼接where条件List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}

linke关键字

 /*** 要求: 查询name中包含"精" 并且按照age 降序排列* Sql: like "%精%"  包含精*      like "精%"   以精开头*      like "%精"   以精结尾*/@Testpublic void select04(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.likeRight("name","精").orderByDesc("age");//根据对象中不为null的属性 拼接where条件List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}

In关键字

 /*** 要求: 查询name中包含"精" 并且按照age 降序排列* Sql: like "%精%"  包含精*      like "精%"   以精开头*      like "%精"   以精结尾*/@Testpublic void select04(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.likeRight("name","精").orderByDesc("age");//根据对象中不为null的属性 拼接where条件List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}

不为Null查询

 /*** 要求: 查询name中包含"精" 并且按照age 降序排列* Sql: like "%精%"  包含精*      like "精%"   以精开头*      like "%精"   以精结尾*/@Testpublic void select04(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.likeRight("name","精").orderByDesc("age");//根据对象中不为null的属性 拼接where条件List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}

动态SQL语句查询

 /*** 要求: 查询name中包含"精" 并且按照age 降序排列* Sql: like "%精%"  包含精*      like "精%"   以精开头*      like "%精"   以精结尾*/@Testpublic void select04(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.likeRight("name","精").orderByDesc("age");//根据对象中不为null的属性 拼接where条件List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}

挑选字段查询

 /*** 要求: 查询name中包含"精" 并且按照age 降序排列* Sql: like "%精%"  包含精*      like "精%"   以精开头*      like "%精"   以精结尾*/@Testpublic void select04(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.likeRight("name","精").orderByDesc("age");//根据对象中不为null的属性 拼接where条件List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}

MP更新操作

更新操作

@SpringBootTest
public class TestMP2 {@Autowiredprivate UserMapper userMapper;/*** 将ID=229的用户名称 改为六一儿童节*/@Testpublic void updateUser(){User user =  new User();user.setId(229).setName("六一儿童节");//set name="xxx" where id = 229userMapper.updateById(user);}/*** 更新操作2*      将name="六一儿童节" 改为"端午节"*  参数说明:*         1.实体对象  封装修改后的数据 set结构*         2.UpdateWrapper 修改的条件构造器*  Sql: update demo_user set name="端午节" where name="61"*/@Testpublic void updateUser2(){User user = new User();user.setName("端午节");UpdateWrapper updateWrapper = new UpdateWrapper();updateWrapper.eq("name", "六一儿童节");userMapper.update(user,updateWrapper);}
}

java学习笔记----Mybatis-Plus相关推荐

  1. 拉勾教育Java训练营学习感受/学习笔记--MyBatis

    拉勾教育Java训练营学习感受/学习笔记–MyBatis 文章目录 拉勾教育Java训练营学习感受/学习笔记--MyBatis 1.普通jdbc操作流程以及问题 1.1 流程 1.2 问题 2.自定义 ...

  2. 初级Java学习笔记总结

    java高并发解决方案:     1.页面静态:静态访问消耗的资源少             信息录入然后生成静态页面以供访问     2.数据库集群和库表散列             主-从数据库关 ...

  3. JAVA学习笔记(1)【基础知识】

    JAVA学习笔记DAY_1 提示:关于java系列的内容只是本人在老师的指导下和自学过程中的一些学习笔记,如果存在错误敬请批评指正! 文章目录 JAVA学习笔记DAY_1 前言 一.Java语言未来的 ...

  4. java学习笔记11--Annotation

    java学习笔记11--Annotation Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息. j ...

  5. java学习笔记13--反射机制与动态代理

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...

  6. 准备写java学习笔记

    准备写java学习笔记 java int 转载于:https://blog.51cto.com/cryingcloud/1975267

  7. Java学习笔记--StringTokenizer的使用

    2019独角兽企业重金招聘Python工程师标准>>> Java Tips: 使用Pattern.split替代String.split String.split方法很常用,用于切割 ...

  8. java学习笔记12--异常处理

    java学习笔记系列: java学习笔记11--集合总结 java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 j ...

  9. Java学习笔记(十)--控制台输入输出

    输入输出 一.控制台输入 在程序运行中要获取用户的输入数据来控制程序,我们要使用到 java.util 包中的 Scanner 类.当然 Java 中还可以使用其他的输入方式,但这里主要讲解 Scan ...

  10. java学习笔记16--I/O流和文件

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理 ...

最新文章

  1. 【ES6】JS类的用法class
  2. [转]pragma comment的使用
  3. ASP.NET验证控件详细使用解释
  4. 减法公式运算法则_人教版数学七年级上册1.3.2有理数的减法视频讲解+知识点+同步练习...
  5. vue 动态添加class_前端开发:Vue项目实战-Music
  6. python开发自己的工具包_爬虫开发python工具包介绍 (4)
  7. java stringbuffer长度限制_Java中的String、StringBuffer和StringBuilder
  8. JavaScript实现 页面滚动图片加载
  9. word正在等候其他应用程序完成OLE操作
  10. php为首字母的词语,PHP提取中英文词语及数字首字母的简单示例
  11. 如何在WP模拟器中启动、暂停、重启应用
  12. tensorflow手动实现算法之二多元线性回归
  13. 通过串口波特率计算bit时间
  14. 微服务之核心架构思维
  15. 【计算机组成与系统结构】电子计算机的诞生
  16. 腾讯云云直播、云点播
  17. python修改像素
  18. CTFmisc图像题(zsteg取zip、压缩包重组、IDAT数据隐写、Markdown编写LaTeX、零宽字节隐写)
  19. Windows 修改hosts过滤小游戏
  20. 重新定义公司-谷歌是如何运营的 读书笔记+读后感

热门文章

  1. UnityEditor三自定义窗口 案例2
  2. 小米的新logo与戴森的吹风机
  3. 【js高级 Day3】深入理解原型的方式继承,借用构造函数继承,组合继承,拷贝继承
  4. VS2017报错 class “Cxxxx“没有成员“GetContextMenuManager“ “GetContextMenuManager“:不是“Cxxxx“的成员
  5. Nginx跳转到用户首页
  6. 天涯上拣来的爱情哲学
  7. 【C语言】 C 语言 关键字分析 ( 属性关键字 | 常量关键字 | 结构体关键字 | 联合体关键字 | 枚举关键字 | 命名关键字 | 杂项关键字)
  8. 2022-2027年中国缝制机械行业市场全景评估及发展战略规划报告
  9. oracle中常使用到的函数,Oracle经常使用到的函数
  10. 笔记本连不上路由器WiFi,可以连接手机热点,手机可以连接WiFi