行业知识
mybatis-plus整合spring boot极速入门
使���mybatis-plus整合spring boot,接下来我来操作一番。
一,创建spring boot工程
勾选下面的选项
紧接着,还有springboot和依赖我们需要选。
这样我们就创建好了我们的spring boot,项目。
简化目录结构:
我们发现,这些零碎文件很多,占时用不到的,就先删除。
看看简化后的,项目目录结构。
修改boot项目版本:
启动项目:
找到启动来,把我们的项目跑起来。
可以看到项目是正常启动的
二,添加依赖
添加mybatis-plus依赖:
com.baomidou mybatis-plus-boot-starter 3.5.5
添加mysql依赖:
mysql mysql-connector-java 8.0.28
yml文件的配置:
把一properties结尾的文件,改成yml结尾的格式
改后的效果:
我添加了下面的配置:
#项目的端口server: port: 8080#mysql配置spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/mp_db?serverTimezone=UTC username: root password: root#mabatis-plus的配置mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印sql日志 map-underscore-to-camel-case: true # 是否开启驼峰命名转换
运行项目:
项目还是正常启动的
三,创建各种业务层
我们把mapper,service,controller,utils都创建好,看看目录结构。
Emp实体类
代码:
@Datapublic class Emp { private Long id; // 员工ID private String name; // 员工姓名 private String password; // 密码 private Integer age; // 年龄 private String tel; // 电话号码} mapper接口:
代码:
@Mapperpublic interface EmpMapper extends BaseMapper {} EmpService接口:
代码:
public interface EmpSerevice extends IService {} EmpServiceImpl:实现类
代码:
@Servicepublic class EmpServiceImpl extends ServiceImpl implements EmpSerevice{} EmpController类:
代码:
@RestController@RequestMapping("/emps")public class EmpController {} 新建一个测试类:
代码:
@Slf4j@SpringBootTestpublic class TestMp {} 四,测试mybatis-plus的service层接口:
测试查询:
mp的service提供的查询方法:
getById 通常用于表示根据ID获取数据的方法 。
getOne 通常用于查询符合条件的单条记录。
getMap 根据wrapper条件,可以查询多条数据。
查询常用的拼接关系条件:
通常是写 wrapper里面的:
就比如 >, >=, builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> { int typeCode = metaInfo.getJdbcType().TYPE_CODE; if (typeCode == Types.SMALLINT) { // 自定义类型转换 return DbColumnType.INTEGER; } return typeRegistry.getColumnType(metaInfo); })) .packageConfig(builder -> { builder.parent("com.sdep") // 设置父包名 .controller("controller") .entity("domain.po") // 设置实体类包名 .service("service") // 设置service包名 .serviceImpl("service.impl") // 设置service实现类包名 .mapper("mapper") // 设置mapper包名 //.moduleName("address") // 设置父包模块名 .pathInfo(Collections.singletonMap(OutputFile.xml, "D:\\cloud-java\\allcode2\\gen\\mapper")); // 设置mapperXml生成路径 }) .strategyConfig(builder -> { builder.addInclude("address") // 设置需要生成的表名 .addTablePrefix("t_", "c_") // 设置过滤表前缀 .controllerBuilder().enableRestStyle() // 开启restful风格控制器 .enableFileOverride() // 覆盖已生成文件 .entityBuilder().enableLombok(); // 开启lombok模型,默认是false }) .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 .execute(); }
将生成的实体、Mapper、Service、Controller等对应的类放置到项目中。即可
4,点击运行:
5,查看生成的目录:
完整版的代码生成器,代码:
public class MybatisPlusGeneratorTest { public static void main(String[] args) { String url = "jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true"; FastAutoGenerator.create(url , "root", "root") .globalConfig(builder -> { builder.author("JBL") // 设置作者 .enableSwagger() // 开启 swagger 模式 .outputDir("D:\itcast\generatedCode"); // 指定输出目录 }) .dataSourceConfig(builder -> builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> { int typeCode = metaInfo.getJdbcType().TYPE_CODE; if (typeCode == Types.SMALLINT) { // 自定义类型转换 return DbColumnType.INTEGER; } return typeRegistry.getColumnType(metaInfo); })) .packageConfig(builder -> { builder.parent("com.itheima.mp") // 设置父包名 .controller("controller") .entity("domain.po") // 设置实体类包名 .service("service") // 设置service包名 .serviceImpl("service.impl") // 设置service实现类包名 .mapper("mapper") // 设置mapper包名 //.moduleName("address") // 设置父包模块名 .pathInfo(Collections.singletonMap(OutputFile.xml, "D:\itcast\generatedCode\mapper")); // 设置mapperXml生成路径 }) .strategyConfig(builder -> { builder.addInclude("address") // 设置需要生成的表名 .addTablePrefix("t_", "c_") // 设置过滤表前缀 .controllerBuilder().enableRestStyle() // 开启restful风格控制器 .enableFileOverride() // 覆盖已生成文件 .entityBuilder().enableLombok(); // 开启lombok模型,默认是false }) .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 .execute(); }} 十,静态工具类:
使用Db实现如下需求:
1、根据id查询用户;
2、查询名字中包含o且年龄大于8岁的;
3、更新用户名为tom的年龄为18
测试根据ID查询:
代码:
@SpringBootTestpublic class DbTest { @Test @DisplayName("根据id查询用户") public void testById(){ Emp emp = Db.getById(1L, Emp.class); System.out.println(emp); }} 结果:
测试查询名字中包含j且年龄大于8岁的
代码:
@Test @DisplayName("测试查询名字中包含j且年龄大于8岁的") void testWrapper(){ //查询参数设置 List empList = Db.lambdaQuery(Emp.class).like(Emp::getName, "j") .ge(Emp::getAge, 8) .list(); //遍历 empList.forEach(emp -> System.out.println(emp)); } 结果:
更新用户名为tom的年龄为18
代码:
@Test @DisplayName("更新用户名为tom的年龄为18") void testUpdate(){ Db.lambdaUpdate(Emp.class) .set(Emp::getAge, 18) .eq(Emp::getName, "tom") .update(); } 结果: