1.新建spring-boot项目引入相关依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>Vueadmin-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Vueadmin-api</name>
<description>Vueadmin-api</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</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>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
2. 新建application.yml引入数据库配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
3.新建实体类
package com.example.vueadminapi.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Long id;
private int age;
private String name;
private String email;
}
4. 新建实体类对应Mapper接口(继承BaseMapper<实体类>)
package com.example.vueadminapi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.vueadminapi.pojo.User;
import org.springframework.stereotype.Repository;
@Repository
public interface UserMapper extends BaseMapper<User> {
}
5. 项目启动类 添加扫描注解
package com.example.vueadminapi;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.vueadminapi.mapper")
public class VueadminApiApplication {
public static void main(String[] args) {
SpringApplication.run(VueadminApiApplication.class, args);
}
}
6. 测试
@Autowired
private UserMapper userMapper;
@Test
void contextLoads() {
List<User> users = userMapper.selectList(null);
for (User user : users) {
System.out.println(user);
}
}
测试方法集合
- 测试insert方法
@Test
public void TestInsert(){
User user = new User();
user.setAge(18);
user.setEmail("gek821330.com");
user.setName("张三");
int result = userMapper.insert(user);
System.out.println("result:"+result);
System.out.println("id:"+user.getId());
}
- 测试delete方法
// 根据id删除
int result = userMapper.deleteById(1505752384428L);
System.out.println("result:"+result);
使用deleteByMap(多条件删除)
// 使用deleteByMap
HashMap<String, Object> map = new HashMap<>();
map.put("name","张三2");
map.put("age",18);
int result = userMapper.deleteByMap(map);
System.out.println("result:"+result);
使用deleteBatchIds(相当于在调用where in )
List<Long> list = Arrays.asList(2L, 3L);
int result = userMapper.deleteBatchIds(list);
System.out.println("result:"+result);
- 测试Update 方法
updateById
@Test
public void TestUpdate(){
User user = new User();
user.setId(1L);
user.setName("李四");
user.setAge(20);
int result = userMapper.updateById(user);
System.out.println("result:"+result);
}
- 测试select 方法
selectById方法
@Test
public void TestSelect(){
User user = userMapper.selectById(1L);
System.out.println(user);
}
selectByMap(多条件查询)
HashMap<String, Object> map = new HashMap<>();
map.put("name","李四");
map.put("age",20);
List<User> users = userMapper.selectByMap(map);
users.forEach(System.out::println);
selectBatchIds(where id in )
List<Long> ids = Arrays.asList(1L, 2L);
List<User> users = userMapper.selectBatchIds(ids);
users.forEach(System.out::println);
selectList
List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);
自定义方法
- 在userMapper 接口中定义方法名
@Repository
public interface UserMapper extends BaseMapper<User> {
/**
* 根据id查询为map集合
* @param id
* @return
*/
Map<String,Object> selectMapById(Long id);
}
- 在resources下新建mapper 在UserMapper.xml中编写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="com.example.vueadminapi.mapper.UserMapper">
<select id="selectMapById" resultType="map">
select name,age,email from user where id=#{id}
</select>
</mapper>
- 测试
@Test
public void TestSelf(){
Map<String, Object> map = userMapper.selectMapById(2L);
System.out.println(map);
}
测试Service
1. Service基本配置
- 通用 Service CRUD 封装IService (opens new window)接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆,
- 泛型 T 为任意实体对象
- 建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类
- 对象 Wrapper 为 条件构造器
- 写一个UserService继承IService,泛型填写实体类名称
package com.example.vueadminapi.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.vueadminapi.pojo.User;
public interface UserService extends IService<User> {
}
- 写一个UserServiceImpl 实现自己创建的UserService 然后继承mybatis-plus自带的ServiceImpl
package com.example.vueadminapi.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.vueadminapi.mapper.UserMapper;
import com.example.vueadminapi.pojo.User;
import com.example.vueadminapi.service.UserService;
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
2.测试Sevice的方法
count方法
@Autowired
private UserService userService;
@Test
public void TestService(){
long count = userService.count();
System.out.println(count);
}
批量添加 saveBatch
@Test
public void TestService(){
//count
// long count = userService.count();
// System.out.println(count);
//批量添加
List<User> list=new ArrayList<>();
for (int i = 3; i < 10; i++) {
User user = new User();
user.setName("gek"+i);
user.setAge(20+i);
list.add(user);
}
boolean b = userService.saveBatch(list);
System.out.println(b);
}
注解使用
当表名和实体类的名字不一致的时候
- @TableName
- 可以在实体类上面加上TableName注解(“表名”)
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("t_user")
public class User {
private Long id;
private int age;
private String name;
private String email;
}
第二种方法:配置项添加全局的前缀,下面的示列表示所有实体类都会加上t_这个前缀
#设置mybatis-plus的全局配置
global-config:
db-config:
table-prefix: t_
- @TableId(将属性对应的字段指定为主键),因为mybatis-plus默认是以id为主键,若表不是id为主键的话,会报错
@Data
@AllArgsConstructor
@NoArgsConstructor
//@TableName("t_user")
public class User {
@TableId
private Long uid;
private int age;
private String name;
private String email;
}
@TableId(value) value属性是当实体类注解字段名称和数据库主键字段名称不一致的时候,可以设置
package com.example.vueadminapi.pojo;
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(value = "uid")
private Long id;
private int age;
private String name;
private String email;
}
@TableId(Type) type属性是主键生成策略
/**
* 数据库ID自增
* <p>该类型请确保数据库设置了 ID自增 否则无效</p>
*/
AUTO(0),
/**
* 该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
*/
NONE(1),
/**
* 用户输入ID
* <p>该类型可以通过自己注册自动填充插件进行填充</p>
*/
INPUT(2),
/* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
/**
* 分配ID (主键类型为number或string),
* 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(雪花算法)
*
* @since 3.3.0
*/
ASSIGN_ID(3),
/**
* 分配UUID (主键类型为 string)
* 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(UUID.replace("-",""))
*/
ASSIGN_UUID(4);
//表示id自增
@TableId(value = "uid",type = IdType.AUTO)
通过全局配置主键的生成策略
#设置mybatis-plus的全局配置
global-config:
db-config:
table-prefix: t_
#设置主键生成策略
id-type: auto