Spring整合Mybatis之注解方式,(注解整合Junit)
Spring整合Mybatis之注解方式
我有一篇博客详细写了我自己使用xml的方法Spring整合MyBatis,现在我就把核心配置文件中的每个bean的配置使用注解的方式实现
注解整合MyBatis分析
注解整合MyBatis分析
⚫ 业务类使用注解形式声明bean,属性采用注解注入
⚫ 建立独立的配置管理类,分类管理外部资源,根据功能进行分类,并提供对应的方法获取bean
⚫ 使用注解形式启动bean扫描,加载所有注解配置的资源(bean)
⚫ 使用AnnotationConfigApplicationContext对象加载所有的启动配置类,内部使用导入方式进行关联
注解整合MyBatis步骤
- 修改mybatis外部配置文件格式为注解格式
- 业务类使用@Component声明bean,使用@Autowired注入对象
- 建立配置文件JDBCConfig与MyBatisConfig类,并将其导入到核心配置类SpringConfig
- 开启注解扫描
- 使用AnnotationConfigApplicationContext对象加载配置项
项目目录结构
项目准备
数据库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 Boot + Mybatis 配合 AOP 和注解实现动态数据源切换配置
Spring Boot + Mybatis 配合 AOP 和注解实现动态数据源切换配置 前言: 1. 数据库准备: 2. 环境准备: 3.代码部分 4. 测试: 5.等等 6.配合注解实现 7 .测试 ...
- mysql+xml+注释,springboot整合mybatis完整示例, mapper注解方式和xml配置文件方式实现(我们要优雅地编程)...
一.注解方式 pom org.mybatis.spring.boot mybatis-spring-boot-starter 2.0.0 mysql mysql-connector-java org. ...
- SSM整合之纯注解方式,注解实现事务,异常,与拦截器
SSM整合之纯注解方式Spring,SpringMVC,Mybatis 使用纯注解的方式,整合ssm, sql语句与数据表 在上一篇SSM整合之XML方式中有, 创建maven项目(代码中注释为详细解 ...
- springboot update数据_SpringBoot整合Mybatis+Druid+数据库(注解版)
运行展示 正题 Spring boot :2.1.5RELEASE :数据库(Mysql.Oracle):Mybatis:阿里云的连接池 : Druid : 步骤 1.POM依赖 <!-- My ...
- SpringBoot_数据访问-整合MyBatis(二)-注解版MyBatis
前面已经创建数据表和JAVABEAN,如何用mybatis来对数据进行增删改查,我们先说mybatis注解版的使用,我来写上一个mapper,操作我们这个数据库,我们放在mapper包下,我们操作de ...
- Spring+Struts2+Mybatis在Intellij下的整合
环境:jdk 1.8, tomcat 8.0.38; 开发工具:Intellj; 具体步骤: 1. 创建一个maven下的web项目 2. 配置相应的jar文件,具体的配置方式为: < ...
- (Spring+SpringMVC+MyBatis)SSM三大框架整合教程
目录 一.基本概念 1.Spring 2.SpringMVC 3.MyBatis 二.开发环境搭建 三.Maven Web项目创建 四.SSM整合 1.Maven引入需要的JAR包 2.Spring与 ...
- Spring IoC和DI XML方式 注解方式 依赖注入 AOP面向切面
初识Spring框架 时代变迁 原始时代我们用一个jsp搞定一切,但如此开发大型项目时我们遇到了问题,前端美化的代码和后端的代码交织,代码中又有html.js.css样式,又有业务逻辑和数据库访问代码 ...
- SpringBoot 注解方式快速整合Mybatis
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:yizhiwazi www.jianshu.com/p/82 ...
最新文章
- 专家点评Nat Micro | 朱永群组首次发现特异地切割线性泛素链的全新去泛素化酶...
- CentOS 7下安装jdk1.8
- 源码分享,送你一份Google Python class源码
- 【渝粤教育】 国家开放大学2020年春季 1171科学与技术 参考试题
- python画矩阵图_Python根据已知邻接矩阵绘制无向图操作示例
- 【 如何将.vue文件中的所有css代码放入一个.css文件中】
- reviewboard安装实战
- ubuntu14.04设置sublime text3为默认文本编辑器
- iview 按需引入解决加载慢的问题
- pycharm怎么做html网页_html下拉菜单怎么做
- 备机大地院系项目dataguard archived_log及standby_log
- (java)五大常用算法
- Red Hat 9.0下载及安装
- 向 webview 添加 userScript
- 解决Android调试不显示 “允许USB调试” 认证窗口
- httpwatch初级使用
- 心田花开写人作文指导,小学优秀写人作文推荐
- Android开发之使用createFromStream加载图片发现图片变小
- 数论——佩尔方程变量分解
- C语言趣味程序设计编程百例精解
热门文章
- Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'的解决
- 每天,每周,每月,每年程序员该做的事情
- 让ie6(opera)支持微软雅黑字体
- 初学SSH 配置+错误总结
- 如何运用Reflection转化DynamicObject和Generic集合为DataTable
- javascript 学习之 数组式的对象
- android PreferenceActivity详解
- 【转载】Centos7修改root密码
- 【题解】Luogu P2783 有机化学之神偶尔会做作弊
- openstack--1--基础环境搭建