nhmicro的dao层工具技术说明

来源:互联网 发布:php危险函数 编辑:程序博客网 时间:2024/06/05 20:29

nhmicro的dao层工具类MicroServiceTemplateSupport技术说明

概述

MicroServiceTemplate负责与数据库交互是Dao层的轻量化封装,可同时支持mysql和oracle,特别是针对mysql特性进行优化封装,如分页查询性能优化、动态字段等等。

主要特点是:

1, 简化了orm映射过程

不再需要定义实体类与数据库映射。而使用map作为输入和输出对象。

输入输出map中key与数据库中列名相同,因此不必考虑名称映射问题;输入输出map中的value都是string类型,因此不必考虑类型转换问题。

2, 提供常用no-sql方法

不必编写sql即可针对某表进行增删改查、分页、saveOrUpdate等操作,同时也提供直接执行复杂sql的功能接口。

3,封装了sql模板替换方法,方便复杂sql的管理与复用,功能上与mybatis类似。

4,针对mysql5.7+版本支持动态字段创建和增删改查功能。

5,底层使用jdbcTemplate,遇到特殊的MicroServiceTemplateSupport

未提供的功能时,可获取底层jdbcTemplate对象进行操作,确保功能的全面性。同样由于底层使用jdbcTemplate,因此支持spring事务管理机制。

 

注意:

1,数据库表必须有id字段,字段类型可以是字符串型或数字类型。

2,输入输出参数中时间字符串按照”yyyy-MM-dd HH:mm:ss”格式填写。

实例化

MicroServiceTemplateSupport.getInstance()

//可以设置多个实例,不同实例标识名称不同,无参数默认为default

MicroServiceTemplateSupport.getInstance(“default”)

//可以支持mysql和oracle

MicroServiceTemplateSupport.getInstance(“default”,”mysql”)

 

分页查询

根据分页信息和查询条件对表进行分页查询

public Map getInfoList4PageService(MaprequestParamMap,String tableName,Map pageMap)

参数说明:

requestParamMap,为查询条件key与数据表中列名一致。无条件为可传空。此参数后续不再累述。

TableName,为表名或使用join进行连接的中间表达式

PageMap,为分页信息,其中page为本次页数、rows为每页记录条数、sort为排序字段、order为排序方向、cusSort有值时可填写自定义排序sql;此参数结构后续不再累述。

 

分页查询时可以设置自定义条件sql和返回字段sql

public Map getInfoList4PageService(Map requestParamMap,String tableName,MappageMap,String cusWhere,String cusSelect)

参数说明:

cusWhere,为自定义条件sql;此参数后续不再累述。

cusSelect,为自定义返回字段sql;此参数后续不再累述。

 

当自定义条件sql中带有?占位符时,可填写替换变量list

public Map getInfoList4PageService(Map requestParamMap,String tableName,MappageMap,String cusWhere,String cusSelect,List cusPlaceList)

参数说明:

cusPlaceList,为替换变量列表

 

直接填写复杂条件查询sql进行分页查询(查询sql中不必填写分页相关部分)

public MapgetInfoList4PageServiceBySql(String countSql,String sql,Map pageMap)

参数说明:

countSql,复杂条件查询总记录数sql

sql,复杂条件查询sql

pageMap,分页信息map

 

复杂条件查询sql中带有?占位符时,可填写参数list

public MapgetInfoList4PageServiceBySql(String countSql,List countPlaceList,String sql,ListplaceList,Map pageMap)

参数说明:

countPlaceList,countSql中占位符替换参数list

placeList,sql中占位符替换参数list

 

针对mysql可以不填写记录总数查询sql,进行复杂条件查询sql分页

public Map getInfoList4PageServiceByMySql(Stringsql,List placeList,Map pageMap)

 

查询单条记录

根据表名排序信息等获取单条记录

public Map getSingleInfoService(MaprequestParamMap,String tableName,Map sortMap,String cusWhere,StringcusSelect,String modelName)

参数说明:

modelName,为模型名称默认填空

 

根据复杂查询sql获取单条记录

public Map getSingleInfoService(Stringsql,List placeList)

 

查询全部不分页数据

根据查询条件、表名称和排序信息,查询全部记录不分页。

public List getInfoListAllService(MaprequestParamMap,String tableName,Map sortMap)

 

查询全部记录时可以填写自定义查询条件和返回字段

public List getInfoListAllService(MaprequestParamMap,String tableName,Map sortMap,String cusWhere,String cusSelect)

 

