一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第23天,点击查看活动详情
前言
mybatis属于半自动的ORM框架,实现功能都需要编写大量的SQL语句,而JPA虽然是全自动的,但是如果对其原理掌握不够的话,用起来也会出现莫名的错误,基于这种大环境的由国人开发的mybatis-plus框架就应用而生了,Mybatis-Plus(简称MP)是一个Mybatis的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
Mybatis特性
集成
引入jar包
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
添加Mybatis-plus配置
mybatis-plus:
mapper-locations: classpath*:/mapper/**/*.xml
#实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: com.skywares.mybatisplus
global-config:
#数据库相关配置
db-config:
#主键类型 AUTO:"数据库ID自增", INPUT:"用户输入ID", ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
id-type: AUTO
#字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断"
field-strategy: NOT_NULL
#逻辑已删除
logic-delete-value: 1
#逻辑未删除
logic-not-delete-value: 0
banner: false
#原生配置
configuration:
#驼峰命名
map-underscore-to-camel-case: true
//关闭缓存
cache-enabled: false
//如果查询结果中包含空值的列, 在映射的时候不会映射这个字段
call-setters-on-nulls: true
//
jdbc-type-for-null: 'null'
//开发测试,而生成用org.apache.ibatis.logging.slf4j.Slf4jImpl
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
编写实现类
// dao
public interface UserMapper extends BaseMapper<TUser>
{
}
// service
@Service
@Transactional(rollbackFor=Exception.class)
public class UserServiceImpl extends ServiceImpl<UserMapper,TUser> implements UserService
{
}
//实体类
@TableName("t_user")
public class TUser implements Serializable
{
private static final long serialVersionUID = -2981595606194707222L;
//设置主键名称
@TableId(value="oid",type=IdType.AUTO)
private Long id;
@TableField(value="name")
private String name;
@TableField(value="age")
private int age;
@TableField(value="address")
private String address;
}
说明:
-
@TableId :设置主键的名称主键策略类型
-
@TableField : 数据库字段名称,exist:默认为true,如果数据库不存在此字段,设置为false
-
@TableName : 数据库的表明
-
@Version:乐观锁标记注解
-
@TableLogic:逻辑软删除字段设置
测试
@RequestMapping("/addUser")
public String addUser()
{
TUser tUser =new TUser();
tUser.setName("mybatis-plus");
tUser.setAge(18);
tUser.setAddress("SZ");
userService.save(tUser);
return "成功";
}
@RequestMapping("/queryUserPageList")
public String queryUserPageList()
{
IPage<TUser> page = new Page<TUser>(1,10);
IPage<TUser> userList= userService.page(page);
String userStr=JSON.toJSONString(userList);
return userStr;
}
@RequestMapping("/getUserById")
public String getUserById(@RequestParam int id)
{
TUser tUser= userService.getById(id);
return JSON.toJSONString(tUser);
}
注意:
如果需要实现分页功能需要开启分页配置,否则分页不会生效.
@Configuration
public class MybatisPlusConfig
{
@Bean
public MybatisPlusInterceptor paginationInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 指定数据库方言为 MYSQL
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
逻辑删除
Yml配置
#逻辑已删除
logic-delete-value: 1
#逻辑未删除
logic-not-delete-value: 0
已删除为1,未删除字段值为0
实体配置
//软删除字段设置
@TableLogic
@TableField(value="deleteFlag")
private boolean deleteFlag;
//逻辑删除
@RequestMapping("/deleteUser")
public String deleteUser(@RequestParam Long id)
{
logger.info("deleteUser id:{}",id);
userService.removeById(id);
return "成功";
}
测试
@RequestMapping("/deleteUser")
public String deleteUser(@RequestParam Long id)
{
logger.info("deleteUser id:{}",id);
userService.removeById(id);
return "成功";
}
测试结果:后端执行的是update更新语句,默认为0表示未删除,删除后更新为1。
总结
本文讲解了Spring Boot集成Mybatis-Plus入门实现了CRUD和分页功能,关于myabtis-plus的其他特性后续文章中会详细讲解。