MybatisPlus和mybatis的区别:
MybatisPlus是mybatis的增强版本,只做增强不做修改、简化开发,提高效率;
如何使用mybatisplus:
1、添加mybatisplus依赖:
<!--Mybatis-plus的依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
<!--mysql的依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--lombok的依赖,为了优化实体类,可以不去实现实体类的set()、get()-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>#在使用lombok的前需要去下载一个lombok插件

配置application.properties文件
#数据库的驱动
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#mysql的地址,还有所在时区
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis-plus?serverTimezone=GMT%2b8
#mysql的用户名和地址
spring.datasource.username=root
spring.datasource.password=123
#mybatis的日志、可以看到mybatisPlus的执行语句,参数等详细信息
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
数据库表的信息:

数据库的表数据:

mapper接口:
//通过泛型的student类型找到对应的实体类
@Repository//@Repository这个注解可以消除@Autowired的报错,不添加也没事
/**
*MybatisPlus在mapper接口中继承BaseMapper接口。可以直接使用BaseMapper接口中定义的方法,
*省的自己编写接口,也不需要编写sql语句
*/
public interface StudentMapper extends BaseMapper<student>{
}
public interface BaseMapper<T> extends Mapper<T> {
int insert(T entity);
int deleteById(Serializable id);
int deleteByMap(@Param("cm") Map<String, Object> columnMap);
int delete(@Param("ew") Wrapper<T> wrapper);
int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);
int updateById(@Param("et") T entity);
}实体类
//一个实体类对应一张表,实体类中的类名对应表名,属性对应字段名
//@Date注解可以提供set()、get();
@Data
public class student {
//主键策略:采用雪花算法随机生成id值,java中id为Long类型,mysql中id为BigInt,随机id为19位,所以数据类型必须大
@TableId(type = IdType.ASSIGN_ID)
private Long id;
private String name;
private int age;
//属性填充的注解MetaObjectHandler会解析这个注解,执行不同的方法,进行属性填充
@TableField(fill = FieldFill.INSERT)
private Date creatTime;//creat_time :采用驼峰命名法
//aop,spring把实体类注入到sql语句时,会根据注解,去执行MetaObjectHandle中的方法,和bean后置处理器差不多
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;//update_time
//创建乐观锁的版本号
/*
* 乐观锁的原理:通过版本号来实现,在数据中添加一个版本号;
* 两个修改的线程同时拿到一个version,此时A线程修改了数据并且点击提交,对比两个version相同
* 提交成功,然后version就会+1,然后B线程也修改完了数据,点击提交,对比两个version,
* version不一致,提交失败;
* */
private int version;
//逻辑删除的标记
* 逻辑删除和物理删除
* 物理删除:指的是在数据库的表中删除了该数据;
* 逻辑删除:通过logic标记,默认情况下logic是0;代表存在;删除logic是1;
* 删除的底层逻辑是update
* 查询的底层逻辑是select where logic=0;
* */
@TableLogic
private int logic;
}
MetaObjectHandler实现类的使用:
/*
* 把这个类注册成为spring的组件
* 1.spring扫描到@Component注解,判断这个类是是否是MetaObject的实现类,存放在list集合中
* 2.在创建实体类的时候拿出来,根据注解来判断是否执行重写的方法
* */
@Component
public class MyDateHandler implements MetaObjectHandler {
//插入时,调用下面的方法
@Override
public void insertFill(MetaObject metaObject) {
//往实体类的creatTime属性中填充new Date(),属性
this.setFieldValByName("creatTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
//在更新时执行下面的方法
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}配置类:
乐观锁的实现、分页查询的实现
@Configuration
@MapperScan("com.example.demo.mapper")
public class Config {
/*
* 乐观锁的实现类
* 这个类来实现乐观锁
* */
@Bean
public OptimisticLockerInterceptor createVersionLocker(){
return new OptimisticLockerInterceptor();
}
//这是用来完成分页查询的插件
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
}#Mybatis-plus复杂查询
//按照医院的编号获取医院签名
QueryWrapper<HospitalSet> wrapper = new QueryWrapper<>();
wrapper.eq("hoscode",hoscode);
HospitalSet hospitalSet = baseMapper.selectOne(wrapper);
return hospitalSet.getSignKey();版权声明:本文为m0_60213304原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。