Mybatis学习之自定义持久层框架(五) 自定义持久层框架:封装CRUD操作
2024-10-19 07:25:10
前言
上一篇文章我们完成了生产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中对其进行调用了。
最新文章
- 可跨域的单点登录(SSO)实现方案【附.net代码】
- [译]How to Write a Git Commit Message
- iOS7 edgesForExtendedLayout -- 解决冲突 / 系统偏移
- java从一个目录拷贝文件到另一个目录下
- 通过xib加载UITableViewCell的新方式
- 转自大楚网:微软SAPI:让你的软件能说会道
- iframe与frameset(转载)
- 通过AOP 实现异常统一管理
- getHibernateTemplate().saveOrUpdate 不运行
- 逻辑(if)、关系、数字、条件运算符
- 开源网络库的分析libev libevent nginx ....
- iOS tableViewCell 在cell赋值、网络加载照片位置偏移大小错乱,做一个类似qq列表的tableview 更新3
- 关于JavaScript的框架和库
- okHttp超时报错解决方案
- easyui combox 手动添加项
- Flask最强攻略 - 跟DragonFire学Flask - 第二篇 Flask 中的 Render Redirect HttpResponse
- vue2.0 之计算属性和数据监听
- IIS7 配置Http重定向到Https
- c++——数据结构
- 在Struts2框架中使用OGNL表达式(在jsp页面中使用OGNL表达式)
热门文章
- 在用free()函数释放指针内存时为何要将其指针置空
- ch2_8_4求解投骰子游戏问题
- MySQL在线DDL工具 gh-ost
- 阿里二面,面试官居然把 TCP 三次握手问的这么细致
- Android Studio 分类整理 res/layout 中的布局文件
- KubeEdge EdgeMesh设计原理
- Java(299-314)【线程、同步】
- Java面向对象OOP思想概述
- 通过Dapr实现一个简单的基于.net的微服务电商系统(六)——一步一步教你如何撸Dapr之Actor服务
- k8s 创建私有docker仓库 登陆授权令牌的Secret