當前位置:
                    首頁 >
                            前端技术
>                            javascript
>内容正文                
                        
                    javascript
Spring整合Mybatis之注解方式,(注解整合Junit)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Spring整合Mybatis之注解方式,(注解整合Junit)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                Spring整合Mybatis之注解方式
我有一篇博客詳細寫了我自己使用xml的方法Spring整合MyBatis,現在我就把核心配置文件中的每個bean的配置使用注解的方式實現
 
注解整合MyBatis分析
注解整合MyBatis分析
? 業務類使用注解形式聲明bean,屬性采用注解注入
 ? 建立獨立的配置管理類,分類管理外部資源,根據功能進行分類,并提供對應的方法獲取bean
 ? 使用注解形式啟動bean掃描,加載所有注解配置的資源(bean)
 ? 使用AnnotationConfigApplicationContext對象加載所有的啟動配置類,內部使用導入方式進行關聯
注解整合MyBatis步驟
項目目錄結構
項目準備
數據庫mysql
/* SQLyog Ultimate v12.14 (64 bit) MySQL - 5.6.45 : Database - test ********************************************************************* *//*!40101 SET NAMES utf8 */;/*!40101 SET SQL_MODE=''*/;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; CREATE DATABASE /*!32312 IF NOT EXISTS*/`test` /*!40100 DEFAULT CHARACTER SET utf8 */;USE `test`;/*Table structure for table `account` */DROP TABLE IF EXISTS `account`;CREATE TABLE `account` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(20) DEFAULT NULL,`money` double DEFAULT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;/*Data for the table `account` */insert into `account`(`id`,`name`,`money`) values (1,'小付',800),(2,'小花',1200),(3,'小張',324),(4,'小紅花',1434),(5,'笑小',1314),(6,'你鉿',6575),(8,'花花',333);/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;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.fs</groupId><artifactId>day02_spring_annotation_MyBatis</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.9.RELEASE</version></dependency><!-- jdbc--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.1.9.RELEASE</version></dependency><!-- test--><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.1.9.RELEASE</version></dependency><!-- spring整合mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.1</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.5</version></dependency><!-- mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!--druid連接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.20</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.12</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies></project>代碼演示(代碼中有詳細解釋)
SpringConfig
package com.fs.config;import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; //表示這個類是一個spring的配置類,并將其存入到ioc容器中 @Configuration /*開啟掃描注解的那些包 <!-- 啟動spring掃描注解的包,只掃描spring的注解--><context:component-scan base-package="com.fs"/>*/ @ComponentScan("com.fs") //引入其他的配置類 @Import({JdbcConfig.class,MybatisConfig.class}) public class SpringConfig { }JdbcConfig
jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://192.168.93.132:3306/test jdbc.username=root jdbc.password=root我們將下面的配置轉變成spring的配置類,通過注解實現
<!-- 引入properties--><context:property-placeholder location="classpath:jdbc.properties"/> <!-- 整合druid,把DruidDataSource交給spring管理--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean>創建一個JdbcConfig
package com.fs.config;import com.alibaba.druid.pool.DruidDataSource; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.PropertySource; /* <!-- 引入properties--><context:property-placeholder location="classpath:jdbc.properties"/>*/ @PropertySource("classpath:jdbc.properties") public class JdbcConfig {//@Value("${Key}")@Value("${jdbc.driver}")private String driver;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String username;@Value("${jdbc.password}")private String password;/*<!-- 整合druid,把DruidDataSource交給spring管理--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean>*///將返回的DruidDataSource交給ioc管理@Beanpublic DruidDataSource getDruidDataSource(){//創建DruidDataSourceDruidDataSource druidDataSource = new DruidDataSource();//給屬性賦值,這個是上面從配置文件中依耐注入給屬性的druidDataSource.setDriverClassName(driver);druidDataSource.setUrl(url);druidDataSource.setUsername(username);druidDataSource.setPassword(password);//返回DruidDataSource,然后交給ioc管理return druidDataSource;} }MybatisConfig
將下面的配置文件中的配置轉變成java配置類,通過注解實現
<!-- 整合MyBatis--><!-- 配置MyBatis的會話工廠類 mybatis.spring 下的SqlSessionFactoryBean配置的sqlSessionFactory得到SqlSession,然后MyBatis從spring中拿到SqlSession.getMapper()去動態代理dao--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 給MyBatis配置鏈接池,依耐注入--><property name="dataSource" ref="dataSource"/> <!-- 配置別名掃描的包,被掃描的包下的類起的別名就是類名首字母小寫,用于mapper.xml文件中使用--><property name="typeAliasesPackage" value="com.fs.pojo"/></bean> <!--配置MyBatis掃描dao的包,讓MyBatis動態代理生成這個dao的實現類,并交給ioc管理mybatis-spring這個包下MapperScannerConfigurer提供了spring于MyBatis的整合--><bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 告訴MyBatis我dao在哪里.然后MyBatis將這個dao實現,然后給spring管理--><property name="basePackage" value="com.fs.dao"/></bean>創建一個MybatisConfig
package com.fs.config;import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.mapper.MapperScannerConfigurer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean;import javax.sql.DataSource;public class MybatisConfig {/*<!-- 配置MyBatis的會話工廠類 mybatis.spring 下的SqlSessionFactoryBean配置的sqlSessionFactory得到SqlSession,然后MyBatis從spring中拿到SqlSession.getMapper()去動態代理dao--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 給MyBatis配置鏈接池,依耐注入--><property name="dataSource" ref="dataSource"/> <!-- 配置別名掃描的包,被掃描的包下的類起的別名就是類名首字母小寫,用于mapper.xml文件中使用--><property name="typeAliasesPackage" value="com.fs.pojo"/></bean>*/@Beanpublic SqlSessionFactoryBean getSqlSessionFactoryBean(@Autowired DataSource dataSource){//創建sql會話工廠類 //這里@Autowired也是從ioc拿DataSourceSqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();//從ioc容器中取出jdbcConfig中配置的druidDatasourcesqlSessionFactoryBean.setDataSource(dataSource);//配置起別名sqlSessionFactoryBean.setTypeAliasesPackage("com.fs.pojo");return sqlSessionFactoryBean;}/*<!--配置MyBatis掃描dao的包,讓MyBatis動態代理生成這個dao的實現類,并交給ioc管理mybatis-spring這個包下MapperScannerConfigurer提供了spring于MyBatis的整合--><bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 告訴MyBatis我dao在哪里.然后MyBatis將這個dao實現,然后給spring管理--><property name="basePackage" value="com.fs.dao"/></bean>*///創建MyBatis動態代理掃描類@Beanpublic MapperScannerConfigurer getMapperScannerConfigurer(){//創建映掃描配置類MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();//設置動態代理掃描的dao的包mapperScannerConfigurer.setBasePackage("com.fs.dao");//交給spring管理return mapperScannerConfigurer;} }Dao Service接口
AccountDao
package com.fs.dao;import com.fs.pojo.Account; import org.apache.ibatis.annotations.*;import java.util.List;public interface AccountDao {@Select("select * from account")List<Account> findAll();//查詢所有 }AccountService
package com.fs.service;import com.fs.pojo.Account;import java.util.List;public interface AccountService {List<Account> findAll(); }AccountServiceImpl
將下面的配置文件中的配置信息,通過注解的方法交給spring管理
<!-- 把業務類 AccountServiceImpl 交給ioc管理 --><bean id="accountServiceImpl" class="com.fs.service.impl.AccountServiceImpl"> <!-- 依耐注入dao,這個dao被MyBatis動態代理實現后被spring存放在ioc容器中--><property name="accountDao" ref="accountDao"/></bean>AccountServiceImpl
package com.fs.service.impl;import com.fs.dao.AccountDao; import com.fs.pojo.Account; import com.fs.service.AccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.util.List; /*<!-- 把業務類 AccountServiceImpl 交給ioc管理 --><bean id="accountServiceImpl" class="com.fs.service.impl.AccountServiceImpl"> <!-- 依耐注入dao,這個dao被MyBatis動態代理實現后被spring存放在ioc容器中--><property name="accountDao" ref="accountDao"/></bean>*/ @Service public class AccountServiceImpl implements AccountService {//從ioc獲取MyBatis動態代理的accountDao實現類@Autowiredprivate AccountDao accountDao;//提供DI依耐注入的set方法 // public void setAccountDao(AccountDao accountDao) { // this.accountDao = accountDao; // }@Overridepublic List<Account> findAll() {return accountDao.findAll();} }測試整合代碼(注解整合Junit)
注意:
 ◆ 從Spring5.0以后,要求Junit的版本必須是4.12及以上
 ◆ Junit僅用于單元測試,不能將Junit的測試類配置成spring的bean,否則該配置將會被打包進入工
 程中
 
測試代碼
package com.fs.service;import com.fs.config.SpringConfig; import com.fs.pojo.Account; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import java.util.List; //設定spring專用的類加載器 @RunWith(SpringJUnit4ClassRunner.class) //設定加載的spring的配置類或者文件 @ContextConfiguration(classes = SpringConfig.class) public class AccountServiceTest {//從spring容器中獲取AccountService的實現類@Autowiredprivate AccountService accountService;@Testpublic void findAll() {//根據配置文件獲取到ioc容器//ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);//從ioc容器中拿到業務層類//AccountService bean = applicationContext.getBean(AccountService.class);//調用查詢方法List<Account> all = accountService.findAll();//輸出一下System.out.println(all);} }測試結果
說明整合成功:
 
總結
以上是生活随笔為你收集整理的Spring整合Mybatis之注解方式,(注解整合Junit)的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: spring的注解开发@Componen
 - 下一篇: spring的AOP配置之XML方式