1.配置项目
然后完成
2.项目目录结构:
3.SpringBoot与Mybatis整合:
贴上需要的Maven的pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zzf</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>demo</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-joda</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-parameter-names</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
Mybatis的全局配置文件:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <!-- 获取数据库自增主键值 --> <setting name="useGeneratedKeys" value="true"/> <!-- 使用列标签替换列别名 默认:true --> <setting name="useColumnLabel" value="true"/> <!-- 开启驼峰命名转换 --> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> </configuration>
application.yml配置文件
# 设置数据库相关属性 spring.datasource.driver-class-name: com.mysql.jdbc.Driver spring.datasource.url: jdbc:mysql://localhost:3306/要连接的数据库 spring.datasource.username: 数据库用户名 spring.datasource.password: 数据库密码 # 设置MyBatis 的全局配置文件,mapper 接口路径,mapper 接口对应的xml 配置文件 mybatis.config.path: mybatis-config.xml mapper.xml.config.path: /mapperConfig/**.xml mapper.package.path: com.zzf.mapper
下面贴上JavaConfig文件:
首先贴上我的XML文件来讲讲为什么这么配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- <tx:annotation-driven/> 就是支持事务注解的(@Transactional) --> <!--配置整合mybatis过程 1.配置数据库相关参数 properties的属性 :${url}--> <context:property-placeholder location="classpath:jdbc.properties"/> <!--2.数据库连接池--> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!--配置连接池属性--> <property name="driverClass" value="${driver}" /> <!-- 基本属性 url、user、password --> <property name="jdbcUrl" value="${url}" /> <property name="user" value="${user}" /> <property name="password" value="${password}" /> <!--c3p0私有属性--> <property name="maxPoolSize" value="30"/><!-- 最多保存30个连接对象 --> <property name="minPoolSize" value="10"/> <!--关闭连接后不自动commit--> <property name="autoCommitOnClose" value="false"/> <!--获取连接超时时间--> <property name="checkoutTimeout" value="1000"/> <!--当获取连接失败重试次数--> <property name="acquireRetryAttempts" value="20"/> </bean> <!--约定大于配置--> <!--3.配置SqlSessionFactory对象--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--往下才是mybatis和spring真正整合的配置--> <!--注入数据库连接池--> <property name="dataSource" ref="dataSource"/> <!--配置mybatis全局配置文件:mybatis-config.xml--> <property name="configLocation" value="classpath:mybatis-config.xml"/> <!--扫描entity包,使用别名,多个用;隔开--> <property name="typeAliasesPackage" value="org.seckill.entity"/> <!--扫描sql配置文件:mapper需要的xml文件--> <property name="mapperLocations" value="classpath:mapper/*.xml"/> </bean> <!--4:配置扫描Dao接口包,动态实现DAO接口,注入到spring容器--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--注入SqlSessionFactory,当启动时有可能连接池未加载导致加载错误所以采用后加载的方式--> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <!-- 给出需要扫描的Dao接口--> <property name="basePackage" value="org.seckill.dao"/> </bean> </beans>
首先配置dataSource数据库连接池
package com.zzf.config; import com.mchange.v2.c3p0.ComboPooledDataSource; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringBootConfiguration; import org.springframework.context.annotation.Bean; import javax.sql.DataSource; import java.beans.PropertyVetoException; @MapperScan("com.zzf.mapper") @SpringBootConfiguration public class DataSourceConfiguration { @Value("${spring.datasource.driver-class-name}") private String jdbcDriver; @Value("${spring.datasource.url}") private String jdbcUrl; @Value("${spring.datasource.username}") private String jdbcUser; @Value("${spring.datasource.password}") private String jdbcPassword; @Bean public DataSource createDataSource() throws PropertyVetoException { ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setDriverClass(jdbcDriver); dataSource.setJdbcUrl(jdbcUrl); dataSource.setUser(jdbcUser); dataSource.setPassword(jdbcPassword); // 关闭连接后不自动提交 dataSource.setAutoCommitOnClose(false); return dataSource; } }
然后配置sqlSessionFactory
package com.zzf.config; import org.mybatis.spring.SqlSessionFactoryBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringBootConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import javax.sql.DataSource; import java.io.IOException; @SpringBootConfiguration public class SessionFactoryConfiguration { @Value("${mybatis.config.path}") private String myBatisConfigPath; @Value("${mapper.xml.config.path}") private String mapperXMLConfigPath; @Value("${mapper.package.path}") private String mapperPackagePath; @Autowired private DataSource dataSource; @Bean public SqlSessionFactoryBean createSqlSessionFactory() throws IOException { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); String packageXMLConfigPath = PathMatchingResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + mapperXMLConfigPath; // 设置MyBatis 配置文件的路径 sqlSessionFactoryBean.setConfigLocation(new ClassPathResource(myBatisConfigPath)); // 设置mapper 对应的XML 文件的路径 sqlSessionFactoryBean.setMapperLocations(resolver.getResources(packageXMLConfigPath)); // 设置数据源 sqlSessionFactoryBean.setDataSource(dataSource); // 设置mapper 接口所在的包 sqlSessionFactoryBean.setTypeAliasesPackage(mapperPackagePath); return sqlSessionFactoryBean; } }
事实上到这一步SpirngBoot与Mybatis的整合已经好了……(感觉好方便)
因为有事物所以我加了个事物的配置:
package com.zzf.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringBootConfiguration; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.TransactionManagementConfigurer; import javax.sql.DataSource; /** * @EnableTransactionManagement 注解用于开启事务 **/ @SpringBootConfiguration @EnableTransactionManagement public class TransactionManagementConfiguration implements TransactionManagementConfigurer { @Autowired private DataSource dataSource; @Override public PlatformTransactionManager annotationDrivenTransactionManager() { return new DataSourceTransactionManager(dataSource); } }
然后就是填写mapper(dao)层,service层,controller层,数据库映射
先看Mapper层:
package com.zzf.mapper; import org.springframework.stereotype.Component; import java.util.List; import java.util.Map; @Component public interface DemoMapper { List<Map<String,Object>> getall(); }
它的映射文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zzf.mapper.DemoMapper"> <select id="getall" resultType="Map"> SELECT * FROM seckill </select> </mapper>
service层:
package com.zzf.service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; @Transactional public interface DemoService { List<Map<String,Object>> getall(); }
它的实现类:
package com.zzf.service.impl; import com.zzf.mapper.DemoMapper; import com.zzf.service.DemoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; @Service public class AreaServiceImpl implements DemoService { @Autowired private DemoMapper demoMapper; @Override public List<Map<String, Object>> getall() { return demoMapper.getall(); } }
然后看下controller层:
package com.zzf.controller; import com.zzf.service.DemoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController @RequestMapping("/zzf") public class AreaController { @Autowired private DemoService demoService; @GetMapping("/getall") public Map<String,Object> getall(){ List<Map<String,Object>> map=demoService.getall(); Map<String,Object> map1 = new HashMap<String,Object>(); map1.put("data",map); return map1; } }
最后设置启动类:
package com.zzf.demo; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication(scanBasePackages = "com.zzf") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
Ok~SpringBoot与Mybatis的整合(JavaConfig实现)