spring boot 整合mybatis-plus+代码自动生成快速启动

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


创建springboot

在这里插入图片描述

导入mybaits-plus包

    <!-- MP 核心库 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <!--MP代码自动生成工具类-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.3.0</version>
        </dependency>

        <!-- 模板 velocity Mybatis Plus 代码生成器需要 -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
            <version>1.7</version>
        </dependency>

yml配置文件

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/hello?
useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5

代碼生成器

package com.example.hello05;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;

public class CodeGenerator {
    @Test
    public void genCode() {
        //数据库前缀
        String prefix = "";
        //业务模块名称
        String moduleName = "hello05";//模块名
        String sqlName = "hello";//数据库名称


        // 1、创建代码生成器
        AutoGenerator mpg = new AutoGenerator();

        // 2、全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");//获取相对路径
        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setAuthor("fzy");//设置创始人
        gc.setOpen(false); //生成后是否打开资源管理器


        //重要
        gc.setFileOverride(false); //重新生成时文件是否覆盖

        gc.setServiceName("%sService");	//去掉Service接口的首字母I
        gc.setIdType(IdType.AUTO); //主键策略
        gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型
        gc.setSwagger2(false);//开启Swagger2模式 開了 需要導入Swagger2 的兩個包
        mpg.setGlobalConfig(gc);


        // 3、数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://127.0.0.1:3306/" + prefix + "" + sqlName + "?serverTimezone=GMT%2B8");
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
        dsc.setDbType(DbType.MYSQL);
        mpg.setDataSource(dsc);

        // 4、包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName(moduleName); //模块名
        pc.setParent("com.example");
        pc.setController("controller");
        pc.setEntity("entity");
        pc.setService("service");
        pc.setMapper("mapper");
        mpg.setPackageInfo(pc);

        // 5、策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
        strategy.setTablePrefix(moduleName + "_");//设置表前缀不生成
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
        strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作
        strategy.setLogicDeleteFieldName("deleted");//逻辑删除字段名
        strategy.setEntityBooleanColumnRemoveIsPrefix(true);//去掉布尔值的is_前缀

        //自动填充
        TableFill gmtCreate = new TableFill("createtime", FieldFill.INSERT);
        TableFill gmtModified = new TableFill("updatetime", FieldFill.INSERT_UPDATE);
        ArrayList<TableFill> tableFills = new ArrayList<>();
        tableFills.add(gmtCreate);
        tableFills.add(gmtModified);
        strategy.setTableFillList(tableFills);

        strategy.setRestControllerStyle(true); //restful api风格控制器
        strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符
        mpg.setStrategy(strategy);


        //设置BaseEntity
//        strategy.setSuperEntityClass("com.atguigu.guli.service.base.model.BaseEntity");
 填写BaseEntity中的公共字段
//        strategy.setSuperEntityColumns("id", "gmt_create", "gmt_modified");
        // 6、执行
        mpg.execute();
    }
}

添加配置读取到非resources 文件(自动生成的xml在项目内)


 <resources>
            <resource>
                <directory>${basedir}/src/main/webapp</directory>
                <!-- 注意此次必须要放在此目录下才能被访问到 -->
                <targetPath>META-INF/resources</targetPath>
                <includes>
                    <include>**/**</include>
                </includes>
            </resource>
            <resource>
                <directory>${basedir}/src/main/resources</directory>
                <includes>
                    <include>**/*.yml</include>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                    <include>**/*.pem</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/**/*.xml</include>
                </includes>
            </resource>
        </resources>

启动类添加扫描器

package com.example.hello05;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan({"com.example.hello05.mapper"})//包扫描器 去yml配置好像不管用,这和mybatis刚好相反
public class Hello05Application {

    public static void main(String[] args) {
        SpringApplication.run(Hello05Application.class, args);
    }

}

设置了时间不为空的 需要配置下不然修改 添加会出问题但查询删除不会

package com.example.hello05.confing;


