MyBatis-plus&SpringBoot集成Mybatis-plus

本文介绍了MyBatis-plus在SpringBoot项目中的集成和使用,包括与MyBatis的区别、常见注解的解释及高级查询功能。重点讨论了如何利用注解解决字段映射问题,以及如何进行CRUD操作。此外,还提到了MyBatis-plus的自动SQL拼接机制和分页功能。
MyBatis跟Mybatis-plus的区别
优点:

1>SQL语句自由控制,较为灵活

2>SQL与业务代码分离,易于阅读与维护

3>提供动态SQL语句,可以根据需求灵活控制

缺点:

1>简单的crud操作也必须提供对应SQL语句

2>必须维护大量的xml文件

3>自身功能有限,要拓展只能依赖第三方插件

MyBatis-plus 是在Mybatis的基础上进行二次开发的具有MyBatis所有功能, 也添加了不少好用的功能

Mybatis-plus是Mybatis的增强工具,在Mybatis的的基础上只有增强没有改变,为简化开发,还大大提高了工作的效率

建项目的时候需要配置依相关的依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.3</version>
</parent>
<dependencies>
	<--!MyBatis-plus依赖-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.0</version>
    </dependency>
    <--Druid依赖-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.17</version>
    </dependency>
    <--数据库的依赖-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.22</version>
    </dependency>
    <--SoringBoot项目的依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <--小辣椒lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.16</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

普通的项目改造Springboot项目

创建好项目之后,创建启动类,对应的资源包放置静态资源跟模板,相关的依赖,还有properties文件等等

@SpringBootApplication
@MapperScan(basePackages = "cn.xxx.mp.mapper")
public class App {
   
   
    public static void main(String[] args) {
   
   
        SpringApplication.run(App.class,args);
    }
}

测试类上面需要贴上SoringBootTest

创建实体类,创建Mapper文件,后面去继承BaseMapper里面的泛型就是你所对应的实体类,父类里面又很得方法

常见的几种注解

@TableName(“t_employee”)

描述:表名注解

作用:指定当前实体类映射哪张数据库表, 默认是跟实体类名一致,这个是你的数数据库的表名跟你的实体类的名字不一样的时候可以使用,贴在类的上面

@TableField(value=“employename”,exist = false)

这个注解是在你的数据库里面没有这个字段的时候,或者是你的数据库里面的列名字跟你的字段名字不一样的时候.,如果说这个字段是你自己新加的,可以直接省略括号里面的value直接去写后面的

描述:字段注解(非主键)

作用:指定当前属性映射数据库表哪一列, 默认是跟属性名一致

其中:exist属性表示当前属性是否映射数据库列

** @TableId(value=“id”, type=IdType.AUTO)

这个注解是用在表的主键上面

描述:主键注解

作用:标记当前属性映射表主键。

里面的value就是代表着你对应的主键列,简单来说就是在给id制定一个增长的规则

其中:type属性指定主键类型

IdType.AUTO

数据库ID自增

IdType.NONE

无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)

IdType.INPUT

insert前自行set主键值

IdType.ASSIGN_ID

分配ID(主键类型为Number(Long和Integer)或String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)

IdType.ASSIGN_UUID

分配UUID,主键类型为String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认default方法)

在Mapper接口使用之前需要考虑的问题是employeeMapper里面并没写传入的方法,是因为这个类继承了baseMapper里面封装了我们需要的方法\

项目中并没有定义SQL语句,为什么可以执行crud操作,mybatis-plus会自动帮我们拼接SQL语句,怎么去拼接的,把实体类的类名作为表名,字段作为表的列,通过java中的内省机制,然后通过解析获取对应的字段,如果自己定义的字段跟数据库的有所出入,就需要用到注解去解决问题

增加的方法

insert

/**
 * 插入一条记录
 *
 * @param entity 实体对象
 */
int insert(T entity);
@Test
public void ImsertTest() {
   
   
    Employee employee = new Employee();
    employee.setName("刘备");
    employee.setAge(24);
    employee.setDeptId(2L);
    employee.setAdmin(1);
    employee.setPassword("123123");
    employee.setEmail("123@123.com");
    employeeMapper.insert(employee);
}

更新的时候需要注意的有些地方:比如你在使用updateById操作更新的时候,如果有的数据没有更新到,然后你的实体类里面用的还是基本数据类型,这样就导致数据丢失,这时候可以改用包装类去修饰这些字段

update

  /**
     * 更新通过id
     * 这种方法建议在全部数据更改的时候使用
     */
    @Test
    public void updateById() {
   
   
        Employee employee = employeeMapper.selectById(1L);
        employee.setName("关羽");
        employeeMapper.updateById(employee);

    }
/**
     * update通过条件构造器,就是直接在SQL语句里面拼接上where
     * wrapper.eq()意思相当于SQL语句里面的where
     */
    @Test
    public void update() {
   
   
        UpdateWrapper<Employee> wrapper = new UpdateWrapper<Employee>();
        wrapper.eq("id", 1L);
//        wrapper.setSql("name='曹操'");
        wrapper.set("name", "曹操");
        employeeMapper.update(null, wrapper);
        //两种方式都可以看自己的个人爱好,但是每种方式都要去了解
          LambdaUpdateWrapper<Employee> wrapper = new LambdaUpdateWrapper<>();
        wrapper.eq(Employee::getId, 2L);
        wrapper.setSql("name='赵总'");
        employeeService.getOne(wrapper);
    }

delete

/**
 * 根据 ID 删除
 */
@Test
public void deleteById() {
   
   
    employeeMapper.deleteById
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值