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的依赖

XML 复制代码
  <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
  </dependency>

1.2:定义Mapper

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

1.3:UserMapper.xml中的配置

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

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mp.mapper.UserMapper">


</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: 当数据库表名和类名不一致时。在类的前面加上其底下的注解

java 复制代码
@TableName("tb_user")

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

java 复制代码
  @TableId(type= IdType.AUTO)
    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:

java 复制代码
 void testQueryWrapper(){
       QueryWrapper<User> queryWrapper=new QueryWrapper<User>()
               .select("id","username","info","balance")
               .ge("balance",1000)
               .like("username","o");
       List<User> users = userMapper.selectList(queryWrapper);
       System.out.println(users);
   }

查询结果:

利用QueryWrapper查询需求2:

java 复制代码
  @Test
    void testQueryWrapper1(){
        //更新查询的结果
       User user=new User();
       user.setBalance(2000);
       //更新的条件
       QueryWrapper<User> queryWrapper=new QueryWrapper<User>().eq("username","jack");
        //执行更新
       userMapper.update(user,queryWrapper);
                
   }

更新的结果:

3.1.2:基于UpdateWrapper的更新

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

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

java 复制代码
   @Test
    void testUpdateWrapper(){
        //由于是多个用户,所以我们不能使用上一个方式的更新,且balance-200,所以要使用UpdateWrapper
        List<Long> ids=List.of(1L,2L,4L);
       UpdateWrapper<User> userUpdateWrapper=new UpdateWrapper<User>()
               .setSql("balance=balance-200")
               .in("id",ids);
        userMapper.update(null,userUpdateWrapper);
   }

运行结果:

3.2:自定义SQL

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

3.2.1:利用MP构造where条件

java 复制代码
    //1:更新条件
       List<Long> ids=List.of(1l,2l,3l);
       int amout=200;
       QueryWrapper<User> queryWrapper=new QueryWrapper<User>().in("id",ids);

3.2.2:自定义SQL方法调用

java 复制代码
  //调用自定义方法
       userMapper.updateBalanceByIds(queryWrapper,amout);

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

java 复制代码
@Mapper
public interface UserMapper  extends BaseMapper<User> {


    void updateBalanceByIds(@Param("ew") QueryWrapper<User> queryWrapper,@Param("amout") int amout);
}
XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mp.mapper.UserMapper">


    <update id="updateBalanceByIds">
        update tb_user set balance=balance-#{amout} ${ew.customSqlSegment}
    </update>
</mapper>

3.3:IService接口基本用法

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

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

java 复制代码
public interface IUserService extends IService<User> {

}

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

java 复制代码
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {


}

3:测试类来进行使用

java 复制代码
@SpringBootTest
class UserServiceImplTest {

    @Autowired
    private IUserService iUserService;
    @Test
    void testSaverUser(){
        User user=new User();
        user.setUsername("李磊");
        user.setPassword("123");
        user.setPhone("18688990011");
        user.setBalance(200);
        user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");
        user.setCreateTime(LocalDateTime.now());
        user.setUpdateTime(LocalDateTime.now());
        iUserService.save(user);

    }
    @Test
    public void Query(){
        List<Long> ids=List.of(1l,2l,3l);
        List<User> users = iUserService.listByIds(ids);
        for (User user : users) {
            System.out.println(user);
        }

    }


}

未完待续.....

相关推荐
橘橙黄又青几秒前
List和Map篇
java·开发语言·面试
曹牧几秒前
Java:包含空字符字段的对象序列化为JSON字符串
java·开发语言
黎雁·泠崖2 分钟前
Java方法重写Override:规则+底层本质+与重载区别
java·开发语言
猿小羽2 分钟前
Spring AI + MCP 实战:构建标准化 AI 智能代理与上下文集成
java·spring boot·llm·ai agent·spring ai·anthropic·mcp
高山上有一只小老虎3 分钟前
mybatisplus分页查询版本 3.5.8 以下和版本 3.5.9及以上的区别
java·spring boot·mybatis
王同学 学出来4 分钟前
React实操案例(四)
开发语言·react.js·前端框架
哪里不会点哪里.5 分钟前
Spring Boot 项目搭建过程
java·spring boot·后端
李少兄5 分钟前
FHIR 资源查询实战指南:从 HTTP 接口到 Java 客户端的完整实现
java·网络协议·http
zhengfei6116 分钟前
一种综合性的现代架构模型,用于集成平台解决方案和工具,以支持专业的红队。
开发语言·人工智能·网络安全·架构·信息与通信
Stecurry_306 分钟前
Spring Boot 深度进阶:从配置管理到生产级实践
java·spring boot·后端