[醒目] 自动生成hql[基于javabean的操作][Java reflect 技术的体现]
// 此方法实现动态创建hql传递参数只需要实体包装的类和需要模糊查询的数组//根据第一个对象参数的属性值是否存在而拼装//参数说明://1、要查询的表的映射类对象//2、第二个参数为属性名数组。作用为模糊查询的数组名public Map<String, String> createHql(Object paobj, String[] strs)throws IllegalArgumentException, IllegalAccessException {Map<String, String> map = new HashMap<String, String>();boolean bl = true;String tableName = paobj.getClass().getName().substring(paobj.getClass().getPackage().getName().length() + 1);String startstr = "from "+tableName+" where 1=1 ";StringBuffer sb = new StringBuffer(startstr);if (null != paobj) {// 以上是测试对象。得到声明的属性Field[] fields = paobj.getClass().getDeclaredFields();for (int i = 0; i < fields.length; i++) {Field f = fields[i];// 设置这些属性是可以访问的f.setAccessible(true);// 拿到属性的值Object obj = f.get(paobj);if (null != obj) {// 因为集合没有值是[]情况。排除集合的情况if (!"[]".equals(obj.toString())) {// 一次迭代模糊查询数组判断if (null != strs) {for (int j = 0; j < strs.length; j++) {if (f.getName().equals(strs[j])) {sb.append("and " + f.getName() + " like '%"+ obj + "%' ");bl = false;}}}if (bl) {sb.append("and " + f.getName() + " = '" + obj+ "' ");}// 重置作为判断条件。防止多次执行bl = true;}}}}map.put("searchhql", sb.toString());map.put("counthql", "select count(*) " + sb.toString());return map;}