mybatis由浅入深day01_5mybatis开发dao的方法(5.1SqlSession使用范围_5.2原始dao开发方法)...
5 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;} @Overridepublic User findUserById(int id) {SqlSession sqlSession = sqlSessionFactory.openSession();User user = sqlSession.selectOne("test.findUserById", id);//释放资源 sqlSession.close();return user;}@Overridepublic void insertUser(User user) {SqlSession sqlSession = sqlSessionFactory.openSession();//执行插入操作sqlSession.insert("test.insertUser", user);//提交事务 sqlSession.commit();//释放资源 sqlSession.close();}@Overridepublic 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
mybatis由浅入深day01_5mybatis开发dao的方法(5.1SqlSession使用范围_5.2原始dao开发方法)...相关推荐
- Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发
前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(一)--MyBatis的基础知识.MybatisFirst中存在大量重复的代码.这次简化下代码: 使用MyBatis开发Dao ...
- 原始Dao开发方法以及存在的问题
存在的问题: 原始Dao开发中存在以下问题: 1.Dao方法体存在重复代码:通过SqlSessionFactory创建SqlSession,调用SqlSession的数据库操作方法 2.调用sqlSe ...
- mybatis入门基础(二)----原始dao的开发和mapper代理开发
阅读目录 一:原始dao开发方法 二:mapper代理方法(只需要mapper接口,相当于dao接口) 承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisS ...
- Mybatis 原始Dao层开发
对Mybatis进行原始Dao层开发的举例子: 定义获取session工具类: package com.langsin.unit;import java.io.InputStream;import o ...
- 原始dao和Mapper动态代理的开放方式---Mybatis学习笔记(六)
1.原始Dao开发方式 原始Dao开发方法需要程序员编写Dao接口和Dao实现类. 1.映射文件:(user.xml) <?xml version="1.0" encodin ...
- 利用dao传值给mysql_koa+mysql+vue+socket.io全栈开发之数据访问篇
后端搭起大体的框架后,接着涉及到的就是如何将数据持久化的问题,也就是对数据库进行 CURD 操作. 关于数据库方案, mongodb 和 mysql 都使用过,但我选用的是 mysql,原因: 目前为 ...
- mybatis 绑定失败:Invalid bound statement (not found): com.demo.service.api.dao.SysUserMapper.insert
mybatis 绑定失败:Invalid bound statement (not found): com.demo.service.api.dao.SysUserMapper.insert 标题 错 ...
- android切换字体颜色,Android开发实现按钮点击切换背景并修改文字颜色的方法
本文实例讲述了Android开发实现按钮点击切换背景并修改文字颜色的方法.分享给大家供大家参考,具体如下: 其实原理很简单,用到的是selector,用来设置android:background和an ...
- vue开发环境和生产环境里面解决跨域的几种方法
vue开发环境和生产环境里面解决跨域的几种方法 参考文章: (1)vue开发环境和生产环境里面解决跨域的几种方法 (2)https://www.cnblogs.com/pass245939319/p/ ...
最新文章
- 生成中文词云图的制作:带有不同的背板
- 【Android 进程保活】提升进程优先级 ( 1 像素 Activity 提高进程优先级 | taskAffinity 亲和性说明 | 运行效果 | 源码资源 )
- 错误The request sent by the client was syntactically incorrect ()的解决
- Laravel 5.2问题-----postman进api的post请求,为什么出现Forbidden?
- STM32的ADC采集的引脚汇总
- NOTEPAD++几个有用的工具栏按钮
- rxjs处理http请求超时
- 用户空间缺页异常pte_handle_fault()分析--(上)
- 推荐系统实践:基于数据集MovieLens构造简单推荐系统
- 小程序推广引导下载app的解决办法
- HBase安装与验证
- 如何使用计算机勾绘汇水面积,第八章 地形测量_同济大学:测量学(八)_ppt_大学课件预览_高等教育资讯网...
- 新装电脑能装w ndows7吗,为什么刚买的新电脑,却不支持安装Win7系统,背后的真实原因?...
- 易到完成股权变更 乐视仍未完全退出中信系入局
- 多示例学习 (multi-instance learning, MIL)学习路线 (分类)
- Error:Initialization error (angular 2 language service). Cannot read property 'CommandTypes' of unde
- python信号端点检测_语音信号端点检测
- 树莓派3B+的基础配置
- 网络安全工程师入门,防火墙基本概述,防火墙调试入门
- pat甲级考试报名费_每日一感——记第一次PAT甲级考试之感想
热门文章
- 猎鹰spacex_我如何重新创建SpaceX仪表板UI
- sh变量特性(3)默认特性
- 静态路由默认路由的配置
- 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.4.6 为克隆使用序列化
- 算法学习笔记(三)-----各种基础排序问题
- 搞IT的技术人员为什么会如此苦逼
- ubuntu 新建的用户 table 无法补全命令 解决办法
- [Swift]LeetCode1013. 将数组分成和相等的三个部分 | Partition Array Into Three Parts With Equal Sum...
- 【SDOI2008】仪仗队
- Swing学习1——总体概述