目录
MyBatis是一个优秀的持久层框架,它对JDBC的操作数据库的过程进行封装。MyBatisPlus (简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
MyBatisPlus 官网是这么说的我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。
1.特性
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录
MyBatis 是一个 半自动的ORM(Object Relation Mapping)框架
MyBatisPlus 是一个基于 MyBatis 的扩展库,它提供了一套通用的 CRUD 操作接口,自动生成 sql语句,提供了丰富的查询条件构造器等功能。MyBatisPlus 主要使用了注解进行配置和映射。
2.代码的区别
MyBatis 的代码主要分为以下几个部分:
MyBatis 的配置文件(mybatis-config.xml),用于配置数据源、映射文件等。
映射文件(Mapper.xml),用于定义 SQL 语句和结果映射。
Mapper 接口,用于定义与映射文件对应的方法。
Service 接口,用于封装 Mapper 接口,提供统一的 CRUD 方法。
ServiceImpl 类,实现 Service 接口,调用 Mapper 接口进行数据库操作。
MyBatisPlus 的代码主要涉及到以下几个部分:
MyBatisPlus 的配置文件(mybatis-plus-config.xml),用于配置数据源、分页插件等。
实体类(Entity),用于定义数据库表对应的实体类。
Mapper 接口,用于定义与数据库表对应的方法。
Service 接口,用于封装 Mapper 接口,提供统一的 CRUD 方法。
ServiceImpl 类,实现 Service 接口,调用 Mapper 接口进行数据库操作。
3.两者之间的差异
MyBatis 需要手动编写 SQL 语句和结果映射,可以根据实际需求编写 SQL 语句,但缺点是编写映射文件和手动设置参数比较繁琐。
MyBatisPlus 提供了一套通用的 CRUD 操作接口,自动生成 SQL 语句,简化了 MyBatis 的开发,提高了开发效率,但缺点是定制化能力较差,对于复杂的 SQL 语句无法满足需求。
4.代码解析
关于MyBatis 和MyBatisPlus的代码分析用经典的增删查改来演示
MyBatis实现增删查改
1.配置文件
<insert id="addErrLevel" parameterType="ErrLevel">
insert into err_level values (#{errKey},#{errValue},#{errDec})
</insert>
<update id="updateErrLevel" parameterType="ErrLevel">
update err_level set errKey = #{errKey},errDec=#{errDec} where errValue = #{errValue}
</update>
<select id="selectByErrLevel" resultType="ErrLevel">
select * from err_level
</select>
<delete id="deleteErrLevel">
delete from err_level WHERE errValue = #{errValue}
</delete>
2.Mapper接口
int addErrLevel(ErrLevel errLevel);
void updateErrLevel(ErrLevel errLevel);
List<ErrLevel> selectByErrLevel();
void deleteErrLevel(ErrLevel errLevel);
3.Service 接口
int myAddErrLevel(ErrLevel errLevel);
void updateErrLevel(ErrLevel errLevel);
List<ErrLevel> selectByErrLevel();
void deleteErrLevel(ErrLevel errLevel);
4.ServiceImpl 类
@Resource
ErrLevelMapper errLevelMapper ;
@Override
public int myAddErrLevel(ErrLevel errLevel) {
return errLevelMapper.addErrLevel(errLevel);
}
public void updateErrLevel(ErrLevel errLevel){
errLevelMapper.updateErrLevel(errLevel);
}
@Override
public List<ErrLevel> selectByErrLevel() {
return errLevelMapper.selectByErrLevel();
}
@Override
public void deleteErrLevel(ErrLevel errLevel) {
errLevelMapper.deleteErrLevel(errLevel);
}
5.Controller实现类
@Resource
IErrLevelService errLevelService ;
@PostMapping("/add")
public Result<Integer> addErrlvl(@RequestBody ErrLevel errLevel){
int num = errLevelService.myAddErrLevel(errLevel);
return Result.success(num,"新增成功");
}
@PutMapping("/update")
public Result<?> updateUser(@RequestBody ErrLevel errLevel){
errLevelService.updateErrLevel(errLevel);
return Result.success("更新成功");
}
@GetMapping("/getByMainPage")
public Result<List<ErrLevel>>selectByMainPage(){
List<ErrLevel> list = errLevelService.selectByErrLevel();
return Result.success(list,"查询成功!");
}
@DeleteMapping("/delete")
public Result<?> deleteErr(@RequestBody ErrLevel errLevel){
errLevelService.deleteErrLevel(errLevel);
return Result.success("删除成功");
}
MyBatisPlus实现增删查改
1.引入依赖
//引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3</version>
</dependency>
2.创建用户实体
//实体
@Data
public class User {
private Long id;
private String username;
private String password;
}
3.创建Mapper接口
//Mapper接口
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
4.创建service接口
//Service接口
public interface UserService extends IService<User> {
}
5.创建一个 ServiceImpl 类,实现service接口
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
6.创建一个 Controller 类处理对应请求
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/insert")
public String createUser(@RequestBody User user) {
userService.save(user);
return "User created";
}
@GetMapping("/get{id}")
public User getUser(@PathVariable Long id) {
return userService.getById(id);
}
@GetMapping("/list")
public List<User> getUsers() {
return userService.list();
}
@PutMapping("/update{id}")
public String updateUser(@PathVariable Long id, @RequestBody User user) {
user.setId(id);
userService.updateById(user);
return "User updated";
}
@DeleteMapping("/delete{id}")
public String deleteUser(@PathVariable Long id) {
userService.removeById(id);
return "User deleted";
}
}
以上就是MyBatis和MyBatis-Plus的代码演示,虽然MyBatis-Plus没有对复杂SQL查询操作进行封装,但是它提供了一些辅助功能,可以帮助开发者更加方便地进行复杂SQL查询操作。