mybatis-plus使用心得
mybatis-plus是一款基于mybatis的持久层框架,在mybatis上只做增强不做改变。基本使用流程:
- 导入依赖坐标:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>Latest Version</version>
</dependency> - 在yml文件中配置使用的数据源。
- mybatisplus分别在dao层和service层提供了基础的接口,提供了基础的增删改查实现。只需要继承BaseMapper和Iservice接口。
- 在mybatis-plus中集成了分页插件,需要在配置类中将插件配置成bean加入容器中。
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return mybatisPlusInterceptor;
} - 集成日志配置,在yml文件中配置:
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl - id生成:mybatis-plus自带主键生成策略,使用注解
@TableId(type = IdType.AUTO)
private Long id; - 自动填充,一般数据库中都有修改时间,新增时间等字段,mybatis-plus可以通过配置生成策略自动生成。代码中在实体类上需要自动填充的字段使用注解标注。
@TableField(value = "gmt_create",fill = FieldFill.INSERT)
private Date gmtCreate; @TableField(value = "gmt_modified",fill = FieldFill.INSERT_UPDATE)
private Date gmtModified;需要将自动填充策略作为bean添加到容器中,自定义填充字段的生成策略。
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill....");
this.setFieldValByName("gmtCreate",new Date(),metaObject);
this.setFieldValByName("gmtModified",new Date(),metaObject);
} @Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill....");
this.setFieldValByName("gmtModified",new Date(),metaObject);
}
} - 逻辑删除字段处理,实际开发中数据库的字段一般不会进行物理删除,通常使用逻辑删除修改标记位。mybatis-plus中使用注解@Tablelogic实现,数据库增加逻辑删除字段,实体类上标注
@TableLogic(value = "1",delval = "0") //逻辑删除
private Integer deleted;在yml文件中指明逻辑删除标记位:
mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted # 逻辑删除的字段
logic-delete-value: 1 # 1代表删除
logic-not-delete-value: 0 # 0代表未删除 - 乐观锁/悲观锁 mybatis-plus中使用@Version字段实现乐观锁,数据库添加version字段,实体类处理:
@Version
private Integer version;将乐观锁组件注册到IOC中
@Bean
public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor(){
return new OptimisticLockerInnerInterceptor();
} - mybatis-plus处理枚举字段,使用自定义的枚举类表示,可以使用@EnumValue注解加在要保存进数据库中的字段上,mp将会自动映射。使用@JsonValue加在枚举类中要返回给前端的属性的get方法上,返回时将会自动映射,如SexEnum中返回前端的就是(“男人”/“女人”).
public enum SexEnum {
MAN(1, "男人"),
WOMAN(0, "女人"); @EnumValue
private int code; private String value; SexEnum(int code, String value) {
this.code = code;
this.value = value;
} public int getCode() {
return code;
} @JsonValue
public String getValue() {
return value;
}
}yml文件中配置
mybatis-plus:
type-enums-package: com.codeyoung.json.domain # 指定枚举类所在的包
configuration:
default-enum-type-handler: org.apache.ibatis.type.EnumOrdinalTypeHandler # 指定默认枚举类处理器 - mybatis-plus处理json字段的数据,如果数据库中字段为json格式的字符串,可以使用@TableFiled(Typehandler=JacksonTypeHandler.class)实现javatype到jdbctype的互转,可以将实体类对象转为json字符串存入到表中。
@Data
public class Foo {
private Long id;
private String bar;
private Bar barObj;
private Date createTime;
} @Data
public class Bar {
private String name;
private Integer quz;
private Date timestamp;
}
mybatis-plus使用心得的更多相关文章
- mybatis 关联表心得
1,例如订单表与用户表的关联,一个订单对应一个用户,这是一对一关联: 用代码实现是这样: A(用resultType去实现的话,如下) 1,使用到继承, OrderUser extend Order{ ...
- spring mvc&mybatis搭配使用心得
请求参数不多时控制器方法使用@RequestParam或@PathVariable接收参数即可. 请求参数过多时使用@RequestParam指定一个map接受参数即可,mybatis查询时可以直接作 ...
- Echo团队Alpha冲刺随笔 - 第五天
项目冲刺情况 进展 前端:布局,内容等方面基本完成. 后端:基本功能基本实现. 计划:准备进行前后端对接,进行测试 问题 有部分代码冗余,需要着手修改 心得 团队分工明确,互相协作,开发进度比预想的要 ...
- 新建maven工程问题001
这周一直在研究SpringMVC+Mybatis,有些心得,记录一下. Ⅰ:建maven遇到的问题. 1.1 新建maven时选中[Create a simple project]这样,后面[Pack ...
- Java开发学习心得(二):Mybatis和Url路由
目录 Java开发学习心得(二):Mybatis和Url路由 1.3 Mybatis 2 URL路由 2.1 @RequestMapping 2.2 @PathVariable 2.3 不同的请求类型 ...
- 关于mybatis中mapper.xmlSQL语句书写的心得
本文主要针对MySQL ---------------------------------------------------------------------------------------- ...
- MyBatis使用DEMO及cache的使用心得
下面是一个简单的MyBatis使用DEMO. 整体结构 整体代码大致如下: POM依赖 需要引用两个jar包,一个是mybatis,另一个是mysql-connector-java,如果是maven工 ...
- myBatis xml if、where、if-else?、foreach 心得
MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦.例如拼接时要确保不能忘记添加必要的空格,还要注意去掉 ...
- 34对MyBatis的博客的整理心得
对本博客的mybatis重新读一下,做一个整理.如下: 1:为什么会有mybatis,因为原生的jdbc方式有很大问题: (1)数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭 ...
- mybatis源码阅读心得
第一天阅读源码及创建时序图.(第一次用prosson画时序图,挺丑..) 1. 调用 SqlSessionFactoryBuilder 对象的 build(inputStream) 方法: 2. ...
随机推荐
- 通过ssh远程执行kubectl命令报错问题
在使用Jenkins链接Kubernetes集群,如果Jenkins安装机器与Kubernetes Master节点不在同一台机器上面,需要使用ssh远程执行部署命令,如下: ssh root@10. ...
- Code Generate V2.0 代码生成器
Code Generate 代码生成器 系统首页 使用说明 系统默认会根据SQL生成字段信息 className.fieldList.classComment 如下所示: 建表语句 CREATE TA ...
- 理解ASP.NET Core - 限流(Rate Limiting)
注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 概述 在微服务化的架构设计中,网关扮演着重要的看门人角色,它所提供的功能之一就是限流.而对于众 ...
- 【WebGL系列-03】获取shader变量地址及赋值
获取shader变量地址及赋值 上一节创建了WebGL程序对象,创建好program对象后,对象中包含顶点着色器和片元着色器,着色器中含有变量,我们需要对其进行赋值后才能够进行绘制. 着色器代码如下: ...
- Linux 问题:网络相关
防火墙 同网段双网卡 双网关 看服务日志
- React: React-Router嵌套路由 exact问题
说明 当使用嵌套路由时,不能在父路由中添加exact,因为要先匹配父路由才能匹配子路由 父路由 子路由 效果如下所示 参考链接 https://www.jianshu.com/p/8bc3251079 ...
- Vue报错: Property or method "changeLoginType" is not defined on the instance but referenced during render
原因 我这里是因为我代码中的方法不存在,我漏写了,后补充上就好了 解决方案 在methods中添加如下代码: // 修改登录状态 changeLoginType(bool){ this.loginTy ...
- centos打开防火墙的TCP80端口
用管理员权限运行iptables -I INPUT -p tcp --dport 80 -j ACCEPT
- 浏览器端模块化方式es module详解
在es module出现之前还有社区推出amd和cmd的规范,这两者还有其特定的编写方式,使用起来不算很方便.es module被官方推出来就成为了浏览器端实现模块化的一个很好的方案. 想要在浏览 ...
- 【Unity3D】运动模糊特效
1 运动模糊原理 开启混合(Blend)后,通过 Alpha 通道控制当前屏幕纹理与历史屏幕纹理进行混合,当有物体运动时,就会将当前位置的物体影像与历史位置的物体影像进行混合,从而实现运动模糊效果 ...