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

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

被折叠的 条评论
为什么被折叠?



