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 ... 
随机推荐
- ubuntu安装Eclipse无图标(手动创建软件图标) —— 其他的软件也一样
			//退回根目录 cd / //进入图标存放目录 cd usr/share/applications/ //用文本编辑器打开打开eclipse的图标文件,没有会自动创建 sudo gedit eclip ... 
- kafka集群参数解析server.properties
			#server.properties配置文件 broker.id=1 port=9092 host.name=url1 zookeeper.connect=url1:2181,url2:2181,ur ... 
- 叮咚recovery——想刷什么包就刷什么包
			我手机vivo s11t,我之前试过刷机,刷过很多包,发现只有官网下载的相同版本的固件包可以成功刷入,其他的任何的包都不行,我弟弟的手机vivo x3L,遇见和我一样的情况,他想刷小米的MIUI,开始 ... 
- 本站已稳定运行了XX天,网页时间显示功能实现方法
			这个是我昨晚上添加的效果, 分为三个部分: 1.本站已稳定运行了多少天的实现: 直接把下面代码复制到后台你想添加的位置即可. 1 2 3 4 5 6 7 8 9 本站已稳定运行了 <strong ... 
- js获取元素的滚动高度,和距离顶部的高度
			jq: 获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 : $(window).width(); 获取页面的文档高度 $(doc ... 
- 深入理解Java虚拟机(第2版) 笔记目录
			本篇为读深入理解Java虚拟机(第2版)一书的笔记目录. Java 运行期数据区 Java 垃圾回收算法 Java 内存分配策略 Java 类文件结构 Java 加载.链接.初始化 Java 类加载器 
- webpack打包不识别es6语法的坑
			今天Vue项目npm run build 后webpack,报错uglifyjs,自己研究了一下,翻译过来,意思是不识别项目中写的高级语法,这里要把项目里es6语法转es5让浏览器识别, 也就是web ... 
- Linux基础命令详解
			1 遍历目录 cd:change dicrectory的缩写 .或者./代表当前目录,..或../代表上一级目录,cd -代表进入上一次的目录. 2 文件和目录列表 ls:list的缩写,会显示目录下 ... 
- java 10 中 var关键字用法
			引用:https://mp.weixin.qq.com/s/n1tcJ0CywSi0j-YycGPwxg what java10引入了局部变量折断 var用于声明局部变量. 如var user=new ... 
- 【XML】 XML格式一些记录
			XML XML格式常用于网络通讯,本身不会有作为而是作为纯文本传输,可以说它是一种独立于应用和硬件的数据传输工具.虽然看起来XML比HTML要更加简单,也知道的更加晚一点,但是需要知道的是,XML才是 ... 
