1.引入依赖
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
2.实体类的操作
@Data //对实体类进行get及set方法,还提供了toString方法,默认为无参构造
@AllArgsConstructor //有参构造 无参构造被取消
@NoArgsConstructor //添加无参构造
#配置日志 日志输出在控制台
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
3.gmt_create(相当于create_time) mgt_modified(相当于update_time)
(1).表中添加以上两个字段
(2).实体中添加两个属性
//数据的添加时间
@TableField(fill = FieldFill.INSERT)
private Date gmtCreate;
//数据的最后修改时间
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date gmtModified;
(3).处理自动填充,定义处理器
@Component //一定不要忘记交给spring工厂管理
public class MyMetaObjectHandler implements MetaObjectHandler {
//数据添加是: 自动填充策略
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("gmtCreate",new Date(),metaObject);
this.setFieldValByName("gmtModified",new Date(),metaObject);
}
//数据修改时填充策略
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("gmtModified",new Date(),metaObject);
}
}
4..添加操作:添加时不指定id,id会自动生成 在实体类对其进行添加注解
(1)mybatis-plus底层默认使用雪花算法进行主键的生成,保证的是全球id值唯一
@TableId(type = IdType.ID_WORKER): 默认的方式使用雪花算法生成。
@TableId(type = IdType.AUTO): 主键自增长,必须表设置id为自增长,不建议
@TableId(type = IdType.NONE): 不设置主键生成策略
@TableId(type = IdType.INPUT): 必须手动输入主键
@TableId(type = IdType.ID_WORKER_STR): string形式表示雪花算法
#设置主键生成策略 全局配置
mybatis-plus.global-config.db-config.id-type=id_worker
(2)@TableId(type = IdType.UUID): 通过uuid生成主键-String类型
5.删除操作:
(1)物理删除: 直接删除表中的数据
//根据id删除1条数据
userMapper.deleteById(id);
//根据id批量删除
userMapper.deleteBatchIds(Arrays.asList(ids))
(2)逻辑删除: 没有从表中删除,而是通过一个字段让它失效,查询时不进行查询。
作用:可以用于管理员查看删除记录,防止数据的丢失,类似于回收站。
1.表中添加字段: deleted int 类型 默认值0 1代表这条数据已经进行了逻辑删除 长度:1
2.实体类中添加属性:
@TableLogic //逻辑删除字段
private Integer deleted;
3.配置插件:
//逻辑删除插件
@Bean
public ISqlInjector sqlInjector(){
return new LogicSqlInjector();
}
4.配置文件的设置:
#设置逻辑删除
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
6.修改操作:为动态sql,输什么值对什么值进行修改
//根据id修改
userMapper.updateById(user);
7.查询操作:
//null代表 QueryWrapper
1.查所有
userMapper.selectBatchIds(Arrays.asList(ids)) //多id查询
userDao.selectList(null); //查所有
2.查单个
userMapper.selectById(id);
3.分页查询
//(1)配置插件
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
//(2)代码
Page<User> page = new Page<>(第几页,每页展示的条数);
selectPage(page,null); //对其结果可以进行遍历
4.条件查询-条件构造器
QueryWrapper<实体类名> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("字段名","属性值");//查询姓名为xxx
queryWrapper.isNotNull("字段名");//查询字段不为空
queryWrapper.ge("字段名","值");//查询值大于或等于该值
queryWrapper.between("字段名",值1,值2);//查询之间的值
queryWrapper.like("字段名","值");//模糊查询
8.代码自动生成器
通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率
1.引入依赖
<!--代码生成器依赖-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
2.public class TestCode {
public static void main(String[] args) {
// 创建一个代码自动生成器
AutoGenerator code = new AutoGenerator();
// 配置策略
// 全局的设置
GlobalConfig config = new GlobalConfig();
// 动态获取当前项目所在路径路径
String projectPath = System.getProperty("user.dir");
//生成后的代码放到哪里
config.setOutputDir(projectPath+"/项目名/src/main/java");
// 设置作者
config.setAuthor("2107class");
// 生成后是否自动打开资源管理器
config.setOpen(false);
// 如果出现重名的类 是否覆盖已有的内容
config.setFileOverride(false);
// id的策略 根据个人意愿修改
config.setIdType(IdType.ID_WORKER);
// 日期的类型 实力类中使用java.util.date类型
config.setDateType(DateType.ONLY_DATE);
// 去掉接口前面的I
config.setServiceName("%sService");
// 全局的设置 配置给代码自动生成器对象
code.setGlobalConfig(config);
// 数据源参数
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL);
dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/数据库名");
dataSourceConfig.setDriverName("com.mysql.jdbc.Driver");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("密码");
// 将数据源的配置 配置给代码自动生成器对象
code.setDataSource(dataSourceConfig);
// 配置包的策略
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("设置包名");
packageConfig.setEntity("entity");
packageConfig.setMapper("mapper");
packageConfig.setService("service");
packageConfig.setController("controller");
code.setPackageInfo(packageConfig);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setInclude("表名"); //要映射的表名
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true);//实体类自动加lombok注解
strategy.setLogicDeleteFieldName("deleted"); //逻辑删除字段
// 自动填充策略
TableFill gmt_create = new TableFill("gmt_create", FieldFill.INSERT);
TableFill gmt_modified = new TableFill("gmt_modified", FieldFill.INSERT_UPDATE);
ArrayList<TableFill> list = new ArrayList<>();
list.add(gmt_create);
list.add(gmt_modified);
strategy.setTableFillList(list);
code.setStrategy(strategy);
code.execute();
}