Mybatis学习之自定义持久层框架(五) 自定义持久层框架:封装CRUD操作
前言
上一篇文章我们完成了生产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中对其进行调用了。
Mybatis学习之自定义持久层框架(五) 自定义持久层框架:封装CRUD操作的更多相关文章
- Mybatis框架 使用接口Mapper实现数据库的crud操作
Mybatis的Mapper接口方式实现简单crud操作: 1.创建实体类 与数据库对应 我的实体类是<Student> package com.hxzy.mybatis.pojo; ...
- Django学习笔记第九篇--实战练习五--关于数据的改、删操作、数据库字段属性的设置和类视图
一.首先上代码.关于类视图: class register(View): #template_name = "templates/register.html" def get(se ...
- 【MyBatis学习笔记】
[MyBatis学习笔记]系列之预备篇一:ant的下载与安装 [MyBatis学习笔记]系列之预备篇二:ant入门示例 [MyBatis学习笔记]系列之一:MyBatis入门示例 [MyBatis学习 ...
- Mybatis学习之自定义持久层框架(二) 自定义持久层框架设计思路
前言 上一篇文章讲到了JDBC的基本用法及其问题所在,并提出了使用Mybatis的好处,那么今天这篇文章就来说一下该如何设计一个类似Mybatis这样的持久层框架(暂时只讲思路,具体的代码编写工作从下 ...
- Mybatis(一):手写一套持久层框架
作者 : 潘潘 未来半年,有幸与导师们一起学习交流,趁这个机会,把所学所感记录下来. 「封面图」 自毕业以后,自己先创业后上班,浮沉了近8年,内心着实焦躁,虽一直是走科班路线,但在技术道路上却始终没静 ...
- mybatis学习笔记之基础框架(2)
mybatis学习笔记之基础框架(2) mybatis是一个持久层的框架,是apache下的顶级项目. mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成满足s ...
- 【MyBatis学习01】宏观上把握MyBatis框架
今天开始学习mybatis框架,博客主要记录学习过程中的一些总结,如有错误之处,欢迎留言指正~先用mybatis的鸟鸟来镇个楼,咳咳~~ mybatis框架是一个持久层框架,是Apache下的顶级项目 ...
- mybatis学习笔记(五):mybatis 逆向工程
mybatis学习笔记(五):mybatis 逆向工程 在日常开发中,如果数据库中存在多张表,自己手动创建 多个pojo 类和编写 SQL 语法配置文件,未免太过繁琐,mybatis 也提供了一键式生 ...
- mybatis 学习笔记(三):mapper 代理开发 dao 层
mybatis 学习笔记(三):mapper 代理开发 dao 层 优势 通过使用mapper 代理,我们可以不需要去编写具体的实现类(使用 getMapper() 方法自动生成),只需编写接口即可, ...
随机推荐
- 如何让python脚本支持命令行参数--getopt和click模块
一.如何让python脚本支持命令行参数 1.使用click模块 如何使用这个模块,在我前面的博客已经写过了,可参考:https://www.cnblogs.com/Zzbj/p/11309130.h ...
- 前瞻|Amundsen的数据血缘功能
目前,Amundsen并不支持表级别和列级别的数据血缘功能,也没有办法展示数据的来龙去脉. 作为Amundsen一项非常核心的功能,Lineage功能早已经提上日程,并进入设计与研发阶段.本位将展示此 ...
- ionic3 清除navpush的堆栈 (android真机返回键bug)
清除navpush的堆栈可以使用 方法一:ionic3文档 this.navCtrl.popToRoot(); //直接返回根组件 方法二: push 后再删除之前页面即可. this.navCtrl ...
- 学习笔记-vue.js快捷登录 enter
一般监听在输入密码的input监听keyup事件,加enter修饰符.如果input是组件,加上.native修饰符.<div id="app"> <input ...
- Python函数参数和注解是什么
四种参数 Python函数func定义如下: def func(first, *args, second="Hello World", **kwargs): print(first ...
- 快速排序(QuickSort)Java版
快速排序 快速排序是对冒泡排序的一种改进. 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排 ...
- GAMES101作业2
作业任务: 填写并调用函数 rasterize_triangle(const Triangle& t). 即实现光栅化 该函数的内部工作流程如下: 创建三角形的 2 维 bounding bo ...
- Java8中的默认方法
作者:汤圆 个人博客:javalover.cc 前言 大家好啊,我是汤圆,今天给大家带来的是<Java8中的默认方法>,希望对大家有帮助,谢谢 文章纯属原创,个人总结难免有差错,如果有,麻 ...
- Java(171-194)【接口、多态】
1.接口概述与生活举例 接口就是一种公共的规范标准 只要符合规范标准,就可以大家通用 2.接口的定义基本格式 public interface 接口名称 { // 抽象方法 / ...
- 【笔记】《Redis设计与实现》chapter19 事务
chapter19 事务 Redis通过MULTI.EXEC.WATCH等命令来实现事务功能 19.1 事务的实现 事务开始 redis> MULTI ok 通过切换客户端状态的flag属性的R ...