MyBatisPlus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,完全去SQL化,封装好了大量的CRUD操作。甚至吧CRUD操作封装到了Service层,可以直接在Controller调用现成的CRUD服务层,极度舒适省心。
局限:只支持简单的CRUD操作,不支持多表操作(join、union、子查询),不支持GroupBy和各种函数。
新建SpringBoot工程。引入依赖
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.4.1version>
dependency>
@Repository
public interface EmployeePlusMapper extends BaseMapper<Employee>
{
}
@Service
public class EmployeePlusServiceImpl extends ServiceImpl<EmployeePlusMapper, Employee>
{
}
public class Employee
{
@TableId(value = "id",type = IdType.AUTO)
private Integer id;
}
@RestController
public class EmployeePlusController
{
@Autowired
private EmployeePlusServiceImpl employeeService;
@RequestMapping(value = "/emp")
public Object handle1(String op,Integer id,String lastname,String gender,String email){
//封装数据模型
Employee employee = new Employee(id, lastname, gender, email);
switch (op){
case "select": if (id == null){
return "必须传入员工id!";
}else {
Employee e = employeeService.getById(id);
return e == null ? "查无此人!" : e;
}
case "insert" : employeeService.save(employee);
return "操作完成!";
case "update": if (id == null){
return "必须传入员工id!";
}else {
employeeService.updateById(employee);
return "操作完成!";
}
case "delete": if (id == null){
return "必须传入员工id!";
}else {
employeeService.removeById(id);
return "操作完成!";
}
default: return "请正确操作";
}
}
@RequestMapping(value = "/getAllEmp")
public Object handle2(){
List<Employee> all = employeeService.list();
return all;
}
}
现在希望对id>3的男性员工执行查询和更新删除操作如下:
@SpringBootTest
public class MyTest
{
@Autowired
EmployeeService employeeService;
@Test
public void testQuery(){
//指定查询条件: id>2的男性员工
QueryWrapper<Employee> wrapper = new QueryWrapper<Employee>().eq("gender", "male").gt("id", 2);
//根据条件查询
List<Employee> list = employeeService.list(wrapper);
//指定更新条件
UpdateWrapper<Employee> updateWrapper = new UpdateWrapper<Employee>().eq("gender", "male").gt("id", 4).set("gender", "female");
//根据条件更新性别为女性
employeeService.update(updateWrapper);
//根据条件删除
employeeService.remove(wrapper);
}
}
虽然MyBatisPlus已经节省了sql编写的大部分工作,但是当面对几十上百个的处理的时候,仍然有大量的类模块要写,其中最大的工作量就是实体类的编写,如果手工还容易出错。
所以MyBatis-Plus还推出了代码生成工具https://github.com/baomidou/generator。
在pom.xml文件中添加代码生成工具
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
编写生成器代码
public class MyGenerator
{
public static void main(String[] args) {
//指定为哪些表生成
String[] tables={ "activity_info","activity_sku" };
FastAutoGenerator.create("jdbc:mysql://hadoop102:3306/gmall","root","000000")
.globalConfig(builder -> {
builder.author("atguigu") //作者
.outputDir("D:\\repo\\221109\\mybatisplusdemo\\src\\main\\java") //输出路径(写到java目录)
.commentDate("yyyy-MM-dd")
.dateType(DateType.ONLY_DATE); //选择实体类中的日期类型 ,Date or LocalDatetime
})
.packageConfig(builder -> { //各个package 名称
builder.parent("com.atguigu.mybatisplus")
//.moduleName("governance")
.entity("bean")
.service("service")
.serviceImpl("service.impl")
.controller("controller")
.mapper("mapper");
})
.strategyConfig(builder -> {
builder.addInclude(tables)
.serviceBuilder()
.enableFileOverride() //生成代码覆盖已有文件 谨慎开启
.formatServiceFileName("%sService") //类后缀
.formatServiceImplFileName("%sServiceImpl") //类后缀
.entityBuilder()
.enableFileOverride()
.enableLombok() //允许使用lombok
.controllerBuilder()
.enableFileOverride()
.formatFileName("%sController") //类后缀
.enableRestStyle() //生成@RestController 否则是@Controller
.mapperBuilder()
.enableFileOverride()
//生成通用的resultMap 的xml映射
.enableBaseResultMap() //生成xml映射
.superClass(BaseMapper.class) //标配
.formatMapperFileName("%sMapper") //类后缀
.mapperAnnotation(Mapper.class) ; //生成代码Mapper上自带@Mapper
})
.templateConfig(
builder -> {
// 实体类使用我们自定义模板
builder.entity("templates/myentity.java");
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
}
以上生成代码主函数中有设计自定义模块。从idea中的jar包目录中找到jar包的模板。
拷贝到Resource/template目录下重命名为myentity.java.ftl,并吧第29,30行的修改
修改前:
…
<#if entityLombokModel>
@Getter
@Setter
…
修改后:
……
<#if entityLombokModel>
@Data
……
之后重新运行生成器的代码,就可以根据自己的模板生成Bean。
注意:可以重复生成,是覆盖操作。