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个数据源. 也希望大家带着思考去学习!博 ...
随机推荐
- 【WPF学习】第十章 WPF布局示例
前几章用了相当大的篇幅研究有关WPF布局容器的复杂内容.在掌握了这些基础知识后,就可以研究几个完整的布局示例.通过研究完整的布局示例,可更好的理解各种WPF布局概念在实际窗口中的工作方式. 一.列设置 ...
- [bzoj1875] [洛谷P2151] [SDOI2009] HH去散步
Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但 是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又 ...
- 手势识别控制pygame精灵
步骤: 编写简易pygame精灵游戏(只实现键盘上下左右控制) 解决opencv手势识别核心问题 上述2部分对接上 pygame部分我们只加载个背景,然后里面放1只乌龟精灵,用键盘的上下左右键来控制, ...
- Nito.AsyncEx 这个库
有一个非常聪明的小伙子 (我高度赞扬) 叫 Stephen Cleary ,他写了一个很棒的 Extension 集,共同参与开发的还有 Stephen Toub (他显然是经验丰富的),所以我充分信 ...
- JS-06-定时器
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- HDU-5902-GCD is Funny解题笔记
Alex has invented a new game for fun. There are n integers at a board and he performs the following ...
- Mavn 项目 引入第三方jar包 导致ClassNotFoundException
案例 我有一个Maven构建的项目,项目模块之间有依赖关系,我需要用到一个本地的jar包,而该jar包不能通过配置pom.xml文件从远程仓库自动下载,于是我直接导入该jar包到其中一个项目,不通过p ...
- python笔记04
数据类型(二) 今日内容 1.列表 2.元组 内容回顾和补充 1.计算机基础 ①硬件:cpu,内存,硬盘,主板,网卡 ②操作系统:linux,centos, Ubuntu,redhat windows ...
- python中线程共享资源问题的解决
线程跟进程有些相似,有时被称作轻量级的进程,但不同的是,所有的线程运行在同一个进程中,共享相同的运行坏境. 进程和线程都是实现多任务的一种方式,例如:在同一台计算机上能同时运行多个QQ(进程),一个Q ...
- web开发发展历程
cs架构:(软件主要运行在桌面上,数据库软件运行在服务器端) 缺点:如果web应用修改或升级,需要每个客户端逐个升级桌面App,因此Browser/server模式开始流行. bs架构:应用程序的逻辑 ...