俗话说的好,开具一张图,代码都是拷,首先来介绍一下项目目录结构:
springboot 和 mybatis整合,
大致分为一下几个步骤
- 配置数据源, 由于本项目采用的是yml文件配置的,所以话不多说,请直接看下图所示
server:
port: 8002
spring:
datasource:
# driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/mongo?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8&serverTimezone=UTC
username: root
password: 123456
driverClassName:这个为代码驱动类名,老版本的为:com.mysql.jdbc.Driver,由于我用的是较为新版本的驱动,这里可以不填写,springboot会自动帮你注入到项目中去,最好还是写一下,新版的为:com.mysql.cj.jdbc.Driver
url:数据库连接的地址,serverTimezone=UTC这里重点说一下,这个配置,其他的请自行配置,这里加上这个是因为我们mysql默认安装时是按照美国时间装的,国内的不加上的话,会报时区错误。
java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support. at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:87) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:61) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:71) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:76) at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862) at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230) at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226) at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1558) at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1623) at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2468)
user:数据库用户名
password:用户密码,这里特别说明一下,yml文件配置的时候,如果密码带有冒号":"时,你得用单引号将密码包围,免得yml格式报错,yml文件默认冒号后面,是需要添加一个空格符的。
引入mybatisjar包。maven的pom文件中添加mybatis必须要的依赖文件
<!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
上面的第一步基础环境配置好了,接下来,就简单介绍两种,springboot 配置mybatis的思路,随各人爱好,任君取舍。
第一种,编写一个MybatisConfig.class
package com.louis.mango.config; import javax.sql.DataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; /** * Mybatis配置 * @author Louis * @date Jan 11, 2019 */ @Configuration @MapperScan("com.louis.mango.dao.**") // 扫描DAO public class MybatisConfig { @Autowired //自动加载数据源 private DataSource dataSource; @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setTypeAliasesPackage("com.louis.mango.model.**"); // 扫描Model PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); sessionFactory.setMapperLocations(resolver.getResources("classpath*:**/sqlmap/*.xml")); // 扫描映射文件 return sessionFactory.getObject(); } }
在启动类里面添加扫描model层的数据
第二种 通过直接在yml文件中去添加mybatis配置,个人更倾向这种,毕竟程序员是为了,简化我们的操作,创造出提升效率的工具,当然我们本着一个能偷懒就偷懒的原则,深知底层原理,简化操作。
server:
port: 8002
spring:
datasource:
# driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/mongo?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8&serverTimezone=UTC
username: root
password: 123456
## 该配置节点为独立的节点,有很多同学容易将这个配置放在spring的节点下,导致配置无法被识别
mybatis:
mapper-locations: classpath:mapper/*.xml #注意:一定要对应mapper映射xml文件的所在路径
type-aliases-package: com.louis.mango.model # 注意:对应实体类的路径
第二也得在启动类里面取添加对应的扫描实体类文件