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开发方法)...相关推荐

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

    前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(一)--MyBatis的基础知识.MybatisFirst中存在大量重复的代码.这次简化下代码: 使用MyBatis开发Dao ...

  2. 原始Dao开发方法以及存在的问题

    存在的问题: 原始Dao开发中存在以下问题: 1.Dao方法体存在重复代码:通过SqlSessionFactory创建SqlSession,调用SqlSession的数据库操作方法 2.调用sqlSe ...

  3. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    阅读目录 一:原始dao开发方法 二:mapper代理方法(只需要mapper接口,相当于dao接口) 承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisS ...

  4. Mybatis 原始Dao层开发

    对Mybatis进行原始Dao层开发的举例子: 定义获取session工具类: package com.langsin.unit;import java.io.InputStream;import o ...

  5. 原始dao和Mapper动态代理的开放方式---Mybatis学习笔记(六)

    1.原始Dao开发方式 原始Dao开发方法需要程序员编写Dao接口和Dao实现类. 1.映射文件:(user.xml) <?xml version="1.0" encodin ...

  6. 利用dao传值给mysql_koa+mysql+vue+socket.io全栈开发之数据访问篇

    后端搭起大体的框架后,接着涉及到的就是如何将数据持久化的问题,也就是对数据库进行 CURD 操作. 关于数据库方案, mongodb 和 mysql 都使用过,但我选用的是 mysql,原因: 目前为 ...

  7. 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 标题 错 ...

  8. android切换字体颜色,Android开发实现按钮点击切换背景并修改文字颜色的方法

    本文实例讲述了Android开发实现按钮点击切换背景并修改文字颜色的方法.分享给大家供大家参考,具体如下: 其实原理很简单,用到的是selector,用来设置android:background和an ...

  9. vue开发环境和生产环境里面解决跨域的几种方法

    vue开发环境和生产环境里面解决跨域的几种方法 参考文章: (1)vue开发环境和生产环境里面解决跨域的几种方法 (2)https://www.cnblogs.com/pass245939319/p/ ...

最新文章

  1. 生成中文词云图的制作:带有不同的背板
  2. 【Android 进程保活】提升进程优先级 ( 1 像素 Activity 提高进程优先级 | taskAffinity 亲和性说明 | 运行效果 | 源码资源 )
  3. 错误The request sent by the client was syntactically incorrect ()的解决
  4. Laravel 5.2问题-----postman进api的post请求,为什么出现Forbidden?
  5. STM32的ADC采集的引脚汇总
  6. NOTEPAD++几个有用的工具栏按钮
  7. rxjs处理http请求超时
  8. 用户空间缺页异常pte_handle_fault()分析--(上)
  9. 推荐系统实践:基于数据集MovieLens构造简单推荐系统
  10. 小程序推广引导下载app的解决办法
  11. HBase安装与验证
  12. 如何使用计算机勾绘汇水面积,第八章 地形测量_同济大学:测量学(八)_ppt_大学课件预览_高等教育资讯网...
  13. 新装电脑能装w ndows7吗,为什么刚买的新电脑,却不支持安装Win7系统,背后的真实原因?...
  14. 易到完成股权变更 乐视仍未完全退出中信系入局
  15. 多示例学习 (multi-instance learning, MIL)学习路线 (分类)
  16. Error:Initialization error (angular 2 language service). Cannot read property 'CommandTypes' of unde
  17. python信号端点检测_语音信号端点检测
  18. 树莓派3B+的基础配置
  19. 网络安全工程师入门,防火墙基本概述,防火墙调试入门
  20. pat甲级考试报名费_每日一感——记第一次PAT甲级考试之感想

热门文章

  1. 猎鹰spacex_我如何重新创建SpaceX仪表板UI
  2. sh变量特性(3)默认特性
  3. 静态路由默认路由的配置
  4. 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.4.6 为克隆使用序列化
  5. 算法学习笔记(三)-----各种基础排序问题
  6. 搞IT的技术人员为什么会如此苦逼
  7. ubuntu 新建的用户 table 无法补全命令 解决办法
  8. [Swift]LeetCode1013. 将数组分成和相等的三个部分 | Partition Array Into Three Parts With Equal Sum...
  9. 【SDOI2008】仪仗队
  10. Swing学习1——总体概述