• MyBatisPlus(1)


    目录

    一:MyBatisPlus的快速入门

    1.1:引入Mybatisplus的依赖

    1.2:定义Mapper

    1.3:UserMapper.xml中的配置 

    二: 常见注解

    2.1:常见的注解 

    2.1.1:表中IdType的枚举

    2.1.2:使用@TableField的常见场景

    三:核心功能

    3.1:条件构造器

    3.1.1:基于QueryWrapper的查询 

     3.1.2:基于UpdateWrapper的更新

    3.2:自定义SQL

    3.2.1:利用MP构造where条件

    3.2.2:自定义SQL方法调用

    3.3:IService接口基本用法

    1:创建一个service的接口继承IService接口

    2:创建Iservice的实现类继承ServiceImpl接口

    3:测试类来进行使用


    MyBatisPlus是基于MyBatis的基础上增强的,简化单表的增删查改的代码。

    一:MyBatisPlus的快速入门

    1.1:引入Mybatisplus的依赖

    1. <dependency>
    2. <groupId>com.baomidougroupId>
    3. <artifactId>mybatis-plus-boot-starterartifactId>
    4. <version>3.5.2version>
    5. dependency>

    1.2:定义Mapper

    自定义的Mapper接口继承BaseMapper.T为操作的实体类的代码。

    1.3:UserMapper.xml中的配置 

     不用写基础的增删改查代码。

    1. "1.0" encoding="UTF-8"?>
    2. mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    3. <mapper namespace="com.itheima.mp.mapper.UserMapper">
    4. mapper>

    二: 常见注解

    MyBatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库表信息。

    2.1:常见的注解 

    @TableName(value值)用来指定表名
    @TableId(value值)用来指定表中的主键字段信息
    @TableField(value值)用来指定表中的普通字段信息

     当表中的字段名或者表明与类名或者属性名不一致时,需要设置value属性,value属性为表名或者表的字段名。


    2.1.1:表中IdType的枚举

    AUTO数据库自增长
    INPUT通过set方法自行注入
    ASSIGN_ID分配ID,接口identifierGenerator的方法nextId来生成Id

    当我们在数据库当中设置Id为自增长,但在类中的id未设置自增长时,默认的是ASSIGN_ID。 

    2.1.2:使用@TableField的常见场景

    1:成员变量与数据库字段名不一致

    2:成员变量名以is开头,且是布尔值

    3:成员变量名与数据库关键字冲突(@TableField("`order`")

    4:成员变量不是数据库字段@TableField(exist=false),用来标记成员变量不是数据库字段

    案例演示1: 当数据库表名和类名不一致时。在类的前面加上其底下的注解

    @TableName("tb_user")

    案例演示2:当我们设置数据库的id是自增的,此时,需要我们对于@TableId(type=IdType.Auto) 

    1. @TableId(type= IdType.AUTO)
    2. private Long id;

    三:核心功能

    3.1:条件构造器

    条件构造器关系:

    3.1.1:基于QueryWrapper的查询 

    需求1:查询名字中带o的,存款大于等于1000的人的id,username,info,balance字段

    SQL语句:select id ,username,info,balance from user where username like "%O%"and balance>1000;

    需求2:更新用户为jack的用户的余额为2000

    SQL语句:update  user set balance=2000 where username='jack'.

    利用QueryWrapper进行实现需求1:

    1. void testQueryWrapper(){
    2. QueryWrapper queryWrapper=new QueryWrapper()
    3. .select("id","username","info","balance")
    4. .ge("balance",1000)
    5. .like("username","o");
    6. List users = userMapper.selectList(queryWrapper);
    7. System.out.println(users);
    8. }

    查询结果:

    利用QueryWrapper查询需求2:

    1. @Test
    2. void testQueryWrapper1(){
    3. //更新查询的结果
    4. User user=new User();
    5. user.setBalance(2000);
    6. //更新的条件
    7. QueryWrapper queryWrapper=new QueryWrapper().eq("username","jack");
    8. //执行更新
    9. userMapper.update(user,queryWrapper);
    10. }

    更新的结果:

     3.1.2:基于UpdateWrapper的更新

    需求1:更新id为1,2,4的用户的余额,扣200

    SQL语句:update user set balance=balance-200 where id in(1,2,4)

    1. @Test
    2. void testUpdateWrapper(){
    3. //由于是多个用户,所以我们不能使用上一个方式的更新,且balance-200,所以要使用UpdateWrapper
    4. List ids=List.of(1L,2L,4L);
    5. UpdateWrapper userUpdateWrapper=new UpdateWrapper()
    6. .setSql("balance=balance-200")
    7. .in("id",ids);
    8. userMapper.update(null,userUpdateWrapper);
    9. }

    运行结果:

    3.2:自定义SQL

    我们可以利用Mybatis的wrapper来构造复杂的where条件,剩下的我们自己写。MybatisPlus适用于where条件的设置,剩下我们自己来写。

    3.2.1:利用MP构造where条件

    1. //1:更新条件
    2. List ids=List.of(1l,2l,3l);
    3. int amout=200;
    4. QueryWrapper queryWrapper=new QueryWrapper().in("id",ids);

    3.2.2:自定义SQL方法调用

    1. //调用自定义方法
    2. userMapper.updateBalanceByIds(queryWrapper,amout);

    在mapper中的方法不要忘了对于QueryWrapper添加起别名@Param("ew") 

    1. @Mapper
    2. public interface UserMapper extends BaseMapper {
    3. void updateBalanceByIds(@Param("ew") QueryWrapper queryWrapper,@Param("amout") int amout);
    4. }
    1. "1.0" encoding="UTF-8"?>
    2. mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    3. <mapper namespace="com.itheima.mp.mapper.UserMapper">
    4. <update id="updateBalanceByIds">
    5. update tb_user set balance=balance-#{amout} ${ew.customSqlSegment}
    6. update>
    7. mapper>

    3.3:IService接口基本用法

    用法:自定义service接口继承Iservice接口,实现类继承ServiceImpl.

    1:创建一个service的接口继承IService接口

    1. public interface IUserService extends IService {
    2. }

    2:创建Iservice的实现类继承ServiceImpl接口

    1. @Service
    2. public class UserServiceImpl extends ServiceImpl implements IUserService {
    3. }

    3:测试类来进行使用

    1. @SpringBootTest
    2. class UserServiceImplTest {
    3. @Autowired
    4. private IUserService iUserService;
    5. @Test
    6. void testSaverUser(){
    7. User user=new User();
    8. user.setUsername("李磊");
    9. user.setPassword("123");
    10. user.setPhone("18688990011");
    11. user.setBalance(200);
    12. user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");
    13. user.setCreateTime(LocalDateTime.now());
    14. user.setUpdateTime(LocalDateTime.now());
    15. iUserService.save(user);
    16. }
    17. @Test
    18. public void Query(){
    19. List ids=List.of(1l,2l,3l);
    20. List users = iUserService.listByIds(ids);
    21. for (User user : users) {
    22. System.out.println(user);
    23. }
    24. }
    25. }

    未完待续..... 

  • 相关阅读:
    【Rust日报】2022-11-28 使用 Rust 编写解释型语言
    VMWARE 服务器整合为战提供的解决方案
    【教学类-34-10】20240313 春天拼图(Midjounery生成线描图,4*4格拼图块)(AI对话大师)
    【目标检测】图像裁剪/标签可视化/图像拼接处理脚本
    渠道管控,为什么最好找第三方
    Jetson nano 系统安装
    打造工业操作系统开源开放体系
    RGB彩色模型理解与编程实例
    网络编程入门详解(Socket、TCP通信、Channel通信)
    2022年9月8号Java的23设计模式学习(课时一)单例模式
  • 原文地址:https://blog.csdn.net/weixin_65492194/article/details/134035148