当前位置: 首页 > news >正文

MyBatisPlus简单入门

1、简单介绍MyBatisPlus

MyBatisPlus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,完全去SQL化,封装好了大量的CRUD操作。甚至吧CRUD操作封装到了Service层,可以直接在Controller调用现成的CRUD服务层,极度舒适省心。
局限:只支持简单的CRUD操作,不支持多表操作(join、union、子查询),不支持GroupBy和各种函数。

2 初步使用

2.1 引入依赖

新建SpringBoot工程。引入依赖

 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version></dependency>

2.2 增加符合MyBatisPlus规范的Mapper和Service

@Repository
public interface EmployeePlusMapper extends BaseMapper<Employee>
{
}
@Service
public class EmployeePlusServiceImpl extends ServiceImpl<EmployeePlusMapper, Employee>
{}

2.3 指定Bean的主键属性为自增

public class Employee
{@TableId(value = "id",type = IdType.AUTO)private Integer id;
}

2.4 修改Controller

@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;}
}

3、按条件查询

现在希望对id>3的男性员工执行查询和更新删除操作如下:

@SpringBootTest
public class MyTest
{@AutowiredEmployeeService employeeService;@Testpublic 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);}
}

4、MyBatisPlus模板生成器

虽然MyBatisPlus已经节省了sql编写的大部分工作,但是当面对几十上百个的处理的时候,仍然有大量的类模块要写,其中最大的工作量就是实体类的编写,如果手工还容易出错。
所以MyBatis-Plus还推出了代码生成工具https://github.com/baomidou/generator。

4.1 添加依赖

在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>

4.2 编写生成器

编写生成器代码

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();}}

4.3 自定义模块

以上生成代码主函数中有设计自定义模块。从idea中的jar包目录中找到jar包的模板。
在这里插入图片描述
拷贝到Resource/template目录下重命名为myentity.java.ftl,并吧第29,30行的修改
修改前:

<#if entityLombokModel>
@Getter
@Setter

修改后:

……
<#if entityLombokModel>
@Data
……

之后重新运行生成器的代码,就可以根据自己的模板生成Bean。
注意:可以重复生成,是覆盖操作。

http://www.lryc.cn/news/149678.html

相关文章:

  • 神经网络入门
  • 【面试经典150题】多数元素
  • c#垃圾回收(Garbage Collection)
  • vue 基于element-plus el-button封装按钮组件
  • smbus只能再python2.7下运行?不能再python3.8下运行吗?
  • python中is和==的区别
  • Viobot回环使用
  • React钩子函数之forward结合useImperativeHandle钩子的基本使用
  • c++中移动语义和完美转发
  • 【linux命令讲解大全】040. 文件操作:使用touch命令创建和更新文件
  • Redis之MoreKey问题及Scan命令解读
  • QA工具开发流程
  • JSON.toJSONString首字母大小写问题
  • ant-vue1.78版a-auto-complete表单自动搜索返回列表中的关键字标红
  • Elasticsearch 优化
  • spring boot的自动装配原理
  • 走进低代码平台| iVX-困境之中如何突破传统
  • 【UIPickerView案例03-点餐系统之随机点餐 Objective-C语言】
  • 论文阅读_扩散模型_SDXL
  • 云原生Kubernetes:二进制部署K8S多Master架构(三)
  • 任意文件读取和下载
  • mysql怎么查指定表的自增id?
  • 【C++设计模式】单一职责原则
  • Windows docker desktop 基于HyperV的镜像文件迁移到D盘
  • LM-INFINITE: SIMPLE ON-THE-FLY LENGTH GENERALIZATION FOR LARGE LANGUAGE MODELS
  • ShardingSphere——压测实战
  • 二分图-染色法-dfs
  • SQL优化案例教程0基础(小白必看)
  • webpack(一)模块化
  • 基于Java+SpringBoot+Vue前后端分离人力资源管理系统设计和实现