关于案例中核心dao的解释
很多小伙伴不太理解核心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的。
最新文章
- widows和Linux java加密注意事项
- ibatis 批量插入oracle总结
- git 删除远程源,新增加源
- JSP页面上用横线代替文本框
- Table of Contents - JavaSE
- Apache POI 合并单元格
- 【SSMS增强工具】SQL Sharper 2014介绍
- 自定义标签(JSTL)
- 游戏基础元素——Cocos2d-x学习历程(八)
- 状压dp找寻环的个数 Codeforces Beta Round #11 D
- Angular.js学习笔记 (一)
- scrapy使用
- Echarts地图使用经验-地图变形和添加数据
- Browserify模块化使用教程
- css中position 定位的兼容性,以及定位的使用及层级的应用
- zabbix监测图形界面显示方框乱码解决方法
- Maven 在新版eclipse报错的解决
- LLVM的安装
- Centos7.4修改主机名HostName颜色及格式
- DevExpress v18.1新版亮点——DevExtreme篇(一)
热门文章
- HDU 1143 Tri Tiling (递推)
- jQuery插件接口的实现,jquery.extend
- 在vs code中使用dotnet watch run
- 安德鲁斯Launcher得到的装在手机的应用程序列表
- JS中常用函数总结
- Effective C++:规定24:如果所有的单位都需要的参数类型转换,使用请做到这一点non-member功能
- @RequestBody标记的形参,与APP接口不能直接用
- WPF里的一些Effect特效
- WPF学习笔记:(二)数据绑定模式与INotifyPropertyChanged接口
- sql执行分页查询