MybatisPlus
学习资料:
- [官方文档](MyBatis-Plus (baomidou.com))
- 优质博客:学习MyBatis-Plus3这一篇就够了
- 教程:
(1)黑马程序员MybatisPlus深入浅出教程,快速上手Mybatis-Plus
(2尚硅谷MyBatisPlus教程(mybatis-plus框架精讲)
一、引入依赖及配置
1.主要新增的依赖
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<!--除去原本的log依赖-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--log4j依赖-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<!--SpringBoot测试依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--mybatis-plus的springboot支持-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
2.编写配置
(1)log4j.properties
log4j.rootLogger=DEBUG,A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%t] [%c]-[%p] %m%n
(2)appication.properties
#数据库配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/database_name?\
useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
二、使用mybatis-plus
本次案例测试使用的数据表为
mysql> select *from tb_user;
+----+-----------+----------+--------+------+-----------------+
| id | user_name | password | name | age | email |
+----+-----------+----------+--------+------+-----------------+
| 1 | zhangsan | 123456 | 张三 | 18 | test1@itcast.cn |
| 2 | lisi | 123456 | 李四 | 20 | test2@itcast.cn |
| 3 | wangwu | 123456 | 王五 | 28 | test3@itcast.cn |
| 4 | zhaoliu | 123456 | 赵六 | 21 | test4@itcast.cn |
| 5 | sunqi | 123456 | 孙七 | 24 | test5@itcast.cn |
+----+-----------+----------+--------+------+-----------------+
5 rows in set (0.01 sec)
1.编写pojo
在项目文件夹下创建pojo
文件夹,用于存放数据表实例。
package com.example.mybatistest.pojo;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("tb_user")
public class User {
private Long id;
private String userName;
private String password;
private String name;
private Integer age;
private String email;
}
2.编写mapper
在项目文件夹下创建mapper
文件夹,存储mapper
接口
package com.example.mybatistest.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.mybatistest.pojo.User;
public interface UserMapper extends BaseMapper<User> {
}
3.编写启动类
package com.example.mybatistest;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("com.example.mybatistest.mapper") // 扫描的包对应mapper的package
@SpringBootApplication
public class MybatisTestApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisTestApplication.class, args);
}
}
4.编写测试类
package com.example.mybatistest;
import com.example.mybatistest.mapper.UserMapper;
import com.example.mybatistest.pojo.User;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class MybatisTestApplicationTests {
@Autowired
private UserMapper userMapper; // 此处IDEA可能标红,但不影响后面testSelect方法的测试
@Test
public void testSelect(){
List<User> userList = userMapper.selectList(null);
for (User user : userList) {
System.out.println(user);
}
}
}
测试结果
[main] [com.example.mybatistest.mapper.UserMapper.selectList]-[DEBUG] <== Total: 5
[main] [org.mybatis.spring.SqlSessionUtils]-[DEBUG] Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@13e00016]
User(id=1, userName=zhangsan, password=123456, name=张三, age=18, email=test1@itcast.cn)
User(id=2, userName=lisi, password=123456, name=李四, age=20, email=test2@itcast.cn)
User(id=3, userName=wangwu, password=123456, name=王五, age=28, email=test3@itcast.cn)
User(id=4, userName=zhaoliu, password=123456, name=赵六, age=21, email=test4@itcast.cn)
User(id=5, userName=sunqi, password=123456, name=孙七, age=24, email=test5@itcast.cn)
三、通用CRUD
1.插入操作
(1)基础语句
int result = mapper.insert(item);
(2)新增测试方法
@Test
public void testInsert(){
User newUser = new User();
newUser.setAge(20);
newUser.setUserName("Jason");
newUser.setEmail("test@mybatis.com");
newUser.setName("Jason");
newUser.setPassword("123");
int result = this.userMapper.insert(newUser);
System.out.println("result = " + result);
}
(3)结果
reuslt = 1
数据表结果
mysql> select *from tb_user;
+---------------------+-----------+----------+--------+------+------------------+
| id | user_name | password | name | age | email |
+---------------------+-----------+----------+--------+------+------------------+
| 1 | zhangsan | 123456 | 张三 | 18 | test1@itcast.cn |
| 2 | lisi | 123456 | 李四 | 20 | test2@itcast.cn |
| 3 | wangwu | 123456 | 王五 | 28 | test3@itcast.cn |
| 4 | zhaoliu | 123456 | 赵六 | 21 | test4@itcast.cn |
| 5 | sunqi | 123456 | 孙七 | 24 | test5@itcast.cn |
| 1447068479692804097 | Jason | 123 | Jason | 20 | test@mybatis.com |
+---------------------+-----------+----------+--------+------+------------------+
6 rows in set (0.00 sec)
可见id并不是自增,修改pojo
中User
对象。
package com.example.mybatistest.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("tb_user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String userName;
private String password;
private String name;
private Integer age;
private String email;
}
2.更新操作
(1)基础语法
int updateById(@Param(Constants.ENTITY) T entity);
(2)测试方法
@Test
public void testUpdateById() {
User user = new User();
user.setId(6L); //主键
user.setAge(21); //更新的字段
//根据id更新,更新不为null的字段
this.userMapper.updateById(user);
}