日期:2014-05-16  浏览次数:20441 次

Spring JdbcTemplate实现通用的泛型dao一:主功能实现

Spring JdbcTemplate实现通用的泛型dao一:主功能实现

Spring JdbcTemplate实现通用的泛型dao二:实现自己的名称转换NameHandler?

Spring JdbcTemplate实现通用的泛型dao三:构建动态sql

Spring JdbcTemplate实现通用的泛型dao四:通用自定义转换到JavaBean的RowMapper实现

在项目中一直使用Mybaits,最近想自己搞个小项目,通过对比之后发现mybatis的优势并不是十分明显了,个人小项目倾向于更加简洁的DBUtils。Spring jdbc也实现了DBUtils基本一样的功能,项目中又刚好用到了spring,这当然是不二之选了。

Mybaits采用xml的方式,想要实现通用的dao比较的麻烦,spring jdbc没有类似xml的配置文件,实现一个通用的dao反而简单,参考网上的一些介绍结合自己项目的需求,写了一个算是比较规范的通用dao,这里作下整理。

先来说一下我的通用dao实现的主要几点:

  1. 小项目使用的是mysql,所以是基于mysql数据库,但是差别不大,换数据库的话改几行代码就搞定。
  2. 可以自定义数据库表名、列名到Java类、属性名称的转换。主要是我设计的数据库表中,列名为了防止关键字等各类冲突,都是以下划线”_”开头和分隔的,无法和Java映射实体类的属性名保持一致。
  3. 实现基本的增、删、改、查、分页查询等功能。
  4. 因为没有xml等映射配置文件,所以基于编码和命名的规范性(当然不规范也能支持,但是实现自定义名称处理器将会十分复杂)。所有的数据库列名也好,Java属性名也好,映射都是有一定的规范的,不可能说我数据库列名为user_name,java实体类中映射为tomcat。
  5. 我数据库表的主键名是基于表名再加上“_id”,例如user表主键即为_user_id(所有列以下划线”_”开头)。
  6. 映射的实体类中不能添加数据库表中列不存在的无用字段,这样会使组装的sql语句错误。当然可以用添加注解或其它的方式来判断,但那样会破坏实体类的简洁度。任何情况下不在映射的实体类中添加数据库没有的字段(某些框架的主外键映射除外),如果需要在转换后的VO类中添加,个人认为这是一个好的编码习惯。
  7. 基于spring JdbcTemplate。

下面一步一步的来实现我们的通用dao(在最后有给出完整的代码),接口在这里就不晒了,定义了几个方法的名字而已,先来看一下通用dao实现的定义:

publicabstractclassBaseDaoImpl<T>implementsBaseDao<T>{/** 具体操作的实体类对象 */privateClass<T>