<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<!-- 阿里巴巴连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.20</version>
</dependency>
</dependencies>
其对应的数据库 Schema 脚本如下
如果需要使用mp的主键自增,需要设置主键自增 AUTO_INCREMENT
DROP TABLE IF EXISTS user;
CREATE TABLE user
(
id BIGINT(20) NOT NULL COMMENT '主键ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT(11) NULL DEFAULT NULL COMMENT '年龄',
email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (id)
);
其对应的数据库 Data 脚本如下
DELETE FROM user;
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');
配置数据库信息
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
username: root
password: password
@Data//自动set/get方法
@TableName("user")//对应数据库表名,如果类名和数据库表名一样可以忽略此注解
@AllArgsConstructor//自动全参构造
@NoArgsConstructor//自动无参构造
@Accessors(chain = true)//链式赋值
public class UserPojo {
@TableId(type = IdType.AUTO,value = "id")//主键自增
private Long id;
// @TableField(value = "name") 如果实体类字段和数据库字段不对应可以使用该注解指定
private String name;
private Integer age;
private String email;
}
@Mapper//使用该注解指定为该接口为mapper接口
//如果不使用该注解就需要在启动类中用@MapperScan("mapper接口的全路径名")指定
public interface UserMapper extends BaseMapper<UserPojo> {
//注意BaseMapper的泛型一定要对应实体类,实体类要对应数据库表
@SpringBootTest
class MybatisPlusNewdemoApplicationTests {
@Autowired(required = false)
private UserMapper mapper;
/**|
* 根据id查询
*/
@Test
public void test1(){
UserPojo userPojo = mapper.selectById(1);
System.out.println(userPojo);
}
/**
* 根据map查询
*/
@Test
public void test2(){
Map<String, Object> map = new HashMap<>();
map.put("id",1);
List<UserPojo> userPojos = mapper.selectByMap(map);
userPojos.forEach(System.out::println);
}
/**
* 自定义条件查询
*/
@Test
public void test3(){
//QueryWrappert条件构造器
List<UserPojo> userPojos = mapper.selectList(new QueryWrapper<UserPojo>().eq("id", 1));
userPojos.forEach(System.out::println);
}
/**
*根据对象添加
* 使用mybatis-plus的主键自增功能,需要数据库的该字段也设置自增属性
*/
@Test
public void test4(){
UserPojo userPojo = new UserPojo();
userPojo.setAge(20).setEmail("123@qq.com").setName("生如夏花");
mapper.insert(userPojo);
}
/**
* 自定义条件构造器删除
*/
@Test
public void test5(){
mapper.delete(new QueryWrapper<UserPojo>().eq("name","生如夏花"));
}
/**
* 根据id集合删除
*/
@Test
public void test6(){
List<Long> longs = new ArrayList<>();
longs.add(7l);
longs.add(8l);
mapper.deleteBatchIds(longs);
}
/**
* 根据id修改
* updateById方法会自动去寻找对象中的id属性
*/
@Test
public void test7(){
UserPojo userPojo = new UserPojo();
userPojo.setId(1l).setAge(20).setEmail("123@qq.com").setName("生如夏花");
mapper.updateById(userPojo);
}
/**
* 自定义条件构造器更新
*/
@Test
public void test8(){
UserPojo userPojo = new UserPojo();
userPojo.setAge(20).setEmail("123@qq.com").setName("生如夏花");
mapper.update(userPojo,new QueryWrapper<UserPojo>().eq("id",2l));
}
}
需求
查询所有用户 请求路径:http://localhost:8080/user 请求方法:get 请求参数: 无 返回对象:{
data:
[
{
id: 1,
name: “生如夏花”,
age: 20,
email: “123@qq.com”
}
],
meta:
{
status: 200,
msg: “查询成功”
}
}
新增依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.3.RELEASE</version>
</dependency>
在application.yml中设置启动端口
server:
port: 8080
新建UserController
@RestController//指定该类为controller
public class UserController {
@Autowired(required = false)
private UserService userService;
@GetMapping("user")
public ReturnVo getUserAll(){
return userService.getUserAll();
}
}
新建UserService接口
public interface UserService {
//查询全部用户
ReturnVo getUserAll();
}
新建UserServiceImpl实现UserService接口
@Service//指定该类为service
public class UserServiceImpl implements UserService {
@Autowired(required = false)
private UserMapper userMapper;
@Override
public ReturnVo getUserAll() {
//queryWrapper为null表示查询全部
List<UserPojo> userPojos = userMapper.selectList(null);
return new ReturnVo(userPojos,new Meta(200,"查询成功"));
}
}
新建ReturnVo返回类
/**
* 统一返回类
*/
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
public class ReturnVo {
private Object data;
private Meta meta;
}
新建Meta返回状态类
/**
* 状态返回类
*/
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
public class Meta {
private Integer status;
private String msg;
}
通过浏览器访问http://localhost:8080/user
得到以下数据
{
"data": [
{
"id": 1,
"name": "生如夏花",
"age": 20,
"email": "123@qq.com"
},
{
"id": 2,
"name": "生如夏花",
"age": 20,
"email": "123@qq.com"
},
{
"id": 3,
"name": "Tom",
"age": 28,
"email": "test3@baomidou.com"
},
{
"id": 4,
"name": "Sandy",
"age": 21,
"email": "test4@baomidou.com"
},
{
"id": 5,
"name": "Billie",
"age": 24,
"email": "test5@baomidou.com"
}
],
"meta": {
"status": 200,
"msg": "查询成功"
}
}
这便就是前后端分离模式下mybatis-plus在项目中的简单应用
如果mybatis-plus自带的方法不能满足要求,可以在mapper中自定义方法
例:查询所有用户
public interface UserMapper extends BaseMapper<UserPojo> {
//查询所有用户
@Select("select * from user")
List<UserPojo> getUserAll();
}
自定义方法可以满足大部分项目需求,不过复杂的sql语句还是建议写在xml中,例如多表联合查询