一.为什么使用Mybatis plus
1. 简化开发
- 减少样板代码:MyBatis-Plus 封装了大量的 CRUD 操作,开发者无需为每个实体类编写复杂的 Mapper 文件和 SQL 语句,从而减少了大量的样板代码。
- 自动填充:支持插入和更新时的字段自动填充,比如创建时间和更新时间,可以自动设置,减少手动赋值的工作量。
2. 功能丰富
- 内置分页插件:提供了一套简单易用的分页插件,支持多种数据库的分页查询,开发者只需几行代码即可实现分页功能。
- 条件构造器:提供了强大的条件构造器,可以轻松地构建复杂的查询条件,包括但不限于模糊查询、范围查询、排序等。
- 乐观锁:内置了乐观锁机制,帮助解决高并发环境下的数据竞争问题。
- 性能分析插件:可以监控 SQL 执行情况,帮助开发者发现并优化慢查询。
3. 无缝集成
- 兼容 MyBatis:作为 MyBatis 的增强工具,MyBatis-Plus 完全兼容 MyBatis 的所有特性,同时提供更多的增强功能。这意味着开发者可以在现有 MyBatis 项目中无缝引入 MyBatis-Plus,而不需要对原有代码进行大规模修改。
- Spring Boot 集成:与 Spring Boot 的集成非常方便,通过几个简单的配置就可以快速上手使用。
4. 社区活跃
- 活跃的社区支持:MyBatis-Plus 拥有一个活跃的开发者社区,官方文档详尽,遇到问题时可以很容易地找到解决方案或得到帮助。
5. 开源免费
- 开源免费:作为一个开源项目,MyBatis-Plus 免费提供给个人和企业使用,没有商业限制,适合各种规模的应用开发。
6. 提高开发效率
- 提高开发效率:通过减少重复劳动,简化开发流程,使得开发者可以更加专注于业务逻辑的实现,从而大大提高了开发效率。
综上所述,MyBatis-Plus 不仅继承了 MyBatis 的优点,还在此基础上增加了许多实用的功能,极大地提升了开发效率和代码质量。如果你正在寻找一种既能简化数据库操作又能提高项目开发速度的方法,MyBatis-Plus 是一个值得尝试的选择。
二.spring-boot集成mybatis-plus
1.引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.7</version>
</dependency>
重点: (Mybatis plus是Mybatis的增强版,它只做增强不做修改,Mybatis plus中拥有Mybatis的
依赖,不需要再引入mybatis的相关依赖,否则可能会出现版本冲突问题)
2.添加配置
bootstrap.yml格式:
#mysql配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
password: root
username: root
#这里要更改数据库,需要更改voredb,更改localhost端口号就可以了
url: jdbc:mysql://localhost:3306/voredb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
#mysql plus配置
mybatis-plus:
type-aliases-package: com.story.domain # 别名扫描包,指定实体类所在的包路径(改成自己的实体类路径)
# 以下配置都是默认值,可以根据项目情况进行修改
mapper-locations: "classpath*:/mapper/**/*.xml" # Mapper.xml 文件地址
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印 SQL 语句
map-underscore-to-camel-case: true # 是否开启下划线和驼峰的映射
cache-enabled: false # 是否开启二级缓存
global-config:
db-config:
id-type: assign_id # 默认雪花算法,另外还有 auto(自增id) assign_uuid(uuid)
update-strategy: not_null # 更新策略: 只更新非空字段
application.properties格式:
# MyBatis-Plus 配置
# 别名扫描包,指定实体类所在的包路径(改成自己的实体类路径)
mybatis-plus.type-aliases-package=com.story.domain
# Mapper.xml 文件地址,指定映射文件的位置
mybatis-plus.mapper-locations=classpath*:/mapper/**/*.xml
# MyBatis 配置
# 设置 MyBatis 的日志实现,这里使用标准输出
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# 是否开启下划线和驼峰的映射,例如将数据库中的 user_name 映射为实体类中的 userName
mybatis-plus.configuration.map-underscore-to-camel-case=true
# 是否开启二级缓存,默认为 false
mybatis-plus.configuration.cache-enabled=false
# MyBatis-Plus 全局配置
# 主键生成策略,默认使用雪花算法(assign_id),还可以选择 auto(自增)、assign_uuid(UUID)
mybatis-plus.global-config.db-config.id-type=assign_id
# 更新策略,设置为 not_null 表示只更新非空字段
mybatis-plus.global-config.db-config.update-strategy=not_null
3.实体类
/**
* 实体类
*/
@Data
public class User {
/**
* 主键 ID,使用雪花算法生成
*/
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/**
* 名称
*/
private String name;
/**
* 年龄
*/
private Integer age;
/**
* 性别
*/
private String sex;
/**
* 部门id
*/
private Integer departmentId;
}
注意注意
@TableId: 用于标识实体类中的主键字段
属性:
- type: 主键生成策略,可选值包括: - IdType.AUTO: 数据库自增- IdType.INPUT: 外部输入- IdType.NONE: 无主键- IdType.ASSIGN_ID: 使用雪花算法生成主键- IdType.ASSIGN_UUID: 使用 UUID 生成主键- IdType.ID_WORKER: 使用 Twitter 的 Snowflake 算法生成主键- IdType.UUID: 使用 UUID 生成主键
@TableId(type = IdType.AUTO)
private Long id;
- @TableName: 用于指定实体类对应的数据库表名
属性:
- value: 表名
@TableName("student")
public class Student{
// 字段
}
- @TableField: 用于标识实体类中的普通字段
属性:
- value: 字段名- exist: 是否存在该字段(默认为 true),如果设置为 false,则在生成 SQL 时不会包含该字段- fill: 字段填充策略,可选值包括: - FieldFill.DEFAULT: 默认不填充- FieldFill.INSERT: 插入时填充- FieldFill.UPDATE: 更新时填充- FieldFill.INSERT_UPDATE: 插入和更新时都填充
@TableField("student_name")
private String studentName;
- @TableField(fill = FieldFill.INSERT): 用于自动填充字段
属性:
- fill: 字段填充策略,可选值包括: - FieldFill.DEFAULT: 默认不填充- FieldFill.INSERT: 插入时填充- FieldFill.UPDATE: 更新时填充- FieldFill.INSERT_UPDATE: 插入和更新时都填充
/**
* 实体类
*/
@Data
@TableName("student") // 指定表名
public class User {
/**
* 主键 ID,使用雪花算法生成
*/
@TableId(type = IdType.ASSIGN_ID) // 主键生成策略
private Long id;
/**
* 用户名
*/
@TableField("student_name") // 指定字段名
private String name;
/**
* 年龄
*/
private Integer age;
/**
* 性别
*/
private String sex;
/**
* 创建时间,插入时自动填充
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/**
* 更新时间,更新时自动填充
*/
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
/**
* 逻辑删除字段
*/
@TableLogic
private Integer deleteId;
/**
* 版本号,用于乐观锁
*/
@Version
private Integer version;
/**
* 临时字段,不在数据库表中
*/
@TableField(exist = false)
private String tempField;
}
4.数据访问层(mapper层)
创建mapper接口继承BaseMapper
/**
* Mapper 接口
*/
@Mapper
public interface StudentMapper extends BaseMapper<Student> {
// 可以在这里添加自定义的 SQL 方法
}
5.业务逻辑层(service层)
创建Service 接口继承IService
/**
* Service接口
*/
public interface StudentService extends IService<Student> {
// 可以在这里添加自定义的服务方法
}
创建接口的实现类 继承ServiceImpl并实现service接口
/**
* ServiceImpl服务实现类
*/
@Service
public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements StudentService {
// 可以在这里添加自定义的服务方法实现
}
6.表现层(controller层)
/**
* 用户控制器
*/
@RestController
@RequestMapping("/student")
public class UserController {
@Autowired
private StudentService studentService;
/**
* 获取所有用户
* @return 用户列表
*/
@GetMapping
public List<Student> getAllStudent() {
return studentService.list();
}
/**
* 根据 ID 获取用户
* @param id 用户 ID
* @return 用户对象
*/
@GetMapping("/{id}")
public User getStudentById(@PathVariable Long id) {
return studentService.getById(id);
}
/**
* 添加用户
* @param user 用户对象
* @return 添加的用户对象
*/
@PostMapping
public User addStudent(@RequestBody Student student) {
userService.save(student);
return student;
}
/**
* 更新用户
* @param id 用户 ID
* @param user 用户对象
* @return 更新后的用户对象
*/
@PutMapping("/{id}")
public User updateStudent(@PathVariable Long id, @RequestBody Student student) {
student.setId(id);
studentService.updateById(student);
return student;
}
/**
* 删除用户
* @param id 用户 ID
*/
@DeleteMapping("/{id}")
public void deleteStudent(@PathVariable Long id) {
studentService.removeById(id);
}
}
版权归原作者 唬了吧唧 所有, 如有侵权,请联系我们删除。