实现持久层的方法有很多,最简单的,直接拿到DB的connect然后执行命令,往复杂的说,有各种ORM机制,还有hibernate框架等等。
这两天一直在尝试着用Python构建之前的项目,在持久层方面用的是最简单的方式,但是很快就出了些问题。例如在Python存储MySql的BLOB对象时,通过%s,mysqldl.binary()的方式,发现转string的时候经常失败,可能是由于语句中的特殊符号引起的。
进行项目开发的时候最好采用规范化的流程,可以避免出现很多不必要的问题,磨刀不误砍柴功。
概述
对于web应用,有四层结构,如下图。
在进行开发时,出于结构话考虑,在业务层编写service并定义dto。
在持久化层定义POJO,并完成持久化层的逻辑。
Hibernate的实现
1. DB中创建表
2. 编写POJO:注意POJO必须有一个默认的构造方法,用于java的反射以生成持久化类(也就是entity)。用该有getter和setter方法。主键标识。
3. 编写POJO与DB的映射文件XXX.hbm.xml(通常IDE会代劳)
4. 编写hibernate.cfg.xml或者hibernate.properties文件(通常IDE会代劳,只需改些配置)
5. 编写工具类xxUtil.java:用于读取hibernate配置并且编写session获取逻辑,在spring项目中,可以将这部分作为java bean,供之后调用。
6. 编写通用Repository接口,可以继承一些通用方法类和下面7中的类,任何DAO相关的调用可从此接口发出。
7. 编写RepositoryCustom接口,可以写一些自定的方法名。
8. 编写RepositoryImpl类,继承7中接口,用来实现自定义方法。
9. 编写RepositoryQueryBuilder类,如果8中的方法过长,可以将query生成部分放到此类中。
对于每一个entity来说,可以有一套6-8的方法,这样分类结构清晰,也便于后期维护。
基于上述hibernate流程的发散
按照web的分层结构进行开发看似繁琐,其实做好是相当有意义的。
项目进行持续开发拓展时,良好的结构可以免去很多麻烦。
刚接触大型项目的人可能不是很了解,觉得怎么方便怎么来,但是时间长了,所有代码都会乱成一团。我自己开始玩的时候就开发过很多东西,到最终都变得项目无法进行拓展,有大的改动都需要从头做起。
对于所有可以持久化的DB,都可以采用上述模型。
把所以repository相关的调用都放到Repository接口中。
把所有业务逻辑相关的代码都放到service中。