Springboot整合MyBatisplus和快速入门

MyBatisPlus

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

MyBatisPlus的官方网址: MyBatis-Plus 🚀 为简化开发而生

快速入门

导入起步依赖

首先创建一个boot项目,导入MyBatisPlus依赖:

SpringBoot 2:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.11</version>
</dependency>

SpringBoot 3:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
    <version>3.5.11</version>
</dependency>

注意:导入MyBatisPlus依赖后不要导入其他MyBatis的依赖,因为MyBatisPlus的依赖中包含了mybatis的依赖,避免版本冲突导致的报错。

 顺便再启用一下lombok:

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

编写yml配置文件

spring:
  datasource:
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    url: jdbc:mysql://localhost:3306/ssm_pro?serverTimezone=Asia/Shanghai

编写实体类

MyBatisPlus提供了几个注解用于解决表和实体类对应的问题:

注解说明
@TableName用于指定该类对应的表名
@TableId用于指定表中的主键字段信息
@TableField                 指定表中普通字段的信息

编写与数据库表对应的实体类:

@Data    //lombok提供get、set方法
@TableName("`tb_user`")   //与数据库表名对应
public class User {
    private Integer id;
    private String name;
    private String gender;
    private Integer age;
    private String address;
    private String qq;
    private String email;
    private String photo;
}

编写mapper接口

    使用MyBatisPlus无需编写mapper.xml文件,也无需在配置文件中配置mybatis,只需创建一个接口继承BaseMapper即可,并且也无需在里面写sql语句就能进行简单的增删改查操作,注意还需要加上@Mapper注解

@Mapper
public interface UserMapper extends BaseMapper<User> {
}

编写测试类

    这里就只展示MyBatisPlus的使用,就不编写service等类。

@SpringBootTest
class MybatisPlusApplicationTests {
    @Autowired
    UserMapper userMapper;
    @Test
    void contextLoads() {

        //查询单个
        User user1 = userMapper.selectById(2);
        System.out.println("查询单个"+user1);

        //查询所有
        List<User> list = userMapper.selectList(null);
        System.out.println("查询所有");
        System.out.println(list);

        //添加数据
        User user2 = new User();
        user2.setName("李白");
        user2.setAge(20);
        user2.setGender("男");
        user2.setEmail("d3333ahs");
        userMapper.insert(user2);

        //更新数据
        user2.setAge(32);
        userMapper.updateById(user2);

        //删除数据
        userMapper.deleteById(2);
    }

}

注意事项:使用insert方法时,需要注意实体类中的主键要设置

@TableId(type = IdType.AUTO)

否则插入的id会出现异常

更新时使用updateById,会自动根据传入的实体类的id进行更新。如果使用update方法,会更新所有的数据。

条件构造器

    在实际开发中,对于数据库的增删改查操作会更加复杂,MyBatisPlus自带的方法并不能满足我们所需的操作,这个时候就要使用条件构造器Wrapper。

    Wrapper 类是构建复杂查询和更新条件的关键工具。它允许开发者以链式调用的方式构造 SQL 的 WHERE 子句,提供了极大的灵活性和便利性。

条件构造器的核心类:

类型特点适用场景
QueryWrapper基础条件构造器简单条件查询
LambdaQueryWrapper类型安全的Lambda表达式构造器避免字段硬编码
UpdateWrapper更新条件构造器字段更新操作
LambdaUpdateWrapperLambda风格的更新构造器类型安全的更新操作

条件构造器的常用方法

方法说明
eq(R column, Object val)WHERE column= 'val'
ne(R column, Object val)WHERE column<> 'val'
gt(R column, Object val)WHERE column> val
ge(R column, Object val)WHERE column>= val
lt(R column, Object val)WHERE column< val
le(R column, Object val)WHERE column<= val
between(R column, Object val1, Object val2)WHERE column BETWEEN val1 AND val2
notBetween(R column, Object val1, Object val2)WHERE column NOT BETWEEN val1 AND val2

like(R column, Object val)

WHERE column LIKE '%val%'

notLike(R column, Object val)

WHERE column NOT LIKE '%val%'

likeLeft(R column, Object val)

columnLIKE '%val'

likeRight(R column, Object val)

WHERE column LIKE 'val%'
isNull(R column)WHERE column IS NULL

in(R column, Collection<?> value)

in(R column, Object... values)

WHERE column IN (value)

 示例

  • 查询年龄大于20的姓名和性别
  • 查询年龄小于30并且名字中带有“张”记录
  • 将地址为湖南的记录改为四川
        //查询年龄大于20的姓名和性别
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.select("name","gender").gt("age",20);
        List<User> users = userMapper.selectList(queryWrapper);
        System.out.println(users);

        //查询年龄小于30并且名字中带有“张”记录
        QueryWrapper<User> queryWrapper1 = new QueryWrapper<>();
        queryWrapper1.lt("age",30).like("name","张");
        List<User> users1 = userMapper.selectList(queryWrapper1);
        System.out.println(users1);

        //将地址为湖南的记录改为四川
        UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
        userUpdateWrapper.eq("address","湖南");
        User user = new User();
        user.setAddress("四川");
        userMapper.update(user,userUpdateWrapper);

 

基于lambda表达式写法

MyBatisPlus还提供了一种解决上述硬编码方式的构造器:

        //基于lambda表达式写法
        //查询年龄大于20的姓名和性别
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.select(User::getName,User::getGender).gt(User::getAge,20);
        List<User> users = userMapper.selectList(queryWrapper);
        System.out.println(users);

        //查询年龄小于30并且名字中带有“张”记录
        LambdaQueryWrapper<User> queryWrapper1 = new LambdaQueryWrapper<>();
        queryWrapper1.lt(User::getAge,30).like(User::getName,"张");
        List<User> users1 = userMapper.selectList(queryWrapper1);
        System.out.println(users1);

        //将地址为湖南的记录改为四川
        LambdaUpdateWrapper<User> userUpdateWrapper = new LambdaUpdateWrapper<>();
        userUpdateWrapper.eq(User::getAddress,"湖南");
        User user = new User();
        user.setAddress("四川");
        userMapper.update(user,userUpdateWrapper);

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值