mybatis 通过配置父类数据源连接和关闭数据,进行junit单元测试
来源:https://blog.csdn.net/Bigbig_lyx/article/details/80646005
解决问题,单元测试没经过单独配置,每个测试方法中要添加配置数据源
一:配置父类
import java.io.IOException;
import java.io.Reader; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.BeforeClass; /**
* 提供配置数据源连接和关闭数据连接
*/
public class BaseMapper { private static SqlSessionFactory sqlSessionFactory;
@BeforeClass
public static void init(){
try{
Reader reader=Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
reader.close();
}catch(IOException ignore){
ignore.printStackTrace();
}
} public SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
} }
一:新建单元测试类UserMapperTestEx.java,继承自测试基类BaseMapperTest.java
package tk.mybatis.simple.mapper; import java.lang.reflect.Proxy;
import java.util.Date;
import java.util.List; import org.apache.ibatis.session.SqlSession;
import org.junit.Test; import junit.framework.Assert;
import tk.mybatis.simple.model.SysRole;
import tk.mybatis.simple.model.SysUser; public class UserMapperTestEx extends BaseMapperTest{ @Test
public void testSelectById(){ SqlSession sqlSession=getSqlSession();
try {
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
SysUser user = userMapper.selectById(1l);
printCountryList(user);
} finally {
// TODO: handle finally clause
sqlSession.close();
}
} private void printCountryList(SysUser user){
System.out.printf("%-4d%4s%4s\n",
user.getId(),
user.getUserEmail(),
user.getUserPassword(),
user.getUserEmail(),
user.getUserInfo(),
user.getHeadImg(),
user.getCreateTime()
);
} @Test
public void selectById(){ SqlSession sqlSession=getSqlSession();
try {
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
SysUser user = userMapper.selectById(1l);
Assert.assertNotNull(user);
Assert.assertEquals("admin", user.getUserName());
} finally {
// TODO: handle finally clause
sqlSession.close();
}
} @Test
public void selectByAll(){ SqlSession sqlSession=getSqlSession();
try {
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
List<SysUser> userList = userMapper.selectAll();
Assert.assertNotNull(userList);
Assert.assertTrue(userList.size()>0);
} finally {
// TODO: handle finally clause
sqlSession.close();
}
} @Test
public void selectRolesByUserId1(){ SqlSession sqlSession=getSqlSession();
try {
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
List<SysRole> roleList = userMapper.selectRolesByUserId1(1l);
Assert.assertNotNull(roleList);
for(SysRole role:roleList){
System.out.println(role.toString1());
}
} finally {
// TODO: handle finally clause
sqlSession.close();
}
} @Test
public void selectRolesByUserId2(){ SqlSession sqlSession=getSqlSession();
try {
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
List<SysRole> roleList = userMapper.selectRolesByUserId2(1l);
for(SysRole role:roleList){
System.out.println(role.toString2());
}
} finally {
// TODO: handle finally clause
sqlSession.close();
}
} @Test
public void insert(){ SqlSession sqlSession=getSqlSession();
try {
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
SysUser user=new SysUser();
user.setUserName("liuyx");
user.setUserPassword("eazytec@123");
user.setUserEmail("liuyexiang@byosoft.com.cn");
user.setUserInfo("liuyx info");
user.setHeadImg(new byte[]{1,2,3,4,5,6,7,8,9,0});
user.setCreateTime(new Date());
int result=userMapper.insert(user);
Assert.assertEquals(1, result);
Assert.assertNull(user.getId());
} finally {
// TODO: handle finally clause
//为了不影响其他操作,设置为回滚,数据库自增长序列仍在进行,
//默认的sqlSessionFactory.openSession()是不自动提交的
//不手动执行commit就不会提交到数据库中
//sqlSession.rollback();
sqlSession.commit();
sqlSession.close();
}
} @Test
public void insert2(){ SqlSession sqlSession=getSqlSession();
try {
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
SysUser user=new SysUser();
user.setUserName("liuyx");
user.setUserPassword("eazytec@123");
user.setUserEmail("liuyexiang@byosoft.com.cn");
user.setUserInfo("liuyx info");
user.setHeadImg(new byte[]{1,2,3,4,5,6,7,8,9,0});
user.setCreateTime(new Date());
int result=userMapper.insert2(user);
Assert.assertEquals(1, result);
Assert.assertNotNull(user.getId());
} finally {
// TODO: handle finally clause
//sqlSession.rollback();
sqlSession.commit();
sqlSession.close();
}
} @Test
public void update(){
SqlSession sqlSession=getSqlSession(); try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
SysUser user = userMapper.selectById(1001l);
System.out.println("获取id为1001的用户userName,更新前为:" + user.getUserName());
user.setUserName("test" + new Date().toString());
user.setUserEmail("test@byosoft.com.cn");
int result = userMapper.updateById(user);
user = userMapper.selectById(user.getId());
System.out.println("获取id为1001的用户userName为,更新后为:" + user.getUserName());
} finally {
// TODO: handle finally clause
sqlSession.commit();
sqlSession.close();
}
} @Test
public void delete(){
SqlSession sqlSession=getSqlSession(); try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//int result = userMapper.deleteById(1003l);
int result2=userMapper.deleteByUser(userMapper.selectById(1004l));
} finally {
// TODO: handle finally clause
sqlSession.commit();
sqlSession.close();
}
} /**
* 多参数sql
*/
@Test
public void selectRolesByUserIdAndRoleEnabled(){ SqlSession sqlSession=getSqlSession();
try {
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
List<SysRole> roleList = userMapper.selectRolesByUserIdAndRoleEnabled(1l, 1,"admin","test");
for(SysRole role:roleList){
System.out.println(role.toString1());
}
} finally {
// TODO: handle finally clause
sqlSession.close();
}
} /**
* 简单实现动态代理
*/
@Test
public void testProxy(){
SqlSession sqlSession=getSqlSession();
MyMapperProxy userMapperProxy=new MyMapperProxy(UserMapper.class, sqlSession);
UserMapper userMapper=(UserMapper) Proxy.newProxyInstance(
Thread.currentThread().getContextClassLoader(),
new Class[] {UserMapper.class},
userMapperProxy
);
System.out.println("testProxy");
List<SysUser> user=userMapper.selectAll();
}
}
mybatis 通过配置父类数据源连接和关闭数据,进行junit单元测试的更多相关文章
- springboot入门系列(四):SpringBoot和Mybatis配置多数据源连接多个数据库
SpringBoot和Mybatis配置多数据源连接多个数据库 目前业界操作数据库的框架一般是 Mybatis,但在很多业务场景下,我们需要在一个工程里配置多个数据源来实现业务逻辑.在SpringBo ...
- 【Mybatis】MyBatis之配置自定义数据源(十一)
本例是在[Mybatis]MyBatis之配置多数据源(十)的基础上进行拓展,查看本例请先学习第十章 实现原理 1.扩展Spring的AbstractRoutingDataSource抽象类(该类充当 ...
- [教程] Spring+Mybatis环境配置多数据源
一.简要概述 在做项目的时候遇到需要从两个数据源获取数据,项目使用的Spring + Mybatis环境,看到网上有一些关于多数据源的配置,自己也整理学习一下,然后自动切换实现从不同的数据源获取数据功 ...
- springboot 2.1.3 + mybatis + druid配置多数据源
在一些大型的项目中,通常会选择多数据库来满足一些业务需求,此处讲解使用springboot.mybatis和druid来配置多数据源 1.依赖配置 pom文件引入相关依赖 <dependency ...
- SpringBoot系列七:SpringBoot 整合 MyBatis(配置 druid 数据源、配置 MyBatis、事务控制、druid 监控)
1.概念:SpringBoot 整合 MyBatis 2.背景 SpringBoot 得到最终效果是一个简化到极致的 WEB 开发,但是只要牵扯到 WEB 开发,就绝对不可能缺少数据层操作,所有的开发 ...
- 【Mybatis】MyBatis之配置多数据源(十)
在做项目的过程中,有时候一个数据源是不够,那么就需要配置多个数据源.本例介绍mybatis多数据源配置 前言 一般项目单数据源,使用流程如下: 单个数据源绑定给sessionFactory,再在Dao ...
- Spring系列 之数据源的配置 数据库 数据源 连接池的区别
Spring系列之数据源的配置 数据源,连接池,数据库三者的区别 连接池:这个应该都学习过,比如c3p0,druid等等,连接池的作用是为了提高程序的效率,因为频繁的去创建,关闭数据库连接,会对性能有 ...
- Confluence 6 新 Confluence 安装配置一个数据源连接
如果在你的 Tomcat 中配置了数据源,并且Confluence 设置指南在安装的时候检测到这个配置的时候,配置数据源的选项将会提供给你进行配置.入股你希望使用数据源,请参考下面的配置. 1. 停止 ...
- Spring Boot + MyBatis + Pagehelper 配置多数据源
前言: 本文为springboot结合mybatis配置多数据源,在项目当中很多情况是使用主从数据源来读写分离,还有就是操作多库,本文介绍如何一个项目同时使用2个数据源. 也希望大家带着思考去学习!博 ...
随机推荐
- Scala 学习(6)之「对象」
目录 object 伴生对象 继承抽象类 apply方法 main方法 用 object 来实现枚举功能 object 相当于 class 的单个实例,通常在里面放一些静态的 field 或者 met ...
- centos7下redis安全相关
Centos7下redis安全相关 在使用云服务器时,安装的redis3.0+版本都关闭了protected-mode,因而都遭遇了挖矿病毒的攻击,使得服务器99%的占用率!! 因此我们在使用redi ...
- hadoop_2.6.5集群安装
安装hadoop2.6.5集群: 1.规划设计: JacK6:NameNode,jobtracker JacK7:secondnode,datenode,tasktracker JacK8:datan ...
- UML--> plantUML安装
plantUML安装 因为基于intellid idea,所以第一步自行安装. setting->plugins 搜索plantUML 安装完成后,重启idea 会有如下显示 安装Graphvi ...
- Cobaltstrike指令/beacon命令大全
browserpivot 注入受害者浏览器进程bypassuac 绕过UACcancel 取消正在进行的下载cd 切换目录checkin 强制让被控端回连一次clear 清除beacon内部的任务队列 ...
- Serverless 的运行原理与组件架构
本文重点探讨下开发者使用 Serverless 时经常遇到的一些问题,以及如何解决 过去一年,我们和大量 Serverless 用户进行了线上和线下的交流,了解大家的业务场景.对 Serverless ...
- 使用信号管理nginx的父子进程
master进程 通过CHLD监控worker进程,worker异常退出,通过CHLD信号拉起worker进程. 接收信号 TERM,INT信号表示立刻停止worker进程 QUIT信号表示优雅的停止 ...
- javase第一章(了解java)
------------恢复内容开始------------ java介绍 java这门语言,如果你是一名IT从业者,那么就一定是会有所耳闻的,毕竟,这是编程史上其商业化最成功的一门语言,当然, 编程 ...
- mplayer使用心得[转]
一直在用mplayer,其他的播放器很少用.以下是我使用过程中的一些心得. 注意,下面用的路径都是在我的电脑上的路径,使用时请不要照抄!应该换成你的电脑上的正确路径. 一.首先还是讲安装方面的问题 ...
- Serverless 的资源评估与成本探索
Serverless 布道师在讲解 Serverless 架构和云主机等区别的时候,总会有类似的描述: 传统业务开发完成想要上线,需要评估资源使用.根据评估结果,购买云主机,并且需要根据业务的发展不断 ...