自定义条件sql中带有?占位符是,可填写替换参数list

public List getInfoListAllService(MaprequestParamMap,String tableName,Map sortMap,String cusWhere,List placeList)

 

sql模板功能

MicroServiceTemplate中sqlTemplateService方法,用于做sql替换

替换的语法是使用velocity语法

例如:

判断是否为null #if(${param.p1})

判断是否为"" #if(${param.p1}!='')

判断不为null且不为"" #if($!{param.p1}!='')

 

 

#sqlreplace是MicroServiceTemplate中的特殊标记,用来做?占位符替换,类似mybatis中的#替换符。使用#sqlreplace时会在返回的placeList中追加参数值。

 

例如以下的代码:

 

Map paramMap=new HashMap();

        paramMap.put("p1", "1");

        paramMap.put("p2", "2");

        paramMap.put("p3", "3");

        paramMap.put("p4", "4");

        paramMap.put("p5", "5");

        String sql=

            "select * from aaa where 1=1"+

                "#if(\${param.p1})"+

                    " and c1='\${param.p2}'   "+

                "#end"+

                "#if(\${param.p2})"+

                    " and c2= #sqlreplace(\${param.p2}) "+

                "#end"+

                "#if(\${param.p3})"+

                    " and c3 like '%\${param.p3}%' "+

                "#end"

                ;

 

      List placeList=new ArrayList();

        String retStr=sqlTemplateService(sql,paramMap,placeList);

        System.out.println(retStr);

        System.out.println(placeList);

 

 

       

 

返回如下的sql替换结果

retStr值为:

select * from aaa where 1=1and c1=1  true  and c2=? true and c3 like '%3%' true

placeList值为:

[2]

创建记录

根据参数map自动对应数据库字段插入记录

public Integer createInfoService(MaprequestParamMap,String tableName)

注:map中key与数据库字段不匹配时自动忽略。Update操作时也是如此后续不再累述。没有设置id字段时会自动生成id并设置到requestParamMap中。

 

创建记录是可填写自定义插入列和插入值,多个列时使用逗号分隔。

public Integer createInfoService(MaprequestParamMap,String tableName,String cusCol,String cusValue)

 

给定id值并创建记录

public Integer createInfoService(Stringid,Map requestParamMap,String tableName)

 

更新记录

根据参数map中的主键id更新数据

public Integer updateInfoService(MaprequestParamMap,String tableName)

参数:

requestParamMap为更新数据

注:requestParamMap中需要含有key为id的数据作为查询条件

可以自定义更新条件sql和更新sql

public Integer updateInfoService(MaprequestParamMap,String tableName,String cusCondition,String cusSetStr)

参数:

cusCondition,为自定义更新条件sql

cusSetStr,为自定义更新设置sql

 

根据参数id更新数据

public Integer updateInfoByIdService(Stringid,String tableName,Map requestParamMap)

参数:

Id为被更新数据的主键值

requestParamMap为更新数据

 

 

根据sql直接更新

public Integer updateInfoServiceBySql(Stringsql,List placeList)

 

 

根据业务逻辑id更新数据

public IntegerupdateInfoByBizIdService(String bizId,String tableName,String bizCol,MaprequestParamMap)

bizId,为业务逻辑id的值

bizCol,为数据库中作为业务逻辑id的列标识

requestParamMap,为更新数据。

 

删除记录

根据参数map中的主键id删除数据

public Integer delInfoService(MaprequestParamMap,String tableName)

注:requestParamMap中需要含有key为id的数据作为筛选条件

 

根据主键id删除数据

public Integer delInfoByIdService(Stringid,String tableName)

 

根据业务逻辑id删除数据

public Integer delInfoByBizIdService(StringbizId,String tableName,String bizCol)

参数:

bizId,为业务逻辑id值

bizCol,为业务逻辑id对应的数据库字段标识

 

 

SaveOrUpdate

根据id值自动判断是插入还是更新数据

public IntegersaveOrUpdateInfoByIdService(String id,String tableName,Map requestParamMap)

 

根据业务逻辑id值自动判断是插入还是更新数据

public IntegersaveOrUpdateInfoByBizIdService(String bizId,String tableName,String bizCol,MaprequestParamMap)

 

批量执行

批量执行不同sql

Public  int[] batchUpdateInfoServiceBySql(String[]sql)

 

批量执行相同sql但替换值不同

Public  int[] batchUpdateInfoServiceBySql(Stringsql,List<Object[]> paramList)

原创粉丝点击