1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > java学习笔记----Mybatis-Plus

java学习笔记----Mybatis-Plus

时间:2020-11-19 03:42:04

相关推荐

java学习笔记----Mybatis-Plus

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-0528113405293.png)]

编辑MP入门案例

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

@SpringBootTestpublic 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更新操作

更新操作

@SpringBootTestpublic 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);}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。