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" />