SpringBoot实践:集成Mybatis

Stella981
• 阅读 682

第一步:在pom文件中加入依赖关系

com.baomidou mybatisplus-spring-boot-starter ${mybatisplus-spring-boot-starter.version} com.baomidou mybatis-plus ${mybatisplus.version} org.apache.velocity velocity 1.7

第二步:加入核心配置文件,这里面的paginationInterceptor方法代码我注释了,因为我用不到多租户功能,@MapperScan("com.ylw.shop.mapper*")记住这个一定要改成你的mapper类包地址

import com.baomidou.mybatisplus.plugins.PerformanceInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;

@Configuration @MapperScan("com.ylw.shop.mapper*") public class MybatisPlusConfig {

/\*\*
 \* mybatis-plus SQL执行效率插件【生产环境可以关闭】
 \*/
@Bean
public PerformanceInterceptor performanceInterceptor() {
    return new PerformanceInterceptor();
}

/\*\*
 \* mybatis-plus分页插件<br>
 \* 文档:http://mp.baomidou.com<br>
 \*/

// @Bean // public PaginationInterceptor paginationInterceptor() { // PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); // paginationInterceptor.setLocalPage(true);// 开启 PageHelper 的支持 // /* // * 【测试多租户】 SQL 解析处理拦截器
// * 这里固定写成住户 1 实际情况你可以从cookie读取,因此数据看不到 【 麻花藤 】 这条记录( 注意观察 SQL )
// */ // List sqlParserList = new ArrayList<>(); // TenantSqlParser tenantSqlParser = new TenantSqlParser(); // tenantSqlParser.setTenantHandler(new TenantHandler() { // @Override // public Expression getTenantId() { // return new LongValue(1L); // } // // @Override // public String getTenantIdColumn() { // return "tenant_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; // }

}

第三步:在application.properties核心配置文件中加入Mybatis-Plus配置

mybatis-plus.mapper-locations=classpath:/mapper/*Mapper.xml 这句是告诉框架你的mapper.xml位置

#mybatis plus mybatis-plus.mapper-locations=classpath:/mapper/*Mapper.xml #实体扫描,多个package用逗号或者分号分隔 mybatis-plus.typeAliasesPackage=com.ylw.shop.entity #mybatis-plus.typeEnumsPackage=com.baomidou.springboot.entity.enums #主键类型

0:"数据库ID自增"

1:"用户输入ID"

2:"全局唯一ID (数字类型唯一ID)"

3:"全局唯一ID UUID"

mybatis-plus.global-config.id-type=0 #字段策略

0:"忽略判断"

1:"非 NULL 判断"

2:"非空判断"

mybatis-plus.global-config.field-strategy=0 #驼峰下划线转换 mybatis-plus.global-config.db-column-underline=true #刷新mapper 调试神器 mybatis-plus.global-config.refresh-mapper=true #数据库大写下划线转换 #capital-mode=true #序列接口实现类配置 #key-generator=com.baomidou.springboot.xxx #逻辑删除配置 mybatis-plus.global-config.logic-delete-value=0 mybatis-plus.global-config.logic-not-delete-value=1 #自定义填充策略接口实现 #meta-object-handler=com.baomidou.springboot.xxx #自定义SQL注入器 #sql-injector=com.baomidou.springboot.xxx mybatis-plus.configuration.map-underscore-to-camel-case=true mybatis-plus.configuration.cache-enabled=false

第四步:在application.properties核心配置文件中加入数据库配置

spring.datasource.url=jdbc:mysql://localhost:3306/yzshop?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.druid.initial-size=1 spring.datasource.druid.min-idle=1 spring.datasource.druid.max-active=20 spring.datasource.druid.test-on-borrow=true spring.datasource.druid.stat-view-servlet.allow=true

第五步:创建代码生成器类,指定setOutputDir输出目录、数据库配置、包名后执行main方法,然后把生成的类放入指定的包下

package com.ylw.shop.util;

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.converts.MySqlTypeConvert; import com.baomidou.mybatisplus.generator.config.rules.DbColumnType; import com.baomidou.mybatisplus.generator.config.rules.DbType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

/** *

* 代码生成器演示 *

*/ public class MpGeneratorUtil {

/\*\*
 \* <p>
 \* MySQL 生成演示
 \* </p>
 \*/
public static void main(String\[\] args) {
    AutoGenerator mpg = new AutoGenerator();

    // 全局配置
    GlobalConfig gc = new GlobalConfig();

    gc.setOutputDir("/Users/xiaojianyu/IdeaProjects/spring-boot-test/generator/output");
    gc.setFileOverride(true);
    gc.setActiveRecord(true);
    gc.setEnableCache(false);// XML 二级缓存
    gc.setBaseResultMap(true);// XML ResultMap
    gc.setBaseColumnList(false);// XML columList
    gc.setAuthor("xiaojianyu");

    // 自定义文件命名,注意 %s 会自动填充表实体属性!
    // gc.setMapperName("%sDao");
    // gc.setXmlName("%sDao");
    // gc.setServiceName("MP%sService");
    // gc.setServiceImplName("%sServiceDiy");
    // gc.setControllerName("%sAction");
    mpg.setGlobalConfig(gc);

    // 数据源配置
    DataSourceConfig dsc = new DataSourceConfig();
    dsc.setDbType(DbType.MYSQL);
    dsc.setTypeConvert(new MySqlTypeConvert() {
        // 自定义数据库表字段类型转换【可选】
        @Override
        public DbColumnType processTypeConvert(String fieldType) {
            System.out.println("转换类型:" + fieldType);
            // 注意!!processTypeConvert 存在默认类型转换,如果不是你要的效果请自定义返回、非如下直接返回。
            return super.processTypeConvert(fieldType);
        }
    });
    dsc.setDriverName("com.mysql.jdbc.Driver");
    dsc.setUsername("root");
    dsc.setPassword("root");
    dsc.setUrl("jdbc:mysql://127.0.0.1:3306/yzshop?characterEncoding=utf8");
    mpg.setDataSource(dsc);

    // 策略配置
    StrategyConfig strategy = new StrategyConfig();
    // strategy.setCapitalMode(true);// 全局大写命名 ORACLE 注意

// strategy.setTablePrefix(new String[] { "tlog_", "tsys_" });// 此处可以修改为您的表前缀 strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略 // strategy.setInclude(new String[] { "user" }); // 需要生成的表 // strategy.setExclude(new String[]{"test"}); // 排除生成的表 // 自定义实体父类 // strategy.setSuperEntityClass("com.ylw.shop.SuperMapper"); // 自定义实体,公共字段 // strategy.setSuperEntityColumns(new String[] { "test_id", "age" }); // 自定义 mapper 父类 // strategy.setSuperMapperClass("com.baomidou.demo.TestMapper"); // 自定义 service 父类 // strategy.setSuperServiceClass("com.baomidou.demo.TestService"); // 自定义 service 实现类父类 // strategy.setSuperServiceImplClass("com.baomidou.demo.TestServiceImpl"); // 自定义 controller 父类 // strategy.setSuperControllerClass("com.baomidou.demo.TestController"); // 【实体】是否生成字段常量(默认 false) // public static final String ID = "test_id"; // strategy.setEntityColumnConstant(true); // 【实体】是否为构建者模型(默认 false) // public User setName(String name) {this.name = name; return this;} // strategy.setEntityBuilderModel(true); mpg.setStrategy(strategy);

    // 包配置
    PackageConfig pc = new PackageConfig();
    pc.setParent("com.ylw.shop");
    pc.setEntity("entity");
    pc.setMapper("mapper");
    pc.setService("service");
    pc.setServiceImpl("service.impl");
    pc.setController("controller");
    pc.setXml("xml");
    mpg.setPackageInfo(pc);

    // 关闭默认 xml 生成,调整生成 至 根目录

// TemplateConfig tc = new TemplateConfig(); // tc.setXml(null); // mpg.setTemplate(tc);

    // 执行生成
    mpg.execute();
}

}

