MyBatisPlus简单入门

简介: 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
{
    @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);
    }
}

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。

注意:可以重复生成,是覆盖操作。

相关文章
|
6月前
|
SQL Java 数据库连接
MyBatis 框架入门理论与实践
MyBatis 框架入门理论与实践
72 6
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
280 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
5月前
|
XML Java 数据库连接
MyBatis入门——MyBatis XML配置文件(3)
MyBatis入门——MyBatis XML配置文件(3)
69 6
|
5月前
|
Java 关系型数据库 数据库连接
MyBatis入门(1)
MyBatis入门(1)
68 2
|
1月前
|
SQL Java 数据库连接
Mybatis入门(select标签)
这篇文章介绍了Mybatis中`select`标签的基本用法及其相关属性,并通过示例展示了如何配置和执行SQL查询语句。
39 0
Mybatis入门(select标签)
|
3月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
6月前
|
Java 数据库连接 测试技术
MyBatis-Plus入门
MyBatis-Plus入门
|
3月前
|
SQL Java 数据库连接
Spring Boot联手MyBatis,打造开发利器:从入门到精通,实战教程带你飞越编程高峰!
【8月更文挑战第29天】Spring Boot与MyBatis分别是Java快速开发和持久层框架的优秀代表。本文通过整合Spring Boot与MyBatis,展示了如何在项目中添加相关依赖、配置数据源及MyBatis,并通过实战示例介绍了实体类、Mapper接口及Controller的创建过程。通过本文,你将学会如何利用这两款工具提高开发效率,实现数据的增删查改等复杂操作,为实际项目开发提供有力支持。
167 0
|
5月前
|
Java 关系型数据库 数据库连接
技术好文共享:第一讲mybatis入门知识
技术好文共享:第一讲mybatis入门知识
34 6
|
5月前
|
Java 关系型数据库 MySQL
Mybatis入门之在基于Springboot的框架下拿到MySQL中数据
Mybatis入门之在基于Springboot的框架下拿到MySQL中数据
48 4