import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {

        this.setFieldValByName("createtime",new Date(),metaObject);
        this.setFieldValByName("updatetime",new Date(),metaObject);
// 如果deleted在数据库中是tinyint型那么值要等true用 0 会报错  这
        //this.setFieldValByName("deleted",0,metaObject);
         this.setFieldValByName("deleted",true,metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updatetime",new Date(),metaObject);

    }

}

前端控制器 測試

package com.example.hello05.controller;


import com.example.hello05.entity.Test01;
import com.example.hello05.mapper.Test01Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author fzy
 * @since 2022-03-30
 */
@RestController
@RequestMapping("/hello05/test01")
public class Test01Controller {
    @Autowired
    Test01Mapper test01Mapper;

    @GetMapping("/ss")
    public String ss (int id){
        Test01 test01 = test01Mapper.selectById(id);

        System.out.println( test01.toString());
        return "查詢成功";
    }

}

简单的crud

@RestController
@RequestMapping("/hello05/test01")
public class Test01Controller {
    @Autowired
    Test01Mapper test01Mapper;
//按id查
    @GetMapping("/ss")
    public String ss (int id){
        Test01 test01 = test01Mapper.selectById(id);

        System.out.println( test01.toString());
        return "查詢成功";
    }
    //按id刪除
    @GetMapping("/ss2")
    public String ss2 (Long id){
        int i = test01Mapper.deleteById(id);


        System.out.println( i);
        return "删除成功";
    }

    //按id修改
    @GetMapping("/ss3")
    public String ss3 (Long id){
        Test01 user = new Test01();
        user.setId(id);

        user.setName("ppxx");
        int i = test01Mapper.updateById(user);

        System.out.println( user.toString());
        return "修改成功";
    }

    //查出name=777的 所有数据
    @GetMapping("/ss4")
    public String ss4 (String name){

        QueryWrapper<Test01> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("name", name);
        List<Test01> users = test01Mapper.selectList(queryWrapper);
        users.forEach(Test01 -> System.out.println(users));


        System.out.println( users.toString());
        return "成功查出name="+name+"数据";
    }

    /**
     * 分页查询,selectPage 可以传入两个参数
     *  参数 1:Page 对象,包含了分页信息,其构造方法参数
     *      参数 1:当前页,从 1 开始
     *      参数 2:页面容量
     *  参数 2:QueryWrapper 对象,设置搜索的条件
     * 结果:IPage 抽象类的子类对象,包含了一下信息:
     *  1. 当前页
     *  2. 总页数
     *  3. 总记录数
     *  4. 页面容量
     *  5. 当前页的记录
     */
    @GetMapping("/ss5")
    public String ss5 (int a ,int b){
        IPage iPage = test01Mapper.selectPage(new Page(a, b), null);
        System.out.println("current page: " + iPage.getCurrent());
        System.out.println("total pages: " + iPage.getPages());
        System.out.println("total records: " + iPage.getTotal());
        System.out.println("page size: " + iPage.getSize());
        System.out.println("records: " + iPage.getRecords());
        return "成功查出分页数据";
    }

    @GetMapping("/ss6")
    public String ss6 (Test01 user){
        test01Mapper.insert(user);
        return "成功添加數據";
    }

}



关于项目中创建web前端页面

在这里插入图片描述
其中static 里的index页面 可以直接通过http://localhost:8080/ 访问到
static 里的logo 控制器返回路径也访问不到

templates 如果项目导入模板引擎thymeleaf那么里面的页面可以通过控制器访问到

@Controller
public class controller {

    @GetMapping("/index")
    public String index() {

        System.out.println("******客户连接数****");

        return "index";
    }
     @GetMapping("/logo")
    public String login() {

        System.out.println("******客户连接数****");

        return "logo";
    }
}
  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

如果页面需要使用thymeleaf 语法那么
html标签改为

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>first01</title>
</head>
<body>
<div>123tem</div>

</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虚构的乌托邦

如果可以请打赏鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值