springboot详细整合mybatisplus

news/2024/11/18 2:23:57/

SpringBoot详细整合mybatisPlus

文章目录

  • SpringBoot详细整合mybatisPlus
    • 一、引入mybatis_plus依赖
    • 二、修改mybatis_plus的yml配置
    • 三、添加mybatis_plus的其他配置以及包扫描
    • 四,修改mybatis的配置(这一步根据实际情况修改)

无奈,一个小的新项目只有mybatis不习惯,那就来加个plus吧~

一、引入mybatis_plus依赖

     <properties><pagehelper.spring.boot.starter.version>1.4.6</pagehelper.spring.boot.starter.version><mybatisplus.version>3.4.0</mybatisplus.version></properties><!-- mybatisPlus  它的分页会与pagehelper分页冲突,目前系统用的pageHelper分页--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatisplus.version}</version></dependency><!-- pagehelper 分页插件 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>${pagehelper.spring.boot.starter.version}</version></dependency>

上面有一个注意的点就是mybatis_plus的分页会与pageHelper的分页冲突,因为他们的底层其实差不多的。我个人比较喜欢mybatis_plus的分页 ,因为pageHelper的联表分页会比较麻烦,而mybatis_plus的联表分页只需要在mapper层上面加上@Select注解写联表查询语句就可以了。 但是没办法少数服从多数,这里就用了pageHelper分页。

上面有一点要注意的是,引入了mybatis_plus的依赖后mybatis的依赖就不需要了可以干掉。

二、修改mybatis_plus的yml配置

首先看一下整个项目大概的包的层级,主要是为了映射上mapper和xml文件。

# MyBatis配置
mybatis:# 搜索指定包别名typeAliasesPackage: com.ruoyi.project.**.domain# 配置mapper的扫描,找到所有的mapper.xml映射文件mapperLocations: classpath*:mybatis/**/*Mapper.xml# 加载全局的配置文件configLocation: classpath:mybatis/mybatis-config.xml#MyBatisPlus配置
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmapper-locations: classpath*:/mybatis/**/**.xmltype-aliases-package: com.ruoyi.project.chouzhou

三、添加mybatis_plus的其他配置以及包扫描

下面的两个配置一个是为了分页(当然,其实目前由于与pageHelper冲突就没用plus的分页了,含泪舍弃),另一个则是基础字段的填充和更新。

重要的是添加包扫描,对应你的mapper层的包路径。

ps:plus的删除是逻辑删除只需要在对应的删除标识字段上机上@TableLogic注解,查询的时候根据改字段筛选就可以了

/*** @author zmz* @since 2021/7/19 20:51*/
//自动填充处理器用来自动填充处理时间 实现MateObjectHandler类
@Component
@Configuration
@MapperScan("com.ruoyi.project.chouzhou.*.mapper")
public class MybatisPlusConfig implements MetaObjectHandler {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.ORACLE));return interceptor;}// 插入时的填充策略@Overridepublic void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "createTime", String.class, DateUtils.getTime());}// 更新时的填充策略@Overridepublic void updateFill(MetaObject metaObject) {this.strictUpdateFill(metaObject, "updateTime", String.class, DateUtils.getTime());}
}

四,修改mybatis的配置(这一步根据实际情况修改)

在mybatis配置中把SqlSessionFactoryBean替换为MybatisSqlSessionFactoryBean

下面是本项目的mybatis配置

