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个数据源. 也希望大家带着思考去学习!博 ...
随机推荐
- (分块)楼房重建 HYSBZ - 2957
题意 长度为n的坐标轴上,从1-n上的每一点都有一栋楼房,楼房的初识高度都为0,每一天都有一栋楼房的高度被修改(也可以不变),一栋楼房能被看见当且仅当其最高点与远点的连线不会与其他之前连线相交,问你每 ...
- [计算几何+图论]doge
题意 在平面直角坐标系上,你有一只doge在原点处.doge被绳子拴住了,绳子不会打结,没有弹性(但很柔软),并且长度为L.平面上有一些目标,因此你的doge会按照顺序去捡起它们,但是doge只能走直 ...
- 如何理解 HTMLTestRunner 中 test (result)?UnitTest是如何运行的?
我们在用Unittest框架时,生成html格式的报告一般都是用HTMLTestRunner.py这个第三方库,大概使用方法如下: with open(config.report_file, 'wb' ...
- Matlab 与 c++对txt 文档的读写格式
学习g++能够读取什么格式的txt文件. 读基本指令: >sprintf(filename, "doc_%d.txt", d); >fileptr = fopen(fi ...
- cmd 重定向
关于cmd 命令的重定向输出 2>&1 mycommand >mylog.txt 2>&1 应该是最经典的用法了. 命令的结果可以通过" %> &qu ...
- LUAMD5加密
md5里的方法: C:\Windows\System32>lua Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio > require( ...
- High一下!
代码: <a title="把这个链接拖到你的Chrome收藏夹工具栏中" href='javascript:(function() { function c() { var ...
- 使用纯C++迭代器编写归并排序
第一次尝试用C++迭代器编写算法,使用的是纯迭代器 void mergeSort(vector<int>::iterator beg, vector<int>::iterato ...
- Codeforces_820
A.直接模拟. #include<bits/stdc++.h> using namespace std; int c,v0,v1,a,l; int main() { ios::sync_w ...
- 脚本、脚本语言、shell脚本
脚本是批处理文件的延伸,是一种纯文本保存的程序,一般来说的计算机脚本程序是确定的一系列控制计算机进行运算操作动作的组合,在其中可以实现一定的逻辑分支等.脚本程序相对一般程序开发来说比较接近自然语言,可 ...