在进入主题之前先提一下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开发方法的更多相关文章

  1. Mybatis笔记 - 原始Dao开发方法

    使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法.原始Dao的开发方式是基于入门程序的基础上,对 控制程序 进行分层开发,程序员需要 编写 Dao接口 和 ...

  2. mybatis由浅入深day01_5mybatis开发dao的方法(5.1SqlSession使用范围_5.2原始dao开发方法)

    5 mybatis开发dao的方法 5.1 SqlSession使用范围 5.1.1 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂 ...

  3. 【MyBatis学习03】原始dao开发方法及其弊端

    上一篇博文总结了一下mybatis的入门,接下来就要开发dao方法了,这篇博文主要总结一下mybatis中原始dao开发的方法,最后并总结一下原始dao开发方法的弊端.mybatis中dao开发应该使 ...

  4. mybatis使用原始Dao开发中存在的问题

    1.Dao方法存在重复代码:通过SqlSessionFactory创建SqlSession,调用SqlSession的送数据库操作方法. 2.调用SqlSession的数据库需要制定statement ...

  5. Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6869133.html 前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(一)——My ...

  6. 【mybatis深度历险系列】深入浅出mybatis中原始dao的开发和mapper代理开发

    使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法.mybatis在进行dao开发的时候,涉及到三姐妹,分别是SqlSessionFactoryBuilder ...

  7. Mybatis学习(2)原始dao开发和使用mapper接口代理开发

    基础知识: 1).SqlSessionFactoryBuilder: 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory.将SqlSessionFact ...

  8. Mybatis学习笔记(三) —— DAO开发方法

    一.SqlSession的使用范围 SqlSession中封装了对数据库的操作,如:查询.插入.更新.删除等. SqlSession通过SqlSessionFactory创建. SqlSessionF ...

  9. MyBatis开发Dao的原始Dao开发和Mapper动态代理开发

    目录 咳咳...初学者看文字(Mapper接口开发四个规范)属实有点费劲,博主我就废了点劲做了如下图,方便理解: 原始Dao开发方式 1. 编写映射文件 3.编写Dao实现类 4.编写Dao测试 Ma ...

随机推荐

  1. 在开启kerberos 后,hbase存在数据命名空间的问题(解决方案)

    用hbase的超级用户 su - hbasekinit -kt /etc/security/keytabs/hbase.headless.keytab hbase-bigdata@STARYEA.CO ...

  2. imageview无法显示图片:java.lang.RuntimeException: Canvas: trying to draw too large(281520000bytes) bitmap

    图片太大需要压缩. 压缩方法:http://jingyan.baidu.com/article/cdddd41c3ef41153ca00e162.html 如果特别大(几十M),可以先用在线的图片压缩 ...

  3. Django---第三方

    第三方: 3.富文本编辑器:此处以tinymce为例 使用编辑器的显示效果为: 1.下载安装 在网站pypi网站搜索并下载"django-tinymce-2.4.0" 解压 tar ...

  4. C# Redis实战(二)

    二.Redis服务  在C# Redis实战(一)中我将所有文件拷贝到了D盘redis文件夹下,其中redis-server.exe即为其服务端程序,双击即开始运行,如图             可以 ...

  5. js实现最长子串算法

    var arr=["weeweadbshow","jhsaasrbgddbshow","ccbshow"]; function Longes ...

  6. IE浏览器清除缓存没用

    再想买更新JS和css文件之后, 使用 internet 里面的删除选项 发现样式和事件还是没用变 最终发现 需要 按 f12 找到这个清缓存才正常解决问题

  7. LNMP详解

    目录 Nginx配置    1 PHP解析    1 Mysql操作    3 服务安装    3 连接测试    3 数据配置    3 Blogs建立    4   LNMP 环境 Mysql:1 ...

  8. 归档日志空间满导致DB启动失败

    现象 登录失败 告警日志: 由此可知,归档日志空间已满 解决方式: 一.增大归档日志空间 1.启动数据库至nomount [oracle@CentOS ~]$ sqlplus / as sysdba ...

  9. RTC实时时间系统学习笔记(一)---------------UART串口

    临近研三了,自己倾向于要找数字IC方面的工作,苦于教研室的项目一直都是调板子调板子调板子,真正用到FPGA的很少,,本着"工欲善其事必先利其器"的原则,在网上搜寻如何自学FPGA, ...

  10. 【Python】 获取MP3信息replica

    replica 初衷是想要整理iphone中的音乐.IOS(我自己的手机还是IOS8.3,新版本的系统可能有变化了)自带的音乐软件中所有音乐文件都存放在/var/mobile/Media/iTunes ...