龙空技术网

JdbcPlus增加自定义SQL

Harvey汪 350

前言:

眼前大家对“js多条件查询”都比较看重,你们都想要知道一些“js多条件查询”的相关文章。那么小编在网上搜集了一些有关“js多条件查询””的相关知识,希望兄弟们能喜欢,我们快快来了解一下吧!

JdbcPlus增加自定义Sql组装方式;数据库的查询很多部分涉及到动态查询,之前已经实现Where无限嵌套查询;但实际业务中,用户的查询方式多种多样,每个人的使用习惯不同,喜欢自定义查询,通过外部编辑SQL;

JdbcPlus的原则,不重复造轮子,依据目前已经成熟的基础技术;自定义查询使用JavaScript语言,前端js普及面特广,完全满足自定义要求,学习成本基本为零。

本篇简要介绍JdbcPlus的API和基本配置,针对自定义列出示例进行说明

一、Maven

<dependency><groupId>com.kukababy</groupId><artifactId>jdbc-plus</artifactId><version>0.1.5</version></dependency>

Spring Boot注解配置

@Beanpublic JdbcPlus jdbcPlus(JdbcTemplate jt) {	JdbcPlus jdbcPlus = new JdbcPlus();	SqlCfg sqlCfg = new SqlCfg();	sqlCfg.setJdbcTemplate(jt);	sqlCfg.setCamel(true); //自定义js脚本存放的位置 	sqlCfg.setJsClassPath("mapper/sys/"); 	jdbcPlus.setSqlCfg(sqlCfg); 	return jdbcPlus;} 

Spring Xml配置

<bean id="sqlCfg" class="com.kukababy.plus.pojo.SqlCfg"> <property name="jdbcTemplate" ref="jdbcTemplate"></property><property name="classPath" value="mapper/sys/"></property></bean><bean id="jdbcPlus" class="com.kukababy.plus.dao.JdbcPlus"> <property name="sqlCfg" ref="sqlCfg"></property></bean>

目前主要接口

void insert(Object entity);int insertBatch(List<Object> entitys);int deleteId(Class<?> entityClass, Serializable id);int deleteBy(Class<?> entityClass, P... whereColVals);int deleteBy(Class<?> entityClass, SqlFilter sqlFilter);int update(Object entity);int update(Class<?> entityClass, Map<String,Object> plusMap);int updateBatch(List<Object> entitys);<T> T get(Class<T> entityClass, Serializable id);<T> List<T> getAll(Class<T> entityClass);<T> List<T> selectList(Class<T> entityClass, P... whereColVals);<T> List<T> selectList(Class<T> entityClass, SqlFilter sqlFilter);<T> T selectOne(Class<T> entityClass, P... whereColVals);<T> T selectOne(Class<T> entityClass, SqlFilter sqlFilter);int getTotal(Class<?> entityClass, P... whereColVals);int getTotal(Class<?> entityClass, SqlFilter sqlFilter);<T> Page<T> selectPage(Class<T> entityClass, Pager pager);// 自定义sqlList<Map<String, Object>> selectList(String functionName, P... keyVals);List<Map<String, Object>> selectList(String functionName, Map<String, Object> keyVals);<T> List<T> selectList(Class<T> entityClass, String functionName, P... keyVals);<T> List<T> selectList(Class<T> entityClass, String functionName, Map<String, Object> keyVals);Map<String, Object> selectOne(String functionName, P... params);<T> T selectOne(Class<T> entityClass, String functionName, P... params);int getTotal(String functionName, P... params);int getTotal(String functionName, Map<String, Object> keyVals);<T> Page<T> selectPage(Class<T> entityClass, String functionName, CustPager pager);Page<Map<String, Object>> selectPage(String functionName, CustPager pager);// 自定义sql

示例一(普通查询)

A、js函数,判断条件:是否提供name查询条件

function queryEmp(name){var sql = 'select * from t_emp where age=#{age}';	if(name!=undefined&&name!=''){		sql += " and name=#{name}"	}	return sql;}

B、Java调用接口,JS脚本和Java调用都很简单

jdbcPlus.selectList("queryEmp", new P("name","李明"),new P("age",18));

示例二(分页查询,用户没有提供统计总记录数自定义函数)

A、js函数,判断条件:是否提供name查询条件,分页查询和一样

function queryEmpPage(name){	var sql = 'select * from t_emp where 1=1';	if(name!=undefined&&name!=''){		sql += ' and name=#{name}'	}	return sql;}

B、Java调用接口,查询满足条件的记录和总记录数

CustPager pager = new CustPager();pager.setHasCount(false);//用户没有提供统计记录数的函数,程序控制pager.getKeyVals().put("name", "李明");jdbcPlus.selectPage(EmployeePO.class,"queryEmpPage", pager);

示例三(分页查询,用户提供统计总记录数自定义函数)

A、js函数,判断条件:是否提供name查询条件,统计总数的函数名必须追加Count,进行函数命名,程序统计记录总数按此条件约定。

function queryPage(name){var sql = 'select * from t_emp where 1=1';if(name!=undefined&&name!=''){sql += ' and name=#{name}'}sql += ' limit #{offset},#{pageSize}'return sql;}function queryPageCount(name){var sql = 'select count(1) from t_emp where 1=1';if(name!=undefined&&name!=''){sql += ' and name=#{name}'}return sql;}

B、Java调用接口,查询满足条件的记录和总记录数

CustPager pager = new CustPager();pager.setHasCount(true);//用户提供统计记录数的函数,用户控制pager.getKeyVals().put("name", "李明");jdbcPlus.selectPage(EmployeePO.class,"queryPage", pager);

示例四(查询条件使用in语法)

A、js函数,sql语法有in

function queryEmpByIn(names){	var sql = 'select * from t_emp where 1=1';	if(name!=undefined&&name!=''){		sql += " and name in (#{names})"	}	return sql;}

B、Java调用接口,names的入参是数组,

List<String> names = new ArrayList();names.add("李明");names.add("王飞");jdbcPlus.selectList("queryEmpByIn", new P("names",names));

总结

JdbcPlus完全依赖JdbcTemplate,基本能够满足日常大部分要求;一些特殊场景不能满足时,可以直接使用JdbcTemplate来实现。

后期代码将提交到码云上,方便代码和文档维护,欢迎有兴趣者加入,开源、沟通、提升。

另外针对Mongodb实现的Plus已经提到Maven上了

<dependency> <groupId>com.kukababy</groupId> <artifactId>mongo-plus</artifactId> <version>0.0.1</version></dependency>

上篇:JdbcPlus查询(三)

标签: #js多条件查询