前言

上一篇文章我们完成了生产sqlSession的工作,与数据库的连接和创建会话的工作都已完成,今天我们可以来决定会话的内容了。

封装CRUD操作

首先我们需要创建一个SqlSession接口类,在其中定义会话的内容接口,同样,今天所提及的类都存放在“sqlSession”包下,SqlSession接口类的代码如下所示:

 1 package com.hardy.sqlSession;
2
3 import java.sql.SQLException;
4 import java.util.List;
5
6 public interface SqlSession {
7
8 //为Dao接口生成代理实现类
9 public <T> T getMapper(Class<?> mapperClass);
10
11 public void close() throws SQLException;
12
13 /* 查询所有:
14 根据statementId,找到Mapper.xml文件中对应的sql语句
15 Object...Parameter 表示支持传递多个参数值进行查询
16 */
17 public <E> List<E> selectList(String statementId, Object... Parameter) throws Exception;
18
19 // 根据条件查询单个
20 public <T> T selectOne(String statementId, Object... Parameter) throws Exception;
21
22 }

为方便由浅入深地学习,我们暂时之定义查询单个和查询列表的接口。

编写完接口类,就到实现类这里了,在相同包下创建一个DefaultSqlSession,编写如下代码:

 1 package com.hardy.sqlSession;
2
3 import com.hardy.pojo.Configuration;
4 import com.hardy.pojo.MappedStatement;
5 import com.hardy.pojo.SqlOperationEnum;
6
7 import java.beans.IntrospectionException;
8 import java.lang.reflect.*;
9 import java.sql.SQLException;
10 import java.util.List;
11
12 public class DefaultSqlSession implements SqlSession {
13
14 // 处理器对象
15 private Executor simpleExecutor = new SimpleExecutor();
16
17 private Configuration configuration;
18
19 public DefaultSqlSession(Configuration configuration) {
20 this.configuration = configuration;
21 }
22
23 @Override
24 public <E> List<E> selectList(String statementId, Object... params) throws Exception {
25 // 未完,待续
26 MappedStatement mappedStatement = configuration.getMappedStatementMap().get(statementId);
27
28 return (List<E>) list;
29 }
30
31 @Override
32 public <T> T selectOne(String statementId, Object... params) throws Exception {
33 List<Object> objects = selectList(statementId, params);
34 if (objects.size() == 1) {
35 return (T) objects.get(0);
36 } else {
37 throw new RuntimeException("查无此数据或查询结果过多");
38 }
39
40 }
41
42 @Override
43 public <T> T getMapper(Class<?> mapperClass) {
44 //未完,待续
45 return null;
46 }
47
48 @Override
49 public void close() throws SQLException {
50 simpleExecutor.close();
51 }
52
53 }

总结

今天暂时先定义好了sqlSession相关的接口,下一篇文章会实现真正的CRUD操作调用类,然后就可以在DefaultSqlSession中对其进行调用了。

最新文章

  1. 可跨域的单点登录(SSO)实现方案【附.net代码】
  2. [译]How to Write a Git Commit Message
  3. iOS7 edgesForExtendedLayout -- 解决冲突 / 系统偏移
  4. java从一个目录拷贝文件到另一个目录下
  5. 通过xib加载UITableViewCell的新方式
  6. 转自大楚网:微软SAPI:让你的软件能说会道
  7. iframe与frameset(转载)
  8. 通过AOP 实现异常统一管理
  9. getHibernateTemplate().saveOrUpdate 不运行
  10. 逻辑(if)、关系、数字、条件运算符
  11. 开源网络库的分析libev libevent nginx ....
  12. iOS tableViewCell 在cell赋值、网络加载照片位置偏移大小错乱,做一个类似qq列表的tableview 更新3
  13. 关于JavaScript的框架和库
  14. okHttp超时报错解决方案
  15. easyui combox 手动添加项
  16. Flask最强攻略 - 跟DragonFire学Flask - 第二篇 Flask 中的 Render Redirect HttpResponse
  17. vue2.0 之计算属性和数据监听
  18. IIS7 配置Http重定向到Https
  19. c++——数据结构
  20. 在Struts2框架中使用OGNL表达式(在jsp页面中使用OGNL表达式)

热门文章

  1. 在用free()函数释放指针内存时为何要将其指针置空
  2. ch2_8_4求解投骰子游戏问题
  3. MySQL在线DDL工具 gh-ost
  4. 阿里二面,面试官居然把 TCP 三次握手问的这么细致
  5. Android Studio 分类整理 res/layout 中的布局文件
  6. KubeEdge EdgeMesh设计原理
  7. Java(299-314)【线程、同步】
  8. Java面向对象OOP思想概述
  9. 通过Dapr实现一个简单的基于.net的微服务电商系统(六)——一步一步教你如何撸Dapr之Actor服务
  10. k8s 创建私有docker仓库 登陆授权令牌的Secret