第六步:使用方式,在你的Dao层注入生成的mapper类就可以使用框架提供的方法了

/** * banner 管理类 */ @Component public class BannerManager {

@Resource
private YzBannerMapper yzBannerMapper;

public Optional<List<YzBanner>> queryBannerList(BannerDisplayType displayType) {
    Date now = new Date();
    List<YzBanner> banners = yzBannerMapper.selectList(
            new EntityWrapper<YzBanner>().eq("display\_type", displayType.getCode())
                    .eq("is\_enable", EnableStatus.ENABLE.getCode())
                    .lt("start\_time", now)
                    .gt("end\_time", now)
    );
    return Optional.ofNullable(banners);
}

}

Mybatis-Plus提供多种方法进行数据库操作

public interface BaseMapper { Integer insert(T var1);

Integer insertAllColumn(T var1);

Integer deleteById(Serializable var1);

Integer deleteByMap(@Param("cm") Map<String, Object> var1);

Integer delete(@Param("ew") Wrapper<T> var1);

Integer deleteBatchIds(List<? extends Serializable> var1);

Integer updateById(@Param("et") T var1);

Integer updateAllColumnById(@Param("et") T var1);

Integer update(@Param("et") T var1, @Param("ew") Wrapper<T> var2);

T selectById(Serializable var1);

List<T> selectBatchIds(List<? extends Serializable> var1);

List<T> selectByMap(@Param("cm") Map<String, Object> var1);

T selectOne(@Param("ew") T var1);

Integer selectCount(@Param("ew") Wrapper<T> var1);

List<T> selectList(@Param("ew") Wrapper<T> var1);

List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> var1);

List<Object> selectObjs(@Param("ew") Wrapper<T> var1);

List<T> selectPage(RowBounds var1, @Param("ew") Wrapper<T> var2);

List<Map<String, Object>> selectMapsPage(RowBounds var1, @Param("ew") Wrapper<T> var2);

}

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Easter79 Easter79
3年前
SpringBoot实践:集成Mybatis
第一步:在pom文件中加入依赖关系<dependency<groupIdcom.baomidou</groupId<artifactIdmybatisplusspringbootstarter</artifactId<version${mybatisplusspringbootstarter.vers
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这