MyBatis-Plus(简称MP)是一个基于MyBatis的增强工具,它在MyBatis的基础上提供了一些更加便捷和强大的功能
原理:
- 代码生成器:MyBatis-Plus提供了一个代码生成器,可以根据数据库表结构自动生成对应的实体类、映射器接口以及XML文件。这样可以减少手动编写重复的代码。
- ActiveRecord模式:MyBatis-Plus支持ActiveRecord模式,即实体类继承BaseMapper接口后,自动拥有CRUD(增删改查)等数据库操作的方法,无需手动编写mapper接口。
- Lambda表达式:MyBatis-Plus支持Lambda表达式,通过Lambda表达式可以方便地进行条件构造,避免了手写SQL的繁琐。
- 自动填充:MyBatis-Plus提供了自动填充功能,可以在插入或更新数据时自动填充某些字段,如创建时间、更新时间等。
- 分页查询:MyBatis-Plus提供了丰富的分页查询功能,可以方便地进行分页查询并获取分页结果。
应用实现:
- 引入依赖:在项目的
pom.xml
文件中引入MyBatis-Plus的相关依赖。 - 配置数据源:在配置文件中配置数据库连接信息。
- 定义实体类:使用
@TableName
注解标注实体类对应的数据表。 - 创建映射器接口:继承BaseMapper接口,可以选择性地编写一些自定义的数据库操作方法。
- 配置代码生成器(可选):根据数据库表结构自动生成实体类、映射器接口以及XML文件,提高开发效率。
- 编写业务逻辑代码:使用MyBatis-Plus提供的API进行数据的增删改查操作,如
insert()
,selectById()
,updateById()
,deleteById()
等。 - 使用Lambda表达式:通过Lambda表达式进行条件构造,如
eq()
,like()
,orderByDesc()
等。 - 分页查询:使用
Page
对象进行分页查询,并获取分页结果。
创建项目
MyBatisPlus
一、添加依赖
<!-- MyBatisPlus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<!--LomBok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <optional>true</optional>
</dependency>
<!--mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
二、添加配置源
改后缀名
三、在启动类上扫描dao的路径
package com.example.hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.hello.mapper")//扫描dao的路径
public class HelloApplication {
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}
}
四、创建实体并与数据库表关联
package demo.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("t_user")
public class User {
@TableId
private Long id;
private String userName;
private String passwd;
private Float money;
}
五、创建dao继承自BaseMapper
六、在controller中测试MyBatisPlus
1、通过@Resource注解实例化dao对象
@RestController
public class UserServlet {
@Resource
private UserMapper mapper;
}
2、使用MyBatisPlus实现基本的CRUD
package hello.controller;
import hello.mapper.UserMapper;
import hello.entity.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
@RestController
public class UserServlet {
@Resource
private UserMapper mapper;
//MybatisPlus
//增
@RequestMapping("/t1")
public int insertUser(){
return dao.insert(new User(null, "tom", "123"));
}
//查全部
@RequestMapping("/t2")
public List<User> queryAll(){
return dao.selectList(null);
}
//根据ID查询
@RequestMapping("/t3")
public User queryById(){
return dao.selectById(1001);
}
//修改
@RequestMapping("/t4")
public int changeById(){
return dao.updateById(new User(1592479791261057026L, "tomson", "123456"));
}
//删除
@RequestMapping("/t5")
public int deleteById(){
return dao.deleteById(1592479791261057026L);
}
//批量删除
@RequestMapping("/t6")
public int deleteByIds(){
return mapper.deleteBatchIds(Arrays.asList(1592443398207979521L,1592443445872050177L));
}
}
七、MyBatis
1、在resources文件夹下创建mappers文件夹,创建xml文件
2、在application.yml配置文件中配置mapper文件夹
mapper-locations: classpath:mappers/*.xml
在UserDAO中添加方法
package hello.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import hello.entity.User;
import javax.annotation.Resource;
public interface UserMapper extends BaseMapper<User> {
public User login(String userName,String passwd);
public int UserAdd(User user);
public int UserUpdate(User user);
public int deleteById(Long id);
}
在mappers文件夹中创建UserMapper.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="demo.dao.UserDAO">
</mapper>
维护方法的sql语句
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="hello.mapper.UserMapp">
<select id="login" resultType="hello.entity.User">
select * from t_user where user_name=#{userName} and passwd=#{passwd}
</select>
<insert id="UserAdd">
insert into t_user values (#{id},#{userName},#{passwd})
</insert>
<update id="UserUpdate">
update t_user set user_name = #{userName} , passwd = #{passwd} where id=#{id}
</update>
<delete id="deleteById">
delete from t_user where id = #{id}
</delete>
</mapper>
在controller中测试
package hello.controller;
import hello.mapper.UserMapper;
import hello.entity.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
@RestController
public class UserServlet {
@Resource
private UserMapper mapper;
//MybatisPlus
//增
@RequestMapping("/t7")
public User login(String name, String pwd){
return dao.login(name, pwd);
}
@RequestMapping("/t8")
public int UserAdd(String name, String pwd) {
int rows = dao.UserAdd(new User(null, name, pwd));
return rows;
}
@RequestMapping("/t9")
public int UserUpdate(User user) {
return dao.UserUpdate(new User(1001l, "admin", "123"));
}
@RequestMapping("/t10")
public int deleteById(Long id) {
return dao.deleteById(id);
}
}
总而言之,MyBatis-Plus在MyBatis的基础上进行了功能增强和便捷化的设计,通过提供代码生成器、ActiveRecord模式、Lambda表达式、自动填充和分页查询等功能,简化了数据库操作的开发流程,并提高了开发效率。在实际应用中,可以根据项目需求灵活选择使用MyBatis-Plus来简化数据访问层的开发。以上文章内容仅仅是是个人见解,有不足望指教。