一、Mybatis-Plus简介
官方网站
Mybatis-Plus 是一款 Mybatis 动态 SQL 自动注入 Mybatis 增删改查 CRUD 操作中间件, 减少你的开发周期优化动态维护 XML 实体字段,是对Mybatis的增强。
愿景:我们的愿景是成为 MyBatis 最好的搭档,基友搭配,效率翻倍。
他主要的特点:
- 无侵入,损耗小
- 通用CRUD操作,支持分页操作
- 预防Sql注入,支持多种数据库
- 支持ActiveRecord支持代码生成等等
二、前期准备工作
导入相关jar包
<properties>
<java.version>1.8</java.version>
<mybatis-plus.starter.version>2.1.5</mybatis-plus.starter.version>
<mybatis.starter.version>2.0.1</mybatis.starter.version>
<druid.starter.version>1.1.20</druid.starter.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.starter.version}</version>
</dependency>
<!-- 添加MP依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.2</version>
</dependency>
</dependency>
<!-- lombok 工具包-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.starter.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
sql语句
-- 数据库名 db_boot_example
DROP TABLE IF EXISTS user;
CREATE TABLE `user`
(
`uid` INT(11) PRIMARY KEY AUTO_INCREMENT COMMENT '用户Id',
`username` VARCHAR(100) NOT NULL COMMENT '用户名',
`password` VARCHAR(128) NOT NULL COMMENT '密码',
`phone` VARCHAR(11) DEFAULT NULL COMMENT '手机',
`sex` TINYINT(1) DEFAULT 1 COMMENT '性别 1 表示男 0 表示女',
`email` VARCHAR(100) NOT NULL COMMENT '邮箱',
`mark` VARCHAR(100) DEFAULT NULL COMMENT '备注',
`last_login` TIMESTAMP DEFAULT current_timestamp NOT NULL COMMENT '最后一次登录时间',
`login_ip` VARCHAR(30) DEFAULT NULL COMMENT '登录ip',
`head` VARCHAR(100) DEFAULT '/img/default.png' COMMENT '头像图片路径',
`reg_time` TIMESTAMP DEFAULT current_timestamp NOT NULL COMMENT '注册时间',
`locked` TINYINT(1) DEFAULT 0 COMMENT '账号是否被锁定 1 表示未锁定 0 表示锁定',
UNIQUE KEY `uk_u_name` (`username`),
UNIQUE KEY `uk_u_phone` (`phone`),
UNIQUE KEY `uk_u_email` (`email`)
) ENGINE = InnoDB
AUTO_INCREMENT = 1
DEFAULT CHARSET = utf8;
entity
@Data
public class User {
/**
* 用户Id
*/
private Integer uid;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 手机
*/
private String phone;
/**
* 性别 1 表示男 0 表示女
*/
private Boolean sex;
/**
* 邮箱
*/
private String email;
/**
* 备注
*/
private String mark;
/**
* 最后一次登录时间
*/
private Date lastLogin;
/**
* 登录ip
*/
private String loginIp;
/**
* 头像图片路径
*/
private String head;
/**
* 注册时间
*/
private Date regTime;
/**
* 账号是否被锁定 1 表示未锁定 0 表示锁定
*/
private Boolean locked;
}
application-mp.yml
spring:
datasource:
# 初始化线程池数量 最大数 最小数
type: com.alibaba.druid.pool.DruidDataSource
# 驱动包 8.0以上的配置
# =========== durid 连接池配置===========
druid:
#===========JDBC 配置===========
url: jdbc:mysql://localhost:3306/db_boot_example?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: root
initial-size: 5
max-active: 20
min-idle: 3
# 打印SQL日志
logging:
level:
com.vp.example.mapper: trace
server:
port: 8000
servlet:
context-path: /api
address: 127.0.0.1
# ========MP配置 无需配置mybatis了============
mybatis-plus:
# 如果是放在src/main/java目录下 classpath:/com/你的包名/*/mappers/*.xml
# 如果放在 src/main/resources 下
mapper-locations: classpath:/mappers/**/*.xml
# 实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: com.vp.example.*.entity
global-config:
db-config:
# 主键类型
id-type: auto
#驼峰下划线转换
table-underline: true
logic-delete-value: 1
logic-not-delete-value: 0
configuration:
#配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as: select user_id as userId)
map-underscore-to-camel-case: true
cache-enabled: false
#配置JdbcTypeForNull, oracle数据库必须配置
jdbc-type-for-null: 'null'
UserMapper
// 继承Mybatis Plus提供的BaseMapper
public interface UserMapper extends BaseMapper<User> {
}
程序入口
@SpringBootApplication
@MapperScan("com.vp.example.mapper")
public class ExampleApplication {
public static void main(String[] args) {
SpringApplication.run(ExampleApplication.class, args);
}
}
三、基本操作CURD
添加操作
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class UserMapperTest {
@Resource
UserMapper userMapper;
@Test
public void save() {
User user = new User();
user.setUsername("qq123456");
user.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));
user.setPhone("123456789");
user.setEmail("123456@qq.com");
userMapper.insert(user);
}
}
更新操作
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class UserMapperTest {
@Resource
UserMapper userMapper;
@Test
public void update() {
User user = new User();
user.setUid(1);
user.setPassword(DigestUtils.md5DigestAsHex("test".getBytes()));
// 没有值的将不会更新
userMapper.updateById(user);
}
}
查询操作
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class UserMapperTest {
@Resource
UserMapper userMapper;
@Test
public void findById() {
User user = userMapper.selectById(1);
log.error(user.toString());
}
}
删除操作
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class UserMapperTest {
@Resource
UserMapper userMapper;
@Test
public void deleteById() {
int count = userMapper.deleteById(1);
log.error("影响的行数:{}",count);
}
}