前言:
眼前大家对“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多条件查询