前言

上一篇文章我们完成了生产sqlSession的工作,与数据库的连接和创建会话的工作都已完成,今天我们可以来决定会话的内容了。

封装CRUD操作

首先我们需要创建一个SqlSession接口类,在其中定义会话的内容接口,同样,今天所提及的类都存放在“sqlSession”包下,SqlSession接口类的代码如下所示:

  1. 1 package com.hardy.sqlSession;
  2. 2
  3. 3 import java.sql.SQLException;
  4. 4 import java.util.List;
  5. 5
  6. 6 public interface SqlSession {
  7. 7
  8. 8 //为Dao接口生成代理实现类
  9. 9 public <T> T getMapper(Class<?> mapperClass);
  10. 10
  11. 11 public void close() throws SQLException;
  12. 12
  13. 13 /* 查询所有:
  14. 14 根据statementId,找到Mapper.xml文件中对应的sql语句
  15. 15 Object...Parameter 表示支持传递多个参数值进行查询
  16. 16 */
  17. 17 public <E> List<E> selectList(String statementId, Object... Parameter) throws Exception;
  18. 18
  19. 19 // 根据条件查询单个
  20. 20 public <T> T selectOne(String statementId, Object... Parameter) throws Exception;
  21. 21
  22. 22 }

为方便由浅入深地学习,我们暂时之定义查询单个和查询列表的接口。

编写完接口类,就到实现类这里了,在相同包下创建一个DefaultSqlSession,编写如下代码:

  1. 1 package com.hardy.sqlSession;
  2. 2
  3. 3 import com.hardy.pojo.Configuration;
  4. 4 import com.hardy.pojo.MappedStatement;
  5. 5 import com.hardy.pojo.SqlOperationEnum;
  6. 6
  7. 7 import java.beans.IntrospectionException;
  8. 8 import java.lang.reflect.*;
  9. 9 import java.sql.SQLException;
  10. 10 import java.util.List;
  11. 11
  12. 12 public class DefaultSqlSession implements SqlSession {
  13. 13
  14. 14 // 处理器对象
  15. 15 private Executor simpleExecutor = new SimpleExecutor();
  16. 16
  17. 17 private Configuration configuration;
  18. 18
  19. 19 public DefaultSqlSession(Configuration configuration) {
  20. 20 this.configuration = configuration;
  21. 21 }
  22. 22
  23. 23 @Override
  24. 24 public <E> List<E> selectList(String statementId, Object... params) throws Exception {
  25. 25 // 未完,待续
  26. 26 MappedStatement mappedStatement = configuration.getMappedStatementMap().get(statementId);
  27. 27
  28. 28 return (List<E>) list;
  29. 29 }
  30. 30
  31. 31 @Override
  32. 32 public <T> T selectOne(String statementId, Object... params) throws Exception {
  33. 33 List<Object> objects = selectList(statementId, params);
  34. 34 if (objects.size() == 1) {
  35. 35 return (T) objects.get(0);
  36. 36 } else {
  37. 37 throw new RuntimeException("查无此数据或查询结果过多");
  38. 38 }
  39. 39
  40. 40 }
  41. 41
  42. 42 @Override
  43. 43 public <T> T getMapper(Class<?> mapperClass) {
  44. 44 //未完,待续
  45. 45 return null;
  46. 46 }
  47. 47
  48. 48 @Override
  49. 49 public void close() throws SQLException {
  50. 50 simpleExecutor.close();
  51. 51 }
  52. 52
  53. 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. flutter兼论

    Flutter是Google开发的一套全新的跨平台.开源UI框架,支持iOS.Android系统开发,并且是未来新操作系统Fuchsia的默认开发套件.自从2017年5月发布 第一个版本以来,目前Fl ...

  2. 采用React + Fabric + ImageMagick 实现大图片DIY定制

    一,需求背景: 某个印刷公司,有一系列的设计文件模板.接到客户订单时,就在这些设计文件模板上,做一些简单的定制,就能够满足客户的印刷需求. 如在设计文件模板上添加客户的Logo,二维码,联系方式等. ...

  3. apktool 回编译报错:No resource identifier found for attribute 'xxxxxx' in package 'android' W:

    C:\xxxx\app-release\res\layout-v26\xxxx.xml:5: error: No resource identifier found for attribute 'xx ...

  4. 攻防世界 reverse 进阶 easyre-153

    easyre-153 查壳: upx壳 脱壳: 1 int __cdecl main(int argc, const char **argv, const char **envp) 2 { 3 int ...

  5. TreeMap和HashMap的元素比较

    写在前面的话 2021.04,准备面试和CCF CSP认证的我准备做一套CCF模拟题,然后就有了此篇博客(x 题目:201912-2 回收站报数 题目截图: 第一个想法:读取每个垃圾的位置,存入Tre ...

  6. ELK7.11.2版本安装部署及ElastAlert告警相关配置

    文档开篇,我还是要说一遍,虽然我在文档内容中也会说好多遍,但是希望大家不要嫌我墨迹: 请多看官方文档,请多看命令行报错信息,请多看日志信息,很多时候它们比百度.比必应.比谷歌有用: 请不要嫌麻烦,打开 ...

  7. 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之基础配置-04

    自动化kolla-ansible部署ubuntu20.04+openstack-victoria之基础配置-04 欢迎加QQ群:1026880196 进行交流学习 近期我发现网上有人转载或者复制原创博 ...

  8. 后端Spring Boot+前端Android交互+MySQL增删查改(Java+Kotlin实现)

    1 前言&概述 这篇文章是基于这篇文章的更新,主要是更新了一些技术栈以及开发工具的版本,还有修复了一些Bug. 本文是SpringBoot+Android+MySQL的增删查改的简单实现,用到 ...

  9. 《Effective C++》部分内容学习笔记整理

    简介 此笔记为<Effective C++>中部分内容的学习笔记. 目录 文档:<Effective C++>

  10. &#127822;

    江湖中有一本练了就能天下无敌的葵花宝典,大家都想得到它.如果有一天葵花宝典被公开了,人人都有机会练,到底是好事还是坏事呢? 这会成为一个灾难. 因为一个人拥有时,练不练是一个人的事.大家都拥有,练不练 ...