博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis由浅入深day01_5mybatis开发dao的方法(5.1SqlSession使用范围_5.2原始dao开发方法)...
阅读量:5952 次
发布时间:2019-06-19

本文共 2454 字,大约阅读时间需要 8 分钟。

mybatis开发dao的方法

  5.1 SqlSession使用范围

    5.1.1 SqlSessionFactoryBuilder

通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory

SqlSessionFactoryBuilder当成一个工具类使用即可,不需要使用单例管理SqlSessionFactoryBuilder

在需要创建SqlSessionFactory时候,只需要new一次SqlSessionFactoryBuilder即可。

  

    5.1.2 SqlSessionFactory

通过SqlSessionFactory创建SqlSession,使用单例模式管理sqlSessionFactory(工厂一旦创建,使用一个实例)。

 

将来mybatis和spring整合后,使用单例模式管理sqlSessionFactory。

  

    5.1.3 SqlSession

SqlSession是一个面向用户(程序员)的接口。

SqlSession中提供了很多操作数据库的方法:如:selectOne(返回单个对象)、selectList(返回单个或多个对象)、。

 

SqlSession是线程不安全的,在SqlSesion实现类中除了有接口中的方法(操作数据库的方法)还有数据域属性。

struts中的action,接收参数需要在struts的类中通过成员变量定义来接收参数,如果用户提交了username属性,username就是一个数据域它放在成员变量里面就不可能用单例了,因为有可能多线程并发请求的话,每个线程共用了它们成员变量的值,这样导致我们访问冲突,所以说是不安全的,struts是多例管理的

 

SqlSession最佳应用场合在方法体内,定义成局部变量使用。

 

  5.2 原始dao开发方法(程序员需要写dao接口和dao实现类)

    5.2.1 思路

程序员需要写dao接口和dao实现类。

需要向dao实现类中注入SqlSessionFactory,在方法体内通过SqlSessionFactory创建SqlSession

 

    5.2.2 dao接口

  

    5.2.3 dao接口实现类

import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import cn.itcast.mybatis.po.User;/** * dao接口实现类 * @author yejin */public class UserDaoImpl implements UserDao{        //需要向dao实现类中注入SqlSessionFactory    //这里通过构造方法注入    private SqlSessionFactory sqlSessionFactory;    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {        this.sqlSessionFactory = sqlSessionFactory;    }         @Override    public User findUserById(int id) {        SqlSession sqlSession = sqlSessionFactory.openSession();        User user = sqlSession.selectOne("test.findUserById", id);                //释放资源        sqlSession.close();        return user;    }    @Override    public void insertUser(User user) {        SqlSession sqlSession = sqlSessionFactory.openSession();                //执行插入操作        sqlSession.insert("test.insertUser", user);                //提交事务        sqlSession.commit();        //释放资源        sqlSession.close();    }    @Override    public void deleteUser(int id) {        SqlSession sqlSession = sqlSessionFactory.openSession();                //执行插入操作        sqlSession.delete("test.deleteUser", id);                //提交事务        sqlSession.commit();        //释放资源        sqlSession.close();    }}

  

    5.2.4 测试代码:

 

    5.2.5 总结原始 dao开发问题

1、dao接口实现类方法中存在大量模板方法,设想能否将这些代码提取出来,大大减轻程序员的工作量。

 

2、调用sqlsession方法时将statement的id硬编码了

 

3、调用sqlsession方法时传入的变量,由于sqlsession方法使用泛型,即使变量类型传入错误,在编译阶段也不报错,不利于程序员开发。

转载于:https://www.cnblogs.com/justdoitba/p/8040340.html

你可能感兴趣的文章
UBoot常用命令手册
查看>>
全过程项目结构总结
查看>>
cas单点注销失败Error Sending message to url endpoint
查看>>
使用SerialPort 对象实现串口拨号器通信[下]
查看>>
VC文档与视图结构学习总结
查看>>
Freemarker内置函数使用
查看>>
开启微信公众号之旅
查看>>
jstl数字转日期
查看>>
Windows下Hadoop eclipse开发平台搭建
查看>>
Http Live Streaming 实现iphone在线播放视频[转]
查看>>
【温故而知新-Javascript】使用canvas元素(第一部分)
查看>>
【求助】测试XCode v8.0的正向反向功能
查看>>
使用Python代码处理Excel
查看>>
【温故而知新-Javascript】窗口效果 (全屏显示窗口、定时关闭窗口)
查看>>
四种方法下载网络文本数据到本地内存
查看>>
pl/sql配置连接远程数据库oracle,本地没有安装oracle数据库的情况下
查看>>
SharePoint 2013 Step by Step—— 为终端用户提供故障恢复的解决方案 Part I
查看>>
如何保护你的linux操作系统
查看>>
Linux gcc编译简介、常用命令
查看>>
[] ubuntu 14.04 搜狗拼音输入法安装
查看>>