spring jdbctemplate操作多个表,是不是得写多个pojo啊? 多个dao接口, 多个dao实现,然后service调用?
答案:2 悬赏:20 手机版
解决时间 2021-02-21 17:22
- 提问者网友:轮囘Li巡影
- 2021-02-21 13:29
有没有什么具体的案例? 整合mybaits呢?如何简化这样的操作?
最佳答案
- 五星知识达人网友:我住北渡口
- 2021-02-21 13:55
在开始之前,先说下前面实现的通用泛型dao,在第四篇 通用自定义转换到JavaBean的RowMapper实现中,把获取属性的操作也放到了mapRow的方法中,这会导致在每一行数据转换的时候都会获取一遍这个类的所有属性信息,虽然有缓存但总还是只获取一次的好,之前有参考这个实现的朋友可以自行优化一下。
顺便提一下,这个实现的dao名,我命名为SuperDao,之前的泛型实现都是以BaseDao的方式来命名,因为它需要有子类来继承它并指定具体的泛型实体类才行,这次的封装不需要任何子类的继承即可使用(即使继承它,子类得到的所有方法都可以直接调用,根本没有必要,完全解耦),又想着换个名字,就取了SuperDao。
前段时间,写了一个基于Spring JdbcTemplate的通用dao,有兴趣的可以看看这个系列,记录了实现过程。
最初的目的只是为了方便自己,没想到发出来之后关注的人还挺多,看来这方面还是有实际需求的。
之前的通用dao在使用过程中,虽然省掉了我很多基础的增删改查代码操作,但是操作还是麻烦,功能也不够强大,碰到一些不大通用但是又经常碰到的情况,完全无力或不怎么使的上力,比如以下几个情况:
1、查询时,需要某个字段不等于(column != value)某个值的时候。
2、查询时,需要某个字段等于多个值(column = value1 or column = value2)的时候。
3、需要以某个或多个字段特定排序的时候。
4、当表中有个字段比较大(clob等大字段及text等),查询时又不需要用到不想返回,节省性能时。
5、分页查询很不方便,当有以某个字段排序等要求时无法实现通用。
6、有时只需要更新某一个字段时,也需要new整个对象。
7、虽然通用,但是每个实体都需要建立一个号称通用的泛型dao,有些简单的dao里面就是空的,感觉很多余。
感受中最主要的就是这几个,其它就不列举了。如果你用过或封装过一些常规的通用dao,相信也会有这些感受。
鉴于以上原因,决定再封装一个更加强大的通用dao出来,可能是我实在太懒了吧,实在不喜欢写这些重复又没技术性的代码。
阅读和参考了网上一些比较优秀的框架思路,发现还是可以实现的。有时候不是做不到,而是根本没想到往这个思路上走。目前已经封装的差不多了,在封装完成之前,连我自己都没想到可以这么方便。个人感觉比之前的通用dao方便和强大的太多了,主要有以下方面的改进:
1、解决了上面列出的所有问题,并且代码量反而更少更简洁了。
2、增加查询字段的黑白名单功能,要查哪些字段由你说了算。
3、单个字段的更新或查询可以直接set、where,不必再new整个对象,并且支持一个字段匹配多个值。
4、排序功能增强,多字段、升序降序自由组合。
5、方便强大的分页功能,无须额外操作,二三行代码搞定分页,自动判断数据库,无须指定。
6、不必再每个实体类对应建立一个继承于通用dao的dao了,一个dao自动判断操作所有表。
顺便提一下,这个实现的dao名,我命名为SuperDao,之前的泛型实现都是以BaseDao的方式来命名,因为它需要有子类来继承它并指定具体的泛型实体类才行,这次的封装不需要任何子类的继承即可使用(即使继承它,子类得到的所有方法都可以直接调用,根本没有必要,完全解耦),又想着换个名字,就取了SuperDao。
前段时间,写了一个基于Spring JdbcTemplate的通用dao,有兴趣的可以看看这个系列,记录了实现过程。
最初的目的只是为了方便自己,没想到发出来之后关注的人还挺多,看来这方面还是有实际需求的。
之前的通用dao在使用过程中,虽然省掉了我很多基础的增删改查代码操作,但是操作还是麻烦,功能也不够强大,碰到一些不大通用但是又经常碰到的情况,完全无力或不怎么使的上力,比如以下几个情况:
1、查询时,需要某个字段不等于(column != value)某个值的时候。
2、查询时,需要某个字段等于多个值(column = value1 or column = value2)的时候。
3、需要以某个或多个字段特定排序的时候。
4、当表中有个字段比较大(clob等大字段及text等),查询时又不需要用到不想返回,节省性能时。
5、分页查询很不方便,当有以某个字段排序等要求时无法实现通用。
6、有时只需要更新某一个字段时,也需要new整个对象。
7、虽然通用,但是每个实体都需要建立一个号称通用的泛型dao,有些简单的dao里面就是空的,感觉很多余。
感受中最主要的就是这几个,其它就不列举了。如果你用过或封装过一些常规的通用dao,相信也会有这些感受。
鉴于以上原因,决定再封装一个更加强大的通用dao出来,可能是我实在太懒了吧,实在不喜欢写这些重复又没技术性的代码。
阅读和参考了网上一些比较优秀的框架思路,发现还是可以实现的。有时候不是做不到,而是根本没想到往这个思路上走。目前已经封装的差不多了,在封装完成之前,连我自己都没想到可以这么方便。个人感觉比之前的通用dao方便和强大的太多了,主要有以下方面的改进:
1、解决了上面列出的所有问题,并且代码量反而更少更简洁了。
2、增加查询字段的黑白名单功能,要查哪些字段由你说了算。
3、单个字段的更新或查询可以直接set、where,不必再new整个对象,并且支持一个字段匹配多个值。
4、排序功能增强,多字段、升序降序自由组合。
5、方便强大的分页功能,无须额外操作,二三行代码搞定分页,自动判断数据库,无须指定。
6、不必再每个实体类对应建立一个继承于通用dao的dao了,一个dao自动判断操作所有表。
全部回答
- 1楼网友:孤老序
- 2021-02-21 15:07
一般java都是会每一张表对应一个实体类,每一张表对应一个dao,这样写在以后可以灵活的组装,如果你一下子多表关联进行查询,反而降低的java里面代码的灵活运用,
再看看别人怎么说的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