MyBatis(5)MyBatis DAO接口开发
2015-11-05 15:54
627 查看
SqlSessionFactory, SqlSession范围和生命周期
在《MyBatis(1)框架原理》 中提到, SqlSessionFactory的作用是加载MyBatis的配置文件并创建SqlSession,而SqlSession的作用则是操作数据库并返回相应的结果。因此:* SqlSessionFactory
SqlSessionFactory由SqlSessionFactoryBuilder加载配置文件创建。一旦被创建就应该在应用的运行期间一直存在,不需要重复加载配置文件来重新创建它。因此,其生命周期为从应用开始直至应用停止。
* SqlSession
SqlSession的实例在MyBatis中不是线程安全的,因此在每一次请求时,都需要新建一个SqlSession来响应请求。其生命周期为方法范围内。但是在每一次请求结束后,都需要关闭此SqlSession。
DAO接口开发
以下程序是在《 MyBatis(4)MyBatis入门程序 》 的基础上修改而来的。如果你没有从前面博客看过来,可以去《 MyBatis(4)MyBatis入门程序 》 中下载代码然后对照修改即可。需求分析
对数据库中的用户表进行按ID查询、按用户名模糊查询、插入新用户、按ID删除用户、更新指定用户信息。需求设计
在《 MyBatis(4)MyBatis入门程序 》 中,我们已经完成了以上需求的简单设计。在此,直接设计DAO接口以及实现DAO接口。DAO接口
public interface UserDao { public List<UserPojo> selectUser () throws Exception; public UserPojo selectUserByID (int id) throws Exception; public List<UserPojo> selectUserByName (String name) throws Exception; public int insertUser (UserPojo user) throws Exception; public void delUserByID (int id) throws Exception; public void updateUser (UserPojo user) throws Exception; }
DAO接口实现
1、注入SqlSessionFactorypublic class UserDaoImpl implements UserDao { private SqlSessionFactory sqlSessionFactory; public UserDaoImpl(SqlSessionFactory sqlSessionFactory) { this.sqlSessionFactory = sqlSessionFactory; } }
2、根据ID查询用户
@Override public UserPojo selectUserByID(int id) throws Exception { //创建SqlSession SqlSession sqlSession = null; try { sqlSession = sqlSessionFactory.openSession(); //通过sqlSession操作数据库 return sqlSession.selectOne("mybatisDemo1.selectUserByID", id); } finally { if (null != sqlSession) { //释放资源 sqlSession.close(); } } }
3、根据用户名模糊查找
@Override public List<UserPojo> selectUserByName(String name) throws Exception { //创建SqlSession SqlSession sqlSession = null; try { sqlSession = sqlSessionFactory.openSession(); //通过sqlSession操作数据库 return sqlSession.selectList("mybatisDemo1.selectUserByName", name); } finally { if (null != sqlSession) { //释放资源 sqlSession.close(); } } }
4、新增加用户
@Override public int insertUser(UserPojo user) throws Exception { //创建SqlSession SqlSession sqlSession = null; try { sqlSession = sqlSessionFactory.openSession(); //通过sqlSession操作数据库 sqlSession.insert("mybatisDemo1.insertUser", user); sqlSession.commit(); return user.getId(); } finally { if (null != sqlSession) { //释放资源 sqlSession.close(); } } }
5、按ID删除用户
@Override public void delUserByID(int id) throws Exception { //创建SqlSession SqlSession sqlSession = null; try { sqlSession = sqlSessionFactory.openSession(); //通过sqlSession操作数据库 sqlSession.delete("mybatisDemo1.delUserByID", id); sqlSession.commit(); } finally { if (null != sqlSession) { //释放资源 sqlSession.close(); } } }
6、更新指定用户信息
@Override public void updateUser(UserPojo user) throws Exception { //创建SqlSession SqlSession sqlSession = null; try { sqlSession = sqlSessionFactory.openSession(); sqlSession.update("mybatisDemo1.updateUser", user); sqlSession.commit(); } finally { if (null != sqlSession) { //释放资源 sqlSession.close(); } } }
测试
见代码(代码地址在最下面)DAO接口开发总结
1、在每一个需求设计的过程中,可以看到有很多的模板代码。如:sqlSession = sqlSessionFactory.openSession(); sqlSession.commit(); if (null != sqlSession) { //释放资源 sqlSession.close(); }
2、在SqlSession调用各个方法操作数据库时,由于MyBatis是采用泛型的设计,在传入参数时,如果类型与SQL映射语句中的参数类型不一致,在编译阶段也不会有提示错误,一定要等到运行阶段。
代码
1、git@code.csdn.net:xl890727/mybatisdemo.git2、https://code.csdn.net/xl890727/mybatisdemo.git
中得dao分支
相关文章推荐
- 积分common_credit_log 表中的 operation操作缩写备注
- Android控件:自定义View学习资源汇总
- 自己动手搭建软件WiFi热点
- windows下testlink配置为中文
- hiho刷题日记——第三天KMP算法
- Javascript编程风格
- Android Paint之 setXfermode PorterDuffXfermode 讲解
- 上课记录笔记 数据类型的转换
- 151105的测试总结
- [erlang] mnesia
- 将node作为服务器的几种方式
- js replace 替换
- Load和CPU利用率是如何算出来的 (转发)
- GCCXML 安装
- JavaScript高级程序设计之DOM 扩展之专有扩展之children属性第11.4.2讲
- 一看就明白的爬虫入门讲解-基础理论篇(上篇)
- 活在自己的世界,难以沟通的“码农”
- 用xfire实现基于java的webservice接口调用
- ios 通知NSNotificationCenter 的名字可否同名
- IO流的操作规律