| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> Java知识库 -> mybatis-plus入门CRUD/日志/自动填充/乐观锁 -> 正文阅读 |
|
|
[Java知识库]mybatis-plus入门CRUD/日志/自动填充/乐观锁 |
|
入门 pom.xml <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-common</artifactId>
<version>2.9.2</version>
</dependency>
application.yml spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
driver-class-name: com.mysql.cj.jdbc.Driver
实体类 User.java @Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User{
@TableId(type = IdType.AUTO)//自增,注意数据库也需要设置自增
private int id;
@ApiModelProperty(value = "姓名",name = "name",dataType = "String",required = true)//解释,名字,类型,是否可为空
private String name;
private String pwd;
}
dao层Mapper接口 UserMapper.java @Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {
}
启动类下添加扫描器 @SpringBootApplication @MapperScan("com.shuo.dao")
public class MybatisPlusApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisPlusApplication.class, args);
}
}
测试类 @SpringBootTest
class MybatisPlusApplicationTests {
@Autowired
UserMapper userMapper;
????????//查
@Test
void contextLoads() {
List<User> users = userMapper.selectList(null);
for (User user : users) {
System.out.println(user.toString());
}
}
????????//增
@Test
public void testInsert(){
/*User user = new User(12, "小胖", "123456");*/
User user=new User();
user.setName("冉冉");
user.setPwd("789456");
userMapper.insert(user);
//contextLoads();
}
//改
@Test
public void updatetest(){
contextLoads();
User user = new User();
user.setId(8);
user.setName("李明");
user.setPwd("789798");
userMapper.updateById(user);
contextLoads();
}
}
日志自带的 application.yml mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
自动填充 添加插入的时间,改变的时间 实体类 @Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User{
@TableId(type = IdType.AUTO)//自增
private int id;
@ApiModelProperty(value = "姓名",name = "name",dataType = "String",required = true)//解释,名字,类型,是否可为空
private String name;
private String pwd;
// @JSONField(format = "yyyy-MM-dd HH:mm:ss")
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
handler MyMetaObjectHandler.java @Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
//插入时的填充策略
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill.....");
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
//更新时的填充策略
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill.....");
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
乐观锁 实体类新增字段version @Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User{
@TableId(type = IdType.AUTO)//自增
private int id;
@ApiModelProperty(value = "姓名",name = "name",dataType = "String",required = true)//解释,名字,类型,是否可为空
private String name;
private String pwd;
// @JSONField(format = "yyyy-MM-dd HH:mm:ss")
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
@TableField(value="version")
@Version
private Integer version;
}
编写config配置文件 MybatisPlusConfig.java @EnableTransactionManagement
@Configuration
@MapperScan("com.shuo.dao")将扫描器可转移到此
public class MybatisPlusConfig {
@Bean
public OptimisticLockerInterceptor OptimisticLockerInnerInterceptor() {
return new OptimisticLockerInterceptor();//名字容易出错
}
}
乐观锁的测试 //测试乐观锁
@Test
public void testOptimisticLocker(){
User user=userMapper.selectById(1L);
user.setName("小白菜");
user.setPwd("cike567");
System.out.println(user);
userMapper.updateById(user);
}
//乐观锁失败 多线程下失败情况
@Test
public void testOptimisticLocker2(){
User user=userMapper.selectById(1L);
user.setName("小土豆");
user.setPwd("cike567");
System.out.println(user);
User user1 = userMapper.selectById(1L);
user1.setName("小豆芽");
userMapper.updateById(user1);
userMapper.updateById(user);
}
|
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/29 19:22:13- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |