热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MyBatis入门系列(11)springboot集成MyBatis

1.创建基础工程创建新模块选择SpringInitializr方式添加模块项目名、报名等基本信息添加springMVC添加mybatis、mysql驱动添加lombok点击完成&#

1. 创建基础工程


  1. 创建新模块
    在这里插入图片描述

  2. 选择Spring Initializr方式
    在这里插入图片描述

  3. 添加模块项目名、报名等基本信息
    在这里插入图片描述

  4. 添加spring MVC
    在这里插入图片描述

  5. 添加mybatis、mysql驱动
    在这里插入图片描述

  6. 添加lombok
    在这里插入图片描述

  7. 点击完成,开始创建工程
    在这里插入图片描述

  8. 创建完成,引入了相关依赖
    在这里插入图片描述


2. 集成MyBatis


  1. 复制之前的mapper接口、xml、pojo类,到图中所示文件夹
    在这里插入图片描述

  2. yml添加数据源配置

server:port: 8888
spring:application:name: spring-boot-mybatis-demodatasource:url: jdbc:mysql://localhost:3306/angel_admin?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=trueusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:# xml文件的路径配置mapper-locations: mybatis/*.xml

  1. 测试,集成完毕

@SpringBootTest
class SpringBootMybatisDemoApplicationTests {&#64;AutowiredUserMapper userMapper;&#64;Testvoid contextLoads() {UserQuery userQuery &#61; new UserQuery();userQuery.setLoginName("zhangwei");List<User> dynamicUserList &#61; userMapper.selectDynamicUserList(userQuery);System.out.println(dynamicUserList);}}

3. 配置


SpringBoot自动装配

自动装配是SpringBoot中一大特性&#xff0c;SpringBoot在程序初始化时可以根据classpath、property属性、context中实例、以及运行容器特征等各种动态条件&#xff0c;来按需初始化相应的bean&#xff0c;并注册到IOC容器中。

mybatis提供了Spring Boot自动装配模块mybatis-spring-boot-starter&#xff0c;只要引入了这个包&#xff0c;yml中配置相关属性&#xff0c;就可以快速开发。相比之前XML的复杂配置&#xff0c;简化了很多。

配置类


MybatisProperties

MybatisProperties是mybatis的最外层配置类&#xff0c;会读取mybatis前缀的配置

/*** MyBatis属性配置*/
// &#64;ConfigurationProperties。只要在bean上添加上这个注解&#xff0c;指定好配置文件的前缀&#xff0c;那么对应的配置文件数据就会自动填充到bean中
// &#64;EnableConfigurationProperties({MybatisProperties.class})会使&#64;ConfigurationProperties 注解的类生效
// 会读取mybatis前缀的配置加载到当前Bean中
&#64;ConfigurationProperties(prefix &#61; MybatisProperties.MYBATIS_PREFIX)
public class MybatisProperties {// 配置文件前缀public static final String MYBATIS_PREFIX &#61; "mybatis";private static final ResourcePatternResolver resourceResolver &#61; new PathMatchingResourcePatternResolver();// MyBatis xml配置文件的位置private String configLocation;// MyBatis xml映射文件的位置private String[] mapperLocations;// 别名包的位置&#xff0c;使用分隔符&#xff08;,; \t\n"&#xff09;private String typeAliasesPackage;// 别名类的父类。指定之后&#xff0c;只会加载配置了此超类的文件&#xff0c;如果没有指定&#xff0c;MyBatis会将所有从 ypeAliasesPackage中搜索到的类作为类型别名处理private Class<?> typeAliasesSuperType;// 扫描类型处理器所在的包&#xff0c;使用分隔符&#xff08;,; \t\n"&#xff09;private String typeHandlersPackage;// 指示是否对 MyBatis xml 配置文件进行存在检查, 使用了自动装配&#xff0c;所以不需要xml配置了private boolean checkConfigLocation &#61; false;// sql执行器&#xff0c;可配置项&#xff1a;SIMPLE、REUSE、BATCH&#xff0c;// SIMPLE是默认执行器&#xff0c;根据对应的sql直接执行&#xff0c;不会做一些额外的操作// REUSE是可重用执行器&#xff0c;重用对象是Statement&#xff08;即该执行器会缓存同一个sql的Statement&#xff0c;省去Statement的重新创建&#xff0c;优化性能&#xff09;&#xff08;即会重用预处理语句&#xff09;// BATCH执行器会重用预处理语句&#xff0c;并执行批量更新。private ExecutorType executorType;// 默认脚本语言驱动程序类。 (与mybatis-spring 2.0.2&#43;一起使用时可用)private Class<? extends LanguageDriver> defaultScriptingLanguageDriver;// MyBatis外部配置属性private Properties configurationProperties;// 配置对象&#xff0c;如果指定了configLocation&#xff0c;也不使用此属性&#64;NestedConfigurationProperty // 表示这是一个嵌套类型private Configuration configuration;
}

Configuration

Configuration是MybatisProperties中的嵌套配置类&#xff0c;相当于之前的全局配置文件。

public class Configuration {// 环境配置&#xff0c;配置数据源、事务管理器protected Environment environment;// 是否允许在嵌套语句中使用分页&#xff08;RowBounds&#xff09;。如果允许使用则设置为 false。protected boolean safeRowBoundsEnabled;// 是否允许在嵌套语句中使用结果处理器&#xff08;ResultHandler&#xff09;。如果允许使用则设置为 falseprotected boolean safeResultHandlerEnabled &#61; true;// 是否开启驼峰命名自动映射&#xff0c;即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumnprotected boolean mapUnderscoreToCamelCase;// 开启时&#xff0c;任一方法的调用都会加载该对象的所有延迟加载属性。 否则&#xff0c;每个延迟加载属性会按需加载&#xff08;参考 lazyLoadTriggerMethods)。protected boolean aggressiveLazyLoading;// 是否允许单个语句返回多结果集&#xff08;需要数据库驱动支持&#xff09;。protected boolean multipleResultSetsEnabled &#61; true;// 允许 JDBC 支持自动生成主键&#xff0c;需要数据库驱动支持。如果设置为 true&#xff0c;将强制使用自动生成主键。尽管一些数据库驱动不支持此特性&#xff0c;但仍可正常工作&#xff08;如 Derby&#xff09;。protected boolean useGeneratedKeys;// 使用列标签代替列名。实际表现依赖于数据库驱动&#xff0c;具体可参考数据库驱动的相关文档&#xff0c;或通过对比测试来观察。protected boolean useColumnLabel &#61; true;// 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。protected boolean cacheEnabled &#61; true;// 指定当结果集中值为 null 的时候是否调用映射对象的 setter&#xff08;map 对象时为 put&#xff09;方法&#xff0c;这在依赖于 Map.keySet() 或 null 值进行初始化时比较有用。注意基本类型&#xff08;int、boolean 等&#xff09;是不能设置成 null 的。protected boolean callSettersOnNulls;// 允许使用方法签名中的名称作为语句参数名称。 为了使用该特性&#xff0c;你的项目必须采用 Java 8 编译&#xff0c;并且加上 -parameters 选项。&#xff08;新增于 3.4.1&#xff09;protected boolean useActualParamName &#61; true;// 当返回行的所有列都是空时&#xff0c;MyBatis默认返回 null。 当开启这个设置时&#xff0c;MyBatis会返回一个空实例。 请注意&#xff0c;它也适用于嵌套的结果集&#xff08;如集合或关联&#xff09;。&#xff08;新增于 3.4.2&#xff09;protected boolean returnInstanceForEmptyRow;// 从SQL中删除多余的空格字符。请注意&#xff0c;这也会影响SQL中的文字字符串。 (新增于 3.5.5)protected boolean shrinkWhitespacesInSql;// 指定 MyBatis 增加到日志名称的前缀。protected String logPrefix;// 指定 MyBatis 所用日志的具体实现&#xff0c;未指定时将自动查找。protected Class<? extends Log> logImpl;// 指定 VFS 的实现// Mybatis 中使用 VFS 表示虚拟文件系统,用来查找指定路径下的资源,VFS 是一个抽象类,我们可以看到官方提供了 JBoss6VFS 和 DefaultVFS// spring boot使用的是而是 SpringbootVFSprotected Class<? extends VFS> vfsImpl;// 指定保存提供程序方法的sql提供程序类&#xff08;自3.5.6起&#xff09;。当省略这些属性时&#xff0c;此类将应用于sql提供程序批注&#xff08;例如&#64;SelectProvider&#xff09;上的type&#xff08;或value&#xff09;属性.protected Class<?> defaultSqlProviderType;// MyBatis 利用本地缓存机制&#xff08;Local Cache&#xff09;防止循环引用和加速重复的嵌套查询。 默认值为 SESSION&#xff0c;会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT&#xff0c;本地缓存将仅用于执行语句&#xff0c;对相同 SqlSession 的不同查询将不会进行缓存。protected LocalCacheScope localCacheScope &#61; LocalCacheScope.SESSION;// 当没有为参数指定特定的 JDBC 类型时&#xff0c;空值的默认 JDBC 类型。 某些数据库驱动需要指定列的 JDBC 类型&#xff0c;多数情况直接用一般类型即可&#xff0c;比如 NULL、VARCHAR 或 OTHER。 JdbcType 常量&#xff0c;常用值&#xff1a;NULL、VARCHAR 或 OTHER。protected JdbcType jdbcTypeForNull &#61; JdbcType.OTHER;// 指定对象的哪些方法触发一次延迟加载。protected Set<String> lazyLoadTriggerMethods &#61; new HashSet<>(Arrays.asList("equals", "clone", "hashCode", "toString"));// 设置超时时间&#xff0c;它决定数据库驱动等待数据库响应的秒数。protected Integer defaultStatementTimeout;// 为驱动的结果集获取数量&#xff08;fetchSize&#xff09;设置一个建议值。此参数只可以在查询设置中被覆盖。protected Integer defaultFetchSize;// 指定语句默认的滚动策略。&#xff08;新增于 3.5.2&#xff09;// FORWARD_ONLY /SCROLL_SENSITIVE /SCROLL_INSENSITIVE/DEFAULT&#xff08;等同于未设置&#xff09;protected ResultSetType defaultResultSetType;// 配置默认的执行器。SIMPLE 就是普通的执行器&#xff1b;REUSE 执行器会重用预处理语句&#xff08;PreparedStatement&#xff09;&#xff1b; BATCH 执行器不仅重用语句还会执行批量更新。protected ExecutorType defaultExecutorType &#61; ExecutorType.SIMPLE;// 指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示关闭自动映射&#xff1b;PARTIAL 只会自动映射没有定义嵌套结果映射的字段。 FULL 会自动映射任何复杂的结果集&#xff08;无论是否嵌套&#xff09;。protected AutoMappingBehavior autoMappingBehavior &#61; AutoMappingBehavior.PARTIAL;// 指定发现自动映射目标未知列&#xff08;或未知属性类型&#xff09;的行为。protected AutoMappingUnknownColumnBehavior autoMappingUnknownColumnBehavior &#61; AutoMappingUnknownColumnBehavior.NONE;protected Properties variables &#61; new Properties();protected ReflectorFactory reflectorFactory &#61; new DefaultReflectorFactory();protected ObjectFactory objectFactory &#61; new DefaultObjectFactory();protected ObjectWrapperFactory objectWrapperFactory &#61; new DefaultObjectWrapperFactory();// 延迟加载的全局开关。当开启时&#xff0c;所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。protected boolean lazyLoadingEnabled &#61; false;// 指定 Mybatis 创建可延迟加载对象所用到的代理工具。protected ProxyFactory proxyFactory &#61; new JavassistProxyFactory(); // #224 Using internal Javassist instead of OGNL

常用YML配置

一般如下配置即可&#xff0c;如果需要其他配置&#xff0c;参考以上即可

mybatis:# xml文件的路径配置mapper-locations: mybatis/*.xml# 别名包的位置&#xff0c;使用分隔符&#xff08;,; \t\n"&#xff09;type-aliases-package: org.pearl.boot.mybatis.demo.pojoconfiguration:# 转驼峰配置map-underscore-to-camel-case: true


推荐阅读
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • 本文介绍了Cocos2dx学习笔记中的更新函数scheduleUpdate、进度计时器CCProgressTo和滚动视图CCScrollView的用法。详细介绍了scheduleUpdate函数的作用和使用方法,以及schedule函数的区别。同时,还提供了相关的代码示例。 ... [详细]
author-avatar
orzxy_966
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有