很多小伙伴不太理解核心dao,说这是干什么的,接下来我将一一为大家解答:

1.说到核心dao不得不说到单表操作,单表操作顾名思义是对单张数据库表的CRUD操作,实际情况中我们追求将表与表的关系映射到对象与对象的关系,例如有两张表分别是学生和老师表,

我们知道一个学生可能会有多个老师教学,那么一个老师也会教很多学生,这是一个多对多的关系,在数据库中表示:

student=(id,s_name,...);//学生表
teacher=(id,t_name,...);//老师表
student_teacher_rel=(s_id,t_id);//学生老师关系表

对于多对多关系的两张表需要有第三张表来维护关系,第三张表中字段分别是其他两张表的id

public class Student{
private Integer id;
private String s_name;
...
private List<Teacher> teachers; getter和setter省略
} public class Teacher {
private Integer id;
private String t_name;
...
private List<Student> students; getter和setter省略
}

2.为了表示一个学生有多名老师教学,一个老师给多名学生上课的这种多对多关系,我们需要通过比较复杂的查询和几乎恶心的封装来表示对象之间的关系,尽管mybaits有配置可以表示这种关系,但是在更为复杂的对象关系中,你的配置就会极为复杂且容易出错在你不精通sql和mybatis的情况下,特别是不使用orm框架的时候,裸写jdbc会崩溃。

3.所以,可以将为每张表建立实体,包括关系表,将多表的查询拆成一个个单表查询,这样做虽然可能增加了数据库的压力(一条多表连接/子查询语句变成多条单表的简单查询),代码的行数上会增多,但是逻辑上会变得异常清晰,因为每张表对应一个类,每个字段对应一个属性,所以可以为其高度封装。

4.因为是单表操作,数据库表和java类,表字段和类属性真正意义上做到了一一对应,所以可以抽离出一个公共的泛型dao来为所有dao提供CRUD操作。

5.所有单表的CRUD操作可以描述为insert(T t)增加一条数据、delete(int id)删除一条数据、update(T t)修改一条数据、getOne(int id)获得一条数据、getOne(T t)获得多条数据,然后根据对象属性值制定动态sql,如案例一 https://www.cnblogs.com/xiaogblog/p/11052544.html 中SqlFactory,又如案例二 https://www.cnblogs.com/xiaogblog/p/11062916.html 中mapper.xml配置的动态sql语句。

6.如果表名=类名,列名=属性名,在通过一定规则将列类型转换成属性类型,则获取数据库连接后可以通过io操作直接生成Entity、Dao、DaoImpl等,并继承核心dao,那么项目一创建就直接写service和controller,是不是很嗨皮。

7.mybatis中的generator就是通过这种思路来生成entity、mapper和mpaper.xml的。

关于案例中核心dao的解释的更多相关文章

  1. 重学 Java 设计模式:实战代理模式「模拟mybatis-spring中定义DAO接口,使用代理类方式操作数据库原理实现场景」

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 难以跨越的瓶颈期,把你拿捏滴死死的! 编程开发学习过程中遇到的瓶颈期,往往是由于看不 ...

  2. java的(PO,VO,TO,BO,DAO,POJO)解释

    java的(PO,VO,TO,BO,DAO,POJO)解释 O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定, ...

  3. java的(PO,VO,TO,BO,DAO,POJO)解释1

    java的(PO,VO,TO,BO,DAO,POJO)解释  O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定 ...

  4. 关于VO、PO的理解——java的(PO,VO,TO,BO,DAO,POJO)解释

    O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据. 在O/R Mapping的世界里,有 ...

  5. Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理

    Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理 说明:Java生鲜电商平台中,我们将进一步理解微服务架构的核心要点和实现原理,为读者的实践提供微服务的设计模式,以期让微服务 ...

  6. javaEE中关于dao层和services层的理解

    javaEE中关于dao层和services层的理解 入职已经一个多月了,作为刚毕业的新人,除了熟悉公司的项目,学习公司的框架,了解项目的一些业务逻辑之外,也就在没学到什么:因为刚入职, 带我的那个师 ...

  7. spring中注解的通俗解释

    我们在没有用注解写spring配置文件的时候,会在spring配置文件中定义Dao层的bean,这样我们在service层中,写setDao方法,就可以直接通过接口调用Dao层,用了注解写法后,在配置 ...

  8. oracle中imp命令具体解释

    oracle中imp命令具体解释 Oracle的导入有用程序(Import utility)同意从数据库提取数据,而且将数据写入操作系统文件.imp使用的基本格式:imp[username[/pass ...

  9. Android中的动画具体解释系列【4】——Activity之间切换动画

    前面介绍了Android中的逐帧动画和补间动画,并实现了简单的自己定义动画.这一篇我们来看看怎样将Android中的动画运用到实际开发中的一个场景--Activity之间跳转动画. 一.定义动画资源 ...

随机推荐

  1. WPF 拼音输入法

    原文:WPF 拼音输入法 本文来告诉大家如何使用 WPF 来写一个输入法,使用的方式是钩子. 目录 键盘 解析键盘 获得按键 输入流向 算法 实际上本文是在使用一个好用的软件 希沃白板 的时候发现在里 ...

  2. sql数据库恢复神器--Log Explorer 4.2使用教程

    对于程序员来说,世界最悲催的事情是什么?——就是手贱,把数据库的数据给删掉了,更悲催的是木有任何数据库备份  感谢万能的度娘,感谢无私奉献的网友们,最感谢强大的LogExplorer工具 . 使用Lo ...

  3. 开源软件的许可(License)

    自由软件基金会(Free Software Foundation):FSF 0. GNU GNU (GNU is Not Unix 的递归缩写)计划,又称革奴计划,是由 Richard Stallma ...

  4. Android studio中的6大布局

    1.相对布局代码: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns: ...

  5. Ueditor 在.net core 中的使用

    参考模仿了 https://blog.csdn.net/qq_34220236/article/details/80581811 这篇文章 要注意的是,去ueditor官网下的包,大多不可用. 要自己 ...

  6. wxWindows

    用C++编写跨平台程序 中文版说明 本教程由Gxl117翻译并将继续维护,这是本教程的第一稿,假设发现错误请与我(Email:gxl117@yahoo.com.cn)联系让我能及时修正它.之后还会对这 ...

  7. OpenMP中的同步和互斥

    在多线程编程中必须考虑到不同的线程对同一个变量进行读写访问引起的数据竞争问题.如果线程间没有互斥机制,则不同线程对同一变量的访问顺序是不确定的,有可能导致错误的执行结果. OpenMP中有两种不同类型 ...

  8. WPF之动画

    原文:WPF之动画 线性关键帧.不连续关键帧动画: <Window.Triggers> <EventTrigger RoutedEvent="Window.Loaded&q ...

  9. 正定矩阵(definite matrix)

    1. 基本定义 在线性规划中,一个对称的 n×n 的实值矩阵 M,如果满足对于任意的非零列向量 z,都有 zTMz>0. 更一般地,对于 n×n 的 Hermitian 矩阵(原矩阵=共轭转置, ...

  10. WPF与缓动(一) N次缓动

    原文:WPF与缓动(一) N次缓动   WPF与缓动(一)  N次缓动                                                                  ...