Springboot集成Mybatisplus 笔记

1.项目添加依赖

<dependency>
   	<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.0.1</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

上述几个是必须的

2.配置application.yml

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

server:
  port: 8088

mybatis-plus:
  mapper-locations: classpath:/mapper/*Mapper.xml
  #实体扫描,多个package用逗号或者分号分隔
  type-aliases-package: com.steven.webspider.webspider.entity
  global-config:
    db-config:
      #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
      id-type: id_worker
      #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
      field-strategy: not_empty
      #驼峰下划线转换
      column-underline: true
      #逻辑删除配置(下面3个配置)
      logic-delete-value: 0
      logic-not-delete-value: 1
      db-type: mysql
    refresh: true
  configuration:
    cache-enabled: false

3.准备mysql几张表

sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

set global read_only=0;
create user 'test'@'%' identified by 'test';
t
grant all privileges on test.* to 'test'@'%' identified by 'test';
flush privileges;
USE test;

#-------------------------------------------------------------------------------------------------------

CREATE TABLE user (
	id INT UNSIGNED NOT NULL AUTO_INCREMENT,
	name VARCHAR(50) NOT NULL COMMENT '姓名',
	sfzh VARCHAR(18) COMMENT '身份证号',
	phone_number VARCHAR(20) COMMENT '手机号',
	email VARCHAR(50) COMMENT '邮箱',
	description VARCHAR(500) COMMENT '个人描述',
	username VARCHAR(20) NOT NULL COMMENT '用户名',
	password VARCHAR(10) NOT NULL COMMENT '密码',
	birthday DATETIME NOT NULL COMMENT '生日',
	sex VARCHAR(1) NOT NULL COMMENT '性别',
	create_time DATETIME COMMENT '创建日期',
	update_time DATETIME COMMENT '更新日期',
	sort INT DEFAULT 0 COMMENT '排序',
	del_flag VARCHAR(1) DEFAULT '0' COMMENT '删除标志',
	PRIMARY KEY(id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

CREATE TABLE role (
	id INT UNSIGNED NOT NULL AUTO_INCREMENT,
	name VARCHAR(100) NOT NULL COMMENT '名称',
	create_time DATETIME COMMENT '创建日期',
	update_time DATETIME COMMENT '更新日期',
	sort INT DEFAULT 0 COMMENT '排序',
	del_flag VARCHAR(1) DEFAULT '0' COMMENT '删除标志',
	PRIMARY KEY(id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

CREATE TABLE user_role (
	id INT UNSIGNED NOT NULL AUTO_INCREMENT,
	user_id INT NOT NULL COMMENT '用户id',
	role_id INT NOT NULL COMMENT '角色id',
	create_time DATETIME COMMENT '创建日期',
	update_time DATETIME COMMENT '更新日期',
	sort INT DEFAULT 0 COMMENT '排序',
	del_flag VARCHAR(1) DEFAULT '0' COMMENT '删除标志',
	PRIMARY KEY(id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

CREATE TABLE resource (
	id INT UNSIGNED NOT NULL AUTO_INCREMENT,
	name VARCHAR(100) NOT NULL COMMENT '菜单名称',
	icon VARCHAR(50) COMMENT '标签',
	parent_id INT NOT NULL COMMENT '父id',
	create_time DATETIME COMMENT '创建日期',
	update_time DATETIME COMMENT '更新日期',
	sort INT DEFAULT 0 COMMENT '排序',
	del_flag VARCHAR(1) DEFAULT '0' COMMENT '删除标志',
	PRIMARY KEY(id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

4.编写Mybatis generator代码

public static void main(String[] args) {
        generateCode(new String[]{
                "user", "role", "resource"
        });
    }

    public static void generateCode(String[] tableNames) {
        AutoGenerator mpg = new AutoGenerator();
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        //TODO 每个项目自行调整
        gc.setOutputDir("/Users/shiyifeng/Practise/Web-Project/Mybatisplus/test/src/main/java");
        gc.setFileOverride(true);
        gc.setActiveRecord(true);
        gc.setEnableCache(false);
        gc.setBaseColumnList(true);
        gc.setBaseResultMap(true);
        gc.setAuthor("Steven");
        gc.setMapperName("%sDao");
        gc.setXmlName("%sMapper");
        gc.setServiceName("%sService");
        gc.setServiceImplName("%sServiceImpl");
        gc.setControllerName("%sController");

        mpg.setGlobalConfig(gc);

        // 数据源
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.MYSQL);
//        dsc.setTypeConvert(new MySqlTypeConvert() {
//            @Override
//            public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
//                return super.processTypeConvert(globalConfig, fieldType);
//            }
//        });
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
        dsc.setUrl("jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8");
        mpg.setDataSource(dsc);

        // 策略配置
        StrategyConfig sc = new StrategyConfig();
        //TODO 根据项目做调整
        sc.setNaming(NamingStrategy.underline_to_camel);
        sc.setColumnNaming(NamingStrategy.underline_to_camel);
        sc.setInclude(tableNames);
        sc.setSuperMapperClass("com.baomidou.mybatisplus.core.mapper.BaseMapper");
        mpg.setStrategy(sc);

        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent(null);
        pc.setEntity("com.steven.webspider.webspider.entity");
        pc.setMapper("com.steven.webspider.webspider.dao");
        pc.setXml("com.steven.webspider.webspider.xml");
        pc.setService("com.steven.webspider.webspider.service");
        pc.setServiceImpl("com.steven.webspider.webspider.service.impl");
        pc.setController("com.steven.webspider.webspider.web");
        mpg.setPackageInfo(pc);

        // 执行
        mpg.execute();
        System.out.println("run over!");
    }

代码简单,不做解释。执行main函数

5.测试生成代码

5.1 配置application

@SpringBootApplication
@ComponentScan(basePackages = {
        "com.steven.mybatisplus.config",
        "com.steven.mybatisplus.test.service",
        "com.steven.mybatisplus.test.web"
})
public class MybatisplusApplication {

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

5.2 配置分页处理

@Configuration
//@MapperScan("com.baomidou.springboot.mapper*")//这个注解,作用相当于下面的@Bean MapperScannerConfigurer,2者配置1份即可
public class MybatisPlusConfig {

    /**
     * mybatis-plus分页插件<br>
     * 文档:http://mp.baomidou.com<br>
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        /*
         * 【测试多租户】 SQL 解析处理拦截器<br>
         * 这里固定写成住户 1 实际情况你可以从cookie读取,因此数据看不到 【 麻花藤 】 这条记录( 注意观察 SQL )<br>
         */
