前言

上一篇文章我们完成了生产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操作的更多相关文章

  1. Mybatis框架 使用接口Mapper实现数据库的crud操作

    Mybatis的Mapper接口方式实现简单crud操作: 1.创建实体类 与数据库对应 我的实体类是<Student>   package com.hxzy.mybatis.pojo; ...

  2. Django学习笔记第九篇--实战练习五--关于数据的改、删操作、数据库字段属性的设置和类视图

    一.首先上代码.关于类视图: class register(View): #template_name = "templates/register.html" def get(se ...

  3. 【MyBatis学习笔记】

    [MyBatis学习笔记]系列之预备篇一:ant的下载与安装 [MyBatis学习笔记]系列之预备篇二:ant入门示例 [MyBatis学习笔记]系列之一:MyBatis入门示例 [MyBatis学习 ...

  4. Mybatis学习之自定义持久层框架(二) 自定义持久层框架设计思路

    前言 上一篇文章讲到了JDBC的基本用法及其问题所在,并提出了使用Mybatis的好处,那么今天这篇文章就来说一下该如何设计一个类似Mybatis这样的持久层框架(暂时只讲思路,具体的代码编写工作从下 ...

  5. Mybatis(一):手写一套持久层框架

    作者 : 潘潘 未来半年,有幸与导师们一起学习交流,趁这个机会,把所学所感记录下来. 「封面图」 自毕业以后,自己先创业后上班,浮沉了近8年,内心着实焦躁,虽一直是走科班路线,但在技术道路上却始终没静 ...

  6. mybatis学习笔记之基础框架(2)

    mybatis学习笔记之基础框架(2) mybatis是一个持久层的框架,是apache下的顶级项目. mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成满足s ...

  7. 【MyBatis学习01】宏观上把握MyBatis框架

    今天开始学习mybatis框架,博客主要记录学习过程中的一些总结,如有错误之处,欢迎留言指正~先用mybatis的鸟鸟来镇个楼,咳咳~~ mybatis框架是一个持久层框架,是Apache下的顶级项目 ...

  8. mybatis学习笔记(五):mybatis 逆向工程

    mybatis学习笔记(五):mybatis 逆向工程 在日常开发中,如果数据库中存在多张表,自己手动创建 多个pojo 类和编写 SQL 语法配置文件,未免太过繁琐,mybatis 也提供了一键式生 ...

  9. mybatis 学习笔记(三):mapper 代理开发 dao 层

    mybatis 学习笔记(三):mapper 代理开发 dao 层 优势 通过使用mapper 代理,我们可以不需要去编写具体的实现类(使用 getMapper() 方法自动生成),只需编写接口即可, ...

随机推荐

  1. 2019 GDUT Rating Contest III : Problem C. Team Tic Tac Toe

    题面: C. Team Tic Tac Toe Input file: standard input Output file: standard output Time limit: 1 second M ...

  2. 15款NOSQL数据库

    1.MongoDB 介绍 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.主要解决的是海量数据的访问效率问题,为WEB应用提供可扩展的高性能数据存储解决方案.当数据量达到50GB以上 ...

  3. BeautifulSoup爬取微博热搜榜

    获取url 设定请求头 requests发出get请求 实例化BeautifulSoup对象 BeautifulSoup提取数据 import requests 2 from bs4 import B ...

  4. 【LeetCode】2020-04 每日一题

    8. 字符串转换整数 (atoi)(中等) [分类]:模拟.正则表达式 [题解]: 解法1:直接模拟,但是在判断INT_MAX和INT_MIN上需要注意,因为直接判断会超出范围,所以可以将式子转换一下 ...

  5. 前瞻|Amundsen的数据血缘功能

    目前,Amundsen并不支持表级别和列级别的数据血缘功能,也没有办法展示数据的来龙去脉. 作为Amundsen一项非常核心的功能,Lineage功能早已经提上日程,并进入设计与研发阶段.本位将展示此 ...

  6. JS定时器使用,定时定点,固定时刻,循环执行

    JS定时器使用,定时定点,固定时刻,循环执行 本文概述:本文主要介绍通过JS实现定时定点执行,在某一个固定时刻执行某个函数的方法.比如说在下一个整点执行,在每一个整点执行,每隔10分钟定时执行的方法. ...

  7. Go Protobuf(比xml小3-10倍, 快20-100倍)

    简介 Protocol Buffers是什么? protocol buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小.更快.更为简单.你可以定义数据 ...

  8. 【linux】驱动-10-pinctrl子系统

    目录 前言 10. pinctrl子系统 10.1 参考路径 10.2 pinctrl子系统主要工作 10.2 pinctrl子系统格式说明 10.3 概念 10.4 实例分析 10.4.1 pin ...

  9. 记一次phpwind的漏洞测试学习

    实验:phpwind的文件目录遍历 工具:windows2003,Windows10,phpstudy2018,phpwind8.7 在Windows2003中,安装phpstudy并且部署phpwi ...

  10. RPC理论介绍

    目录 RPC概述 RPC是什么 和本地调用有什么区别 RPC模式 RPC的三个过程 为什么要使用RPC RPC和其他协议的区别 RPC使用场景 RPC的流程 RPC核心概念术语 RPC协议 RPC框架 ...