/*** Mybatis支持*匹配扫描包* * @author ruoyi*/
@Configuration
public class MyBatisConfig
{@Autowiredprivate Environment env;static final String DEFAULT_RESOURCE_PATTERN = "**/*.class";public static String setTypeAliasesPackage(String typeAliasesPackage){ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver();MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver);List<String> allResult = new ArrayList<String>();try{for (String aliasesPackage : typeAliasesPackage.split(",")){List<String> result = new ArrayList<String>();aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX+ ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + DEFAULT_RESOURCE_PATTERN;Resource[] resources = resolver.getResources(aliasesPackage);if (resources != null && resources.length > 0){MetadataReader metadataReader = null;for (Resource resource : resources){if (resource.isReadable()){metadataReader = metadataReaderFactory.getMetadataReader(resource);try{result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName());}catch (ClassNotFoundException e){e.printStackTrace();}}}}if (result.size() > 0){HashSet<String> hashResult = new HashSet<String>(result);allResult.addAll(hashResult);}}if (allResult.size() > 0){typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0]));}else{throw new RuntimeException("mybatis typeAliasesPackage 路径扫描错误,参数typeAliasesPackage:" + typeAliasesPackage + "未找到任何包");}}catch (IOException e){e.printStackTrace();}return typeAliasesPackage;}public Resource[] resolveMapperLocations(String[] mapperLocations){ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();List<Resource> resources = new ArrayList<Resource>();if (mapperLocations != null){for (String mapperLocation : mapperLocations){try{Resource[] mappers = resourceResolver.getResources(mapperLocation);resources.addAll(Arrays.asList(mappers));}catch (IOException e){// ignore}}}return resources.toArray(new Resource[resources.size()]);}@Beanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception{String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage");String mapperLocations = env.getProperty("mybatis.mapperLocations");String configLocation = env.getProperty("mybatis.configLocation");typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);VFS.addImplClass(SpringBootVFS.class);//        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);sessionFactory.setTypeAliasesPackage(typeAliasesPackage);sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));return sessionFactory.getObject();}
}

好了,结束了,开干吧!


http://www.ppmy.cn/news/687886.html

相关文章

78、基于STM32单片机步进电机速度调速控制系统设计(程序+原理图+PCB源文件+参考论文+开题报告+流程图+元器件清单等)

摘 要 伴随着时代的快速发展&#xff0c;单片机的应用也越来越广泛&#xff0c;促进了微电子和计算机的快速发展。我们日常生活中步进电机扮演着很重要的角色在我们身边随处可以见。因为步进电机本身的结构组成相对于比较简单、价格也比较便宜廉价。比如压榨机&#xff0c;打印…

pyspider 爬取bing壁纸

附pyspider安装过程 目标页面 https://bing.gifposter.com/list/new/desc/classic.html?p1 #!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on 2020-05-13 09:56:10 # Project: bingfrom pyspider.libs.base_handler import * from time import strftime, strp…

获取bing壁纸php,php获取bing每日壁纸的示例

php获取bing每日壁纸的示例 这篇文章主要介绍了使用php获取bing每日壁纸的示例,需要的朋友可以参考下 代码如下: $strfile_get_contents(http://cn.bing.com/HPImageArchive.aspx?idx0&n1); if(preg_match("/(.?)/ies",$str,$matches)){ $imgurlhttp://cn.bing…

动态获取Bing每日壁纸

我们可以通过访问&#xff1a;http://cn.bing.com/HPImageArchive.aspx?formatxml&idx0&n1获得一个XML文件&#xff0c;里面包含了图片的地址。 上面访问参数的含义分别是&#xff1a; 1、format&#xff0c;非必要。返回结果的格式&#xff0c;不存在或者等于xml时…

Python爬虫实战(2):自定义年月日国别抓取Bing壁纸

写完程序的最深体会。 就是大概我python水平可能也就停留在这半死不活&#xff0c;写几十行都要各种翻资料的状态上了吧。 令人悲伤。 言归正传&#xff0c;代码地址。 Bing壁纸有API接口&#xff0c;也有不同网站提供浏览服务&#xff0c;其中本例使用的是Long Zheng老师的…

随机切换必应美图html代码,Python之自动爬取每日bing壁纸并更换

[PHP] 纯文本查看 复制代码Microsoft Windows [版本 10.0.17134.1304] (c) 2018 Microsoft Corporation。保留所有权利。 (venv) D:\Pycharm 2020.3>pyinstaller -D photo_get.py 1465 INFO: PyInstaller: 4.2 1465 INFO: Python: 3.8.3 1465 INFO: Platform: Windows-10-10…

bing每日壁纸客户端

写了个bing每日壁纸的安卓客户端。可以查看历史壁纸&#xff0c;相关讯息&#xff0c;设置壁纸&#xff0c;下载壁纸。 代码已开源到github &#xff0c;欢迎start github地址 网页版在这 www.rampage.xin/bing/

官方bing壁纸软件-bing wallpaper

更新内容&#xff1a;官方bing壁纸软件-bing wallpaper 官方发布了一款bing壁纸软件&#xff1a;bing wallpaper 下载安装中会有两个选项&#xff1a;将bing设为首页和将bing设为默认搜索。根据个人打勾或取消。软件是英文版的&#xff0c;不能设置中文。 功能很简单&#xff1…