//        List<ISqlParser> sqlParserList = new ArrayList<>();
//        TenantSqlParser tenantSqlParser = new TenantSqlParser();
//        tenantSqlParser.setTenantHandler(new TenantHandler() {
//            @Override
//            public Expression getTenantId() {
//                return new LongValue(1L);
//            }
//
//            @Override
//            public String getTenantIdColumn() {
//                return "id";
//            }
//
//            @Override
//            public boolean doTableFilter(String tableName) {
//                // 这里可以判断是否过滤表
//                /*if ("user".equals(tableName)) {
//                    return true;
//                }*/
//                return false;
//            }
//        });
//
//        sqlParserList.add(tenantSqlParser);
//        paginationInterceptor.setSqlParserList(sqlParserList);
//        paginationInterceptor.setSqlParserFilter(new ISqlParserFilter() {
//            @Override
//            public boolean doFilter(MetaObject metaObject) {
//                MappedStatement ms = PluginUtils.getMappedStatement(metaObject);
//                // 过滤自定义查询此时无租户信息约束【 麻花藤 】出现
//                if ("com.baomidou.springboot.mapper.UserMapper.selectListBySQL".equals(ms.getId())) {
//                    return true;
//                }
//                return false;
//            }
//        });
        return paginationInterceptor;
    }

    /**
     * 相当于顶部的:
     * {@code @MapperScan("com.baomidou.springboot.mapper*")}
     * 这里可以扩展,比如使用配置文件来配置扫描Mapper的路径
     */
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
        scannerConfigurer.setBasePackage("com.steven.mybatisplus.test.dao*");
        return scannerConfigurer;
    }

    /**
     * 性能分析拦截器,不建议生产使用
     */
    @Bean
    public PerformanceInterceptor performanceInterceptor(){
        return new PerformanceInterceptor();
    }
}

5.3 Dao新增一个分页获取接口

<Resource> selectPage(Page page, @Param("resource") Resource resource);

5.4 Mapper实现该sql

    <select id="selectPage" parameterType="com.steven.mybatisplus.test.entity.Resource" resultMap="BaseResultMap">
        select
          <include refid="Base_Column_List"/>
        from resource
        <where>
            <if test="resource.name != null">
                name like concat('%',#{resource.name},'%')
            </if>
        </where>
    </select>

5.5 service添加接口并实现

    @Override
    public Page<Resource> selectPage(int page, int rows, Resource resource) {
        Page<Resource> paging = new Page(page, rows);
        paging.setRecords(baseMapper.selectPage(paging, resource));
        return paging;
    }

5.6 Controller实现一个请求

    @Autowired
    private ResourceService resourceService;

    @RequestMapping("/page")
    @ResponseBody
    public Page<Resource> getResource(int page, int rows, Resource resource) {
        return resourceService.selectPage(page, rows, resource);
    }

至此,搭建测试完毕。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值