如何将Spring6与JUnit和MyBatis完美集成?

摘要:spring对junit的支持 主要是自动从spring容器中获取bean。不用手动获取了。 spring对junit4的支持 1.引入spring和junit4的依赖 <dependency>
spring对junit的支持 主要是自动从spring容器中获取bean。不用手动获取了。 spring对junit4的支持 1.引入spring和junit4的依赖 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>6.0.4</version> </dependency> <!-- spring对junit支持的依赖,spring6既支持junit4也支持junit5 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>6.0.4</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> 2.编写测试类 @RunWith(SpringJUnit4ClassRunner.class) // 加载spring.xml配置文件 加载spring容器 @ContextConfiguration("classpath:spring.xml") public class SpringJunit4Test { @Autowired private Account account; @Test public void testSpringJunit4(){ System.out.println(account.getActno()); } } spring对junit5的支持 引入依赖 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>6.0.4</version> </dependency> <!-- spring对junit支持的依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>6.0.4</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.9.2</version> <scope>test</scope> </dependency> 2.编写测试类 @ExtendWith(SpringExtension.class) @ContextConfiguration("classpath:spring.xml") public class SpringJunit5Test { @Autowired private Account account; @org.junit.jupiter.api.Test public void testSpringJunit5(){ System.out.println(account.getActno()); } } spring集成mybatis 引入依赖 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>6.0.21</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>7.0.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.19</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>4.0.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.20</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> 创建三层架构需要的包:mapper、pojo、service 编写pojo类 public class Account { private String actno; private double balance; @Override public String toString() { return "Account{" + "actno='" + actno + '\'' + ", balance=" + balance + '}'; } public Account() { } public Account(String actno, double balance) { this.actno = actno; this.balance = balance; } public String getActno() { return actno; } public void setActno(String actno) { this.actno = actno; } public double getBalance() { return balance; } public void setBalance(double balance) { this.balance = balance; } } 编写mapper接口 // 该接口不需要写实现类,mybatis会根据动态代理机制自动生成实现类 public interface AccountMapper { int update(Account getAccount); int insert(Account getAccount); int delete(String actno); Account getAccount(String actno); List<Account> getAllAccount(); } 编写mapper配置文件 <?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.ali.mapper.AccountMapper"> <insert id="insert" parameterType="com.ali.pojo.Account"> insert into t_act(actno, balance) values(#{actno}, #{balance}) </insert> <delete id="delete" > delete from t_act where actno = #{actno} </delete> <update id="update" parameterType="com.ali.pojo.Account"> update t_act set name = #{name}, money = #{money} where actno = #{actno} </update> <select id="getAccount" resultType="com.ali.pojo.Account"> select actno, balance from t_act where actno = #{actno} </select> <select id="getAllAccount" resultType="com.ali.pojo.Account"> select actno, balance from t_act </select> </mapper> 编写service和service的实现类 public interface AccountService { int addAccount(Account account); int updateAccount(Account account); int deleteAccount(String actno); Account getAccount(String actno); List<Account> getAllAccount(); } @Service("accountService") public class AccountServiceImpl implements com.ali.service.AccountService { @Autowired private AccountMapper accountMapper; @Override public int addAccount(Account account) { return accountMapper.insert(account); } @Override public int updateAccount(Account account) { return accountMapper.update(account); } @Override public int deleteAccount(String actno) { return accountMapper.delete(actno); } @Override public Account getAccount(String actno) { return accountMapper.getAccount(actno); } @Override public List<Account> getAllAccount() { return accountMapper.getAllAccount(); } } 编写jdbc.properties配置文件 jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/spring6?useSSL=false&serverTimezone=UTC jdbc.username=root jdbc.password=yourpassword 编写mybaits-config.xml配置文件 <?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> <!-- 打印mybatis的日志信息,sql语句等--> <settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> </configuration> 编写spring.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" xmlns:tx="http://www.springframework.org/schema/tx" 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 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 组件扫描--> <context:component-scan base-package="com.ali" /> <!-- 引入外部的属性配置文件--> <context:property-placeholder location="jdbc.properties" /> <!-- 数据源--> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="driverClassName" value="${jdbc.driver}" /> </bean> <!-- 配置sqlSessionFactoryBean--> <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 注入数据源--> <property name="dataSource" ref="dataSource" /> <!-- 指定mybatis的配置文件位置--> <property name="configLocation" value="classpath:mybatis-config.xml" /> <!-- 指定别名--> <property name="typeAliasesPackage" value="com.ali.pojo" /> </bean> <!-- Mapper扫描器,会自动扫描指定包下的mapper接口,并为其创建代理对象--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.ali.mapper" /> </bean> <!-- 事务管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 启用事务注解--> <tx:annotation-driven transaction-manager="transactionManager" /> </beans> 在spring配置文件中引入子配置文件 <!-- 在spring.xml中引入其他的spring配置文件,common.xml中可以放置一些公共的bean定义 ,例如一些工具类、常量等,这样就可以在多个配置文件中共享这些bean定义,避免重复定义。--> <import resource="common.xml" />