Mybatis的原始dao开发方法
在进入主题之前先提一下sqlSession。sqlSession是一个面向用户(程序员)的接口。
sqlSession中提供了很多操作数据库的方法,如: selectOne(返回单个对象)、selectList(返回单个或多个对象)。sqlSession是线程不安全的,在sqlSession实现了类中除了接口的方法(操作数据库的方法)还有数据域数据。
所以,sqlSession最佳应用场合在方法体内,定义成局部变量使用
在原始的dao开发方法,程序员需要写接口和实现类(本实例中user.xml和user.java在前文中已经提到过故不赘述)。
接口代码如下:
public interface UserDao {
//根据id查询用户
public void findUserById(int id);
//根据id删除用户
public void deleteUserById(int id);
//更新用户
public void updateUser(User user) throws ParseException;
}
而且根据以上的结论可以知道需要向dao实现类注入sqlSessionFactory,在方法体内通过sqlSessioFactory在方法体内创建sqlSession。
实现类如下:
public class UserDaoimpl implements UserDao {
private SqlSessionFactory sqlSessionFactory;
public UserDaoimpl(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
//根据id查询用户
@Override
public void findUserById(int id) {
SqlSession sqlSession=sqlSessionFactory.openSession();
User user=sqlSession.selectOne("test.findUserById", id);
System.out.println(user);
sqlSession.close();
}
//根据id删除用户
@Override
public void deleteUserById(int id) {
SqlSession sqlSession=sqlSessionFactory.openSession();
sqlSession.delete("test.deleteUserById",1);
sqlSession.commit();
sqlSession.close();
}
//更新用户
@Override
public void updateUser(User user) throws ParseException {
SqlSession sqlSession=sqlSessionFactory.openSession();
sqlSession.insert("test.insertUser",user);
sqlSession.commit();
sqlSession.close();
}
}
接下来就是测试代码了,注意测试代码中@before注解,这个注解的意思是在所有的test之前执行该注解里的内容,即执行测试之前生成sqlSessionFactory。
public class DaoTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void setup() throws IOException{
InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void findUserByIdTest(){
UserDao userDao = new UserDaoImpl(sqlSessionFactory);
User user = userDao.findUserById(1);
System.out.println(user);
}
@Test
public void insertUserTest(){
UserDao userDao = new UserDaoImpl(sqlSessionFactory);
userDao.insertUser(new User("大凯","1",new Date(),"河北"));
}
@Test
public void deleteUserTest(){
UserDao userDao = new UserDaoImpl(sqlSessionFactory);
userDao.deleteUser(30);
}
@Test
public void updateUserTest(){
UserDao userDao = new UserDaoImpl(sqlSessionFactory);
userDao.updateUser(new User(31,"毛蛋","1",new Date(),"江西"));;
}
}
好了,大家可以看到在实现类里还是有很多重复代码,这显然不是我们想看到的,所以这种原始dao方法还有瑕疵,具体怎么改进请看接下来的更新。。。
Mybatis的原始dao开发方法的更多相关文章
- Mybatis笔记 - 原始Dao开发方法
使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法.原始Dao的开发方式是基于入门程序的基础上,对 控制程序 进行分层开发,程序员需要 编写 Dao接口 和 ...
- mybatis由浅入深day01_5mybatis开发dao的方法(5.1SqlSession使用范围_5.2原始dao开发方法)
5 mybatis开发dao的方法 5.1 SqlSession使用范围 5.1.1 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂 ...
- 【MyBatis学习03】原始dao开发方法及其弊端
上一篇博文总结了一下mybatis的入门,接下来就要开发dao方法了,这篇博文主要总结一下mybatis中原始dao开发的方法,最后并总结一下原始dao开发方法的弊端.mybatis中dao开发应该使 ...
- mybatis使用原始Dao开发中存在的问题
1.Dao方法存在重复代码:通过SqlSessionFactory创建SqlSession,调用SqlSession的送数据库操作方法. 2.调用SqlSession的数据库需要制定statement ...
- Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6869133.html 前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(一)——My ...
- 【mybatis深度历险系列】深入浅出mybatis中原始dao的开发和mapper代理开发
使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法.mybatis在进行dao开发的时候,涉及到三姐妹,分别是SqlSessionFactoryBuilder ...
- Mybatis学习(2)原始dao开发和使用mapper接口代理开发
基础知识: 1).SqlSessionFactoryBuilder: 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory.将SqlSessionFact ...
- Mybatis学习笔记(三) —— DAO开发方法
一.SqlSession的使用范围 SqlSession中封装了对数据库的操作,如:查询.插入.更新.删除等. SqlSession通过SqlSessionFactory创建. SqlSessionF ...
- MyBatis开发Dao的原始Dao开发和Mapper动态代理开发
目录 咳咳...初学者看文字(Mapper接口开发四个规范)属实有点费劲,博主我就废了点劲做了如下图,方便理解: 原始Dao开发方式 1. 编写映射文件 3.编写Dao实现类 4.编写Dao测试 Ma ...
随机推荐
- n皇后问题与2n皇后问题
n皇后问题 问题描述: 如何能够在 n×n 的棋盘上放置n个皇后,使得任何一个皇后都无法直接吃掉其他的皇后 (任两个皇后都不能处于同一条横行.纵行或斜线上) 结题思路: 可采用深度优先算法,将棋盘看成 ...
- 访问不了firefox附加组件页面怎么办
最近重新使用火狐浏览器的时候发现访问不了firefox附加组件页面了,一直是一个空白的页面,估计是被墙的原因,于是网上查了查,说是修改hosts即可,我修改后就可以正常访问了.现在分享出来: 在hos ...
- 案例:中科院光机所应用大数据可视化工具-LightningChart | 见证高性能图表
中国科学院上海光学精密机械研究所 中国现代光学和激光科学领域领先研究所 中国科学院上海光学精密机械研究所(简称中科院上海光机所)是我国建立最早.规模最大的激光专业研究所,成立于1964年,现已发展成为 ...
- TLA+和并发系统正确性验证
TLA+介绍 TLA+(WIKI,官网)是一门领域特定语言,主要用于数理逻辑计算和并发系统的正确性验证.TLA+中的TLA代表的是"行为时序逻辑(Temporal Logic of Acti ...
- Python进阶_面对对象&面对过程
这节主要讲面对对象与面对过程两种编程思想的主要区别. 一. 简单对比 面向过程是一种基础的方法,它考虑的是实际的实现步骤,一般情况下,面向过程是自顶向下逐步求精,其最重要的是模块化的思想方法. 面向对 ...
- [机器学习Lesson 1 Introduction] 机器学习的动机与应用
1. Machine Learning definition(机器学习定义) Arthur Samuel(1959年)将机器学习非正式定义为:在不直接针对问题进行编程的情况下,赋予计算机学习能力的一个 ...
- 使用gevent提高IO繁忙型wsgi服务的并发量(转)
add by zhj: 在Benchmark of Python WSGI Servers一文中,作者进行详细分析,得出的结论是gevent在所有WSGI Server(包括Tornado.Uwsgi ...
- [bzoj1026][SCOI2009]windy数_数位dp
windy数 bzoj-1026 题目大意:求一段区间中的windy数个数. 注释:如果一个数任意相邻两位的差的绝对值都不小于2,这个数就是windy数,没有前导0.$区间边界<=2\cdot ...
- hihocoder [Offer收割]编程练习赛52 D 部门聚会
看了题目的讨论才会做的 首先一点,算每条边(u, v)对于n*(n+1)/2种[l, r]组合的贡献 正着算不如反着算 哪些[l, r]的组合没有包含这条边(u, v)呢 这个很好算 只需要统计u这半 ...
- Jedis操作Redis
Jedis操作Redis的常用封装方法 @Resource(name="jedispool") private JedisPool pool=null; /** * 设置缓存对象过 ...