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;
} @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方法使用泛型,即使变量类型传入错误,在编译阶段也不报错,不利于程序员开发。
最新文章
- VC CComboBox用法总结
- TCP Server—Linux
- 网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
- 夺命雷公狗---DEDECMS----16dedecms取出首页今日更新
- Matlab 的reshape函数(转)
- [Java] Web开发HTTP状态码整理
- MemSQL Start[c]UP 2.0 - Round 2 - Online Round
- java中关于json传图片的方法
- 0xc0000428 winload.exe无法验证其数字签名的解决方法
- hdoj 3861 The King’s Problem【强连通缩点建图&;&;最小路径覆盖】
- CentOS6.5 配置防火墙+允许指定ip访问端口
- 【NIO】dawn在buffer用法
- 虚拟机VMware网络类型&;&;SSH远程连接Linux
- 常见web攻击总结
- JSP页面、包含
- 关于总结一些CentOS7常用的运维命令
- Xpath在选择器中正确,在代码中返回的是空列表问题
- 我就骂你了,我tm还想打你呢
- loj#2038. 「SHOI2015」超能粒子炮・改
- 免费的局域网协作办公方式—onlyoffice文档协作
热门文章
- js正则表达式判断一个字符串是否是正确的有数字和小数点组成的金钱形式和 判读数值类型的正则表达式
- VisualVM使用Jstatd和JMX远程监控配置(转载)
- Linux RPM 命令参数使用详解 查看 rpm包依赖性
- tomcat 启动 报错Neither the JAVA_HOME nor the JRE_HOME environment variable is definedtemp
- TOMCAT8源码分析——SESSION管理分析(上)
- mybatis中如果存在参数不再实体中的是如何处理
- Spring 网路搜集的情报
- 怎样在IIS下配置PHP
- 我的mac的其他满了,发现是一个叫core的文件
- 关于Cocos2d-x节点和精灵节点的坐标、位置以及大小的设置