SQL语句自动生成封装---数据实体操作封装(二)

来源:互联网 发布:大数据交易中心 编辑:程序博客网 时间:2024/06/14 21:31

     com.spkg.com插件下载地址:http://download.csdn.net/detail/ping802363/9834263

    前面了解了封装数据库操作,现在了解下对SQL语句自动生成封装,平常的数据库业务项目中经常写SQL语句,增加、删除、修改、查询,常用的SQL语句构造方法都一致,常用的SQL语句与表名,列名有关,我们知道项目开发一般都会针对一张表建立一个数据实体模型,模型中的属性与数据库表中 的列名一一对应,试想如果能构建一个封装的插件,根据模型自动生成SQL的插入,删除,修改,查询语句,这样多节约开发时间。

    本插件即com.spkg,com在SQLString中封装了生成SQL常用语句的功能,其中T是泛型,在条件查询中,key是搜索关键词,num每页显示的数量,page当前页码;最后用toString方法输出SQL语句。

/** * 根据实体以及实体内的注解形成插入的sql语句,列名需和属性名一致 * @param t 实体 * @return SQL语句 * @throws Exception  */ public <T>void insertSQL(T t) throws Exception;/** * 根据实体以及实体内的注解形成更新的sql语句,列名需和属性名一致 * @param t 实体 * @return SQL语句 * @throws Exception  */ public <T>void updateSQL(T t) throws Exception;/** * 根据实体以及实体内的注解形成删除的sql语句,列名需和属性名一致 * @param t 实体 * @return SQL语句 * @throws Exception  */ public <T>void deleteSQL(T t) throws Exception;/** * 根据实体以及实体内的注解形成根据主键查询单条数据的sql语句,列名需和属性名一致 * @param t 实体 * @return SQL语句 * @throws Exception  */ public <T>void selectSingleSQL(T t) throws Exception;/** * 生成字符串类型字段根据key值或条件查询SQL语句,仅限本表String类型,mysql可使用 * 生成条件查询语句,提供自定义单个对象PK查询,mysql可使用 * @param t * @param num * @param page * @throws Exception  */ public <T>void searchSqlByCond(T t, Integer num, Integer page, String key) throws Exception;/** * 根据查询结果计数sql,mysql可使用 * @param t * @param key * @throws Exception */ public <T>void searchResultCount(T t, String key) throws Exception;
   使用过程中,我们还需要对实体模型进行注解,注解方式如下(一个实体模型例子):
package com.spkg.test;import java.util.Date;import com.spkg.annotation.db.FieldName;import com.spkg.annotation.db.PK;import com.spkg.annotation.db.TableName;@TableName("dt_managers")public class Manager {@PKprivate Integer jno;private String password;private String name;private Integer sex;private Date birth;private String position;@FieldName("bid")private Book book;public Book getBook() {return book;}//...其他get,set方法}
其中,TableName是注明本模型所对应的表名,PK标注属性为主键,FieldName标注数据库对应列名的值是此属性类型中的哪个属性,这种属性类型在其类中需构建一个构造器,构造器的参数为FieldName标记的属性名对应属性。此外还提供了其他注解,Disregard:标记为在数据库操作中此属性被忽略,即数据库中没有与之对应的列,标记对象为属性;OrderBy:标记本模型对应的表执行查询语句时的排序方式,标记对象为类;Statics:标记此属性对应的列在插入数据时是固定的字符串,例如获取当前的时间属性,直接给属性标记@Statics("now()");UnWrite:标记属性为不写,即此属性不参与SQL语句的形成,有Type.YES插入更新都不写,Type.INSERT插入不写,Type.UPDATE更新不写。

:本封装中使用了大量反射、注解、泛型,反射面对大量会影响项目的访问效率,平常作业的项目开发中因为不用在意效率所以关系不大,实际的项目中需要考虑。

0 0
原创粉丝点击