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() 方法自动生成),只需编写接口即可, ...
随机推荐
- gtk+2.0中函数set_widget_font_size()函数在编译时未定义的解决办法
自己写一个头文件即可,代码如下: 在.c文件中包含该头文件即可
- 基于sk_learn的k近邻算法实现-mnist手写数字识别且要求97%以上精确率
1. 导入需要的库 from sklearn.datasets import fetch_openml import numpy as np from sklearn.neighbors import ...
- 面向前端开发人员的VSCode自动化插件
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://blog.bitsrc.io/vscode-automations-for-fro ...
- Java中的面向切面编程(AOP)
一.什么是AOP? Aspect Oriented Programming ,即面向切面编程. AOP是对面向对象编程的一个补充. 它的目的是将复杂的需求分解为不同的切面,将散布在系统中的公共功能集中 ...
- Redis系列-存储篇string主要操作命令
Redis系列-存储篇string主要操作命令 通过上两篇的介绍,我们的redis服务器基本跑起来.db都具有最基本的CRUD功能,我们沿着这个脉络,开始学习redis丰富的数据结构之旅,当然先从最简 ...
- C. 【例题3】单词替换
C . [ 例 题 3 ] 单 词 替 换 解析 可以一个个单词读取,输入完之后, 讲整个句子的每个单词遍历一次, 如果这个单词是与单词 a a a相同的话, 就输出 b b b, 否则输出这个单词 ...
- SQLserver数据库安装教程
大家好,这期给大家带来一期SQL server的安装教程 下载SQL Server 2019 Developer 官方网址: https://www.microsoft.com/zh-cn/sql-s ...
- leetcode 刷题(数组篇)152题 乘积最大子数组 (动态规划)
题目描述 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积. 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子 ...
- Day15_87_通过反射机制获取某个特定的方法
通过反射机制获取某个特定的方法 反射是通过 方法名+形参列表来区分各个方法的(形参列表要用class类型.加.class) 示例代码 import java.lang.reflect.Method; ...
- Day01_12_Java的类型转换
Java类型转换 实例 public class 类型转换 { public static void main(String[] args) { int i =128; byte b= (byte) ...