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() 方法自动生成),只需编写接口即可, ...
随机推荐
- IntelliJ IDEA报错总结
不能运行java程序 可能是没有选择运行环境点击 edit Configurations在Use classpath of module 中选择本项目的运行环境 Run报错: Error:java: ...
- java重写toString()方法
toString()方法是Object类的方法,调用toString()会返回对象的描述信息. 1)为什么重写toString()方法呢? 如果不重写,直接调用Object类的toString()方法 ...
- PTA 将数组中的数逆序存放
7-1 将数组中的数逆序存放 (20 分) 本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素. 输入格式: 输入在第一行中给出一个正整数n(1). ...
- [图论]最短网络:kruskal
最短网络 目录 最短网络 Description Input Output Sample Input Sample Output 解析 代码 Description 农民约翰被选为他们镇的镇长!他其中 ...
- 安装mongoDB出现的问题:无法启动
在我的电脑- 管理 - 服务-中会出现一个MongoDB Server的服务,你需要去手动删除这个服务删除指令: 在cmd管理员模式下使用: sc delete MongoDB Server 然后再配 ...
- RabbitMQ 入门 (Go) - 6. 数据持久化(上)
从本节开始,我介绍一下如何将相关数据持久化到数据库,也就是上图中蓝色的部分. 目前的问题 我先运行 6 个传感器和2 个协调器,这里我使用了批处理文件: 运行后,看一下 RabbitMQ 的管理控制台 ...
- 记一次phpwind的漏洞测试学习
实验:phpwind的文件目录遍历 工具:windows2003,Windows10,phpstudy2018,phpwind8.7 在Windows2003中,安装phpstudy并且部署phpwi ...
- Mybatis-plus 下
Mybatis-plus 下 查询操作 1.查询单个用户 @Test public void testSelectById(){ User user = userMapper.selectById(1 ...
- 原创 Spring Boot 2.3 新特性分层JAR
背景 在我们实际生产容器化部署过程中,往往会遇到 Docker 镜像很大,部署发布很慢的情况 影响 docker 镜像大小的因素,主要有以下三个方面: 基础镜像的大小 .尽量选择 aphine 作为基 ...
- 数据结构☞二叉搜索树BST
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它可以是一棵空树,也可以是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它 ...