创建新模块
选择Spring Initializr方式
添加模块项目名、报名等基本信息
添加spring MVC
添加mybatis、mysql驱动
添加lombok
点击完成,开始创建工程
创建完成,引入了相关依赖
复制之前的mapper接口、xml、pojo类,到图中所示文件夹
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
@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);}}
自动装配是SpringBoot中一大特性&#xff0c;SpringBoot在程序初始化时可以根据classpath、property属性、context中实例、以及运行容器特征等各种动态条件&#xff0c;来按需初始化相应的bean&#xff0c;并注册到IOC容器中。
mybatis提供了Spring Boot自动装配模块mybatis-spring-boot-starter&#xff0c;只要引入了这个包&#xff0c;yml中配置相关属性&#xff0c;就可以快速开发。相比之前XML的复杂配置&#xff0c;简化了很多。
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是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
一般如下配置即可&#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