(目录)
MybatisPlus基础篇
1.概述
MybatisPlus是一款Mybatis增强工具,用于简化开发,提高效率。 它在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
官网: https://mp.baomidou.com/
2.快速入门
2.0 准备工作
①准备数据
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`user_name` varchar(20) NOT NULL COMMENT '用户名',
`password` varchar(20) NOT NULL COMMENT '密码',
`name` varchar(30) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`address` varchar(100) DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
insert into `user`(`id`,`user_name`,`password`,`name`,`age`,`address`) values (1,'ruiwen','123','瑞文',12,'山东'),(2,'gailun','1332','盖伦',13,'平顶山'),(3,'timu','123','提姆',22,'蘑菇石'),(4,'daji','1222','妲己',221,'狐山');
②创建SpringBoot工程
添加依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</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>
创建启动类
@SpringBootApplication
public class SGApplication {
public static void main(String[] args) {
SpringApplication.run(SGApplication.class);
}
}
③准备实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Long id;
private String userName;
private String password;
private String name;
private Integer age;
private String address;
}
2.1 使用MybatisPlus
①添加依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
②配置数据库信息
spring:
datasource:
url: jdbc:mysql://localhost:3306/mp_db?characterEncoding=utf-8&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
③创建Mapper接口
创建Mapper接口继承BaseMapper接口
public interface UserMapper extends BaseMapper<User> {
}
BaseMapper接口中已经提供了很多常用方法。所以我们只需要直接从容器中获取Mapper就可以进行操作了,不需要自己去编写Sql语句。
④配置Mapper扫描
在启动类上配置我们的Mapper在哪个包。
@SpringBootApplication
@MapperScan("com.sangeng.mapper")
public class SGApplication {
public static void main(String[] args) {
SpringApplication.run(SGApplication.class,args);
}
}
⑤获取Mapper进行测试
@SpringBootTest
public class MPTest {
@Autowired
private UserMapper userMapper;
@Test
public void testQueryList(){
System.out.println(userMapper.selectList(null));
}
}
3.常用设置
3.1 设置表映射规则
默认情况下MP操作的表名就是实体类的类名,但是如果表名和类名不一致就需要我们自己设置映射规则。
3.1.1 单独设置
可以在实体类的类名上加上@TableName注解进行标识。
例如:
如果表名是tb_user,而实体类名是User则可以使用以下写法。
@TableName("tb_user")
public class User {
//....
}
3.1.2 全局设置表名前缀
一般一个项目表名的前缀都是统一风格的,这个时候如果一个个设置就太麻烦了。我们可以通过配置来设置全局的表名前缀。
例如:
如果一个项目中所有的表名相比于类名都是多了个前缀: tb_
。这可以使用如下方式配置
mybatis-plus:
global-config:
db-config:
#表名前缀
table-prefix: tb_
3.2 设置主键生成策略
3.2.0 测试代码
@Test
public void testInsert(){
User user = new User();
user.setUserName("三更草堂222");
user.setPassword("7777");
int r = userMapper.insert(user);
System.out.println(r);
}
3.2.1 单独设置
默认情况下使用MP插入数据时,如果在我们没有设置主键生成策略的情况下默认的策略是基于雪花算法的自增id。
如果我们需要使用别的策略可以在定义实体类时,在代表主键的字段上加上@TableId
注解,使用其type
属性指定主键生成策略。
例如:
我们要设置主键自动增长则可以设置如下
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
@TableId(type = IdType.AUTO)
private Long id;
//.....
}
全部主键策略定义在了枚举类IdType
中,IdType
有如下的取值
AUTO
数据库ID自增,依赖于数据库。该类型请确保数据库设置了 ID自增 否则无效
NONE
未设置主键类型。若在代码中没有手动设置主键,则会根据主键的全局策略自动生成(默认的主键全局策略是基于雪花算法的自增ID)
INPUT
需要手动设置主键,若不设置。插入操作生成SQL语句时,主键这一列的值会是
null
。
ASSIGN_ID
当没有手动设置主键,即实体类中的主键属性为空时,才会自动填充,使用雪花算法
ASSIGN_UUID
当实体类的主键属性为空时,才会自动填充,使用UUID
3.2.2 全局设置
mybatis-plus:
global-config:
db-config:
# id生成策略 auto为数据库自增
id-type: auto
3.3 设置字段映射关系
默认情况下MP会根据实体类的属性名去映射表的列名。
如果数据库的列表和实体类的属性名不一致了我们可以使用@TableField
注解的value
属性去设置映射关系。
例如:
如果表中一个列名叫 address而 实体类中的属性名为addressStr则可以使用如下方式进行配置。
@TableField("address")
private String addressStr;
3.4 设置字段和列名的驼峰映射
默认情况下MP会开启字段名列名的驼峰映射, 即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射 。
如果需要关闭我们可以使用如下配置进行关闭。
mybatis-plus:
configuration:
#是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射
map-underscore-to-camel-case: false
3.5 日志
如果需要打印MP操作对应的SQL语句等,可以配置日志输出
。
配置方式如下:
mybatis-plus:
configuration:
# 日志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
4.基本使用
4.1 插入数据
我们可以使用insert
方法来实现数据的插入。
示例:
@Test
public void testInsert(){
User user = new User();
user.setUserName("张三333");
user.setPassword("7777888");
int r = userMapper.insert(user);
System.out.println(r);
}
4.2 删除操作
我们可以使用deleteXXX
方法来实现数据的删除。
示例:
@Test
public void testDelete(){
List<Integer> ids = new ArrayList<>();
ids.add(5);
ids.add(6);
ids.add(7);
int i = userMapper.deleteBatchIds(ids);
System.out.println(i);
}
@Test
public void testDeleteById(){
int i = userMapper.deleteById(8);
System.out.println(i);
}
@Test
public void testDeleteByMap(){
Map<String, Object> map = new HashMap<>();
map.put("name","提姆");
map.put("age",22);
int i = userMapper.deleteByMap(map);
System.out.println(i);
}
4.3 更新操作
我们可以使用updateXXX
方法来实现数据的删除。
示例:
@Test
public void testUpdate(){
//把id为2的用户的年龄改为14
User user = new User();
user.setId(2L);
user.setAge(14);
int i = userMapper.updateById(user);
System.out.println(i);
}