精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-12-21
最后修改:2011-12-21
入参是Map<String,Object>, 查询返回结果List<Map> 实现功能: 1.主要实现查询功能和SQL可配置化: 2.配置信息可多数据源存储(XML,DATABASE,TXT),可热部署, 3.缓存控制与刷新; 4.物理分页 与MYBATIS比较功能单一了 , 特点:配置信息可多数据源存储(XML,DATABASE,TXT),可热部署; 简单的添加Dialect 的实现类,进行配置就可实现不同数据库的物理分页; 见org.myframework.jdbc.MyBatis /** * 查询所有记录 * * @param mapperId * @param map * @return * @throws Exception */ public List<Map<String, Object>> selectAllList(String sqlKey, Map<String, Object> map) { SqlMapper sqlMapper = sqlTemplate.getSqlMapper(sqlKey); String cacheKey = getCacheKey(sqlKey, map); if (sqlMapper == null) { throw new RuntimeException("load sqlconfig error :" + sqlKey); } if (sqlMapper.isFlushCache()) { dataCache.removeObject(cacheKey); } if (sqlMapper.isUseCache()) { if (dataCache.getObject(cacheKey) != null) { log.debug("load from cacheKey : " + cacheKey); return (List<Map<String, Object>>) dataCache .getObject(cacheKey); } else { log.debug("reload cacheKey : " + cacheKey); List<Map<String, Object>> rs = this.queryForList( sqlTemplate.getSql(sqlKey, map), map); dataCache.putObject(cacheKey, rs); return rs; } } else { List<Map<String, Object>> rs = this.queryForList( sqlTemplate.getSql(sqlKey, map), map); return rs; } } 可加群203431569讨论 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-12-22
下了源码。还没看。
不过思路挺合适我的心水的。 |
|
返回顶楼 | |
发表时间:2011-12-22
osacar 写道 下了源码。还没看。
不过思路挺合适我的心水的。 就是你和另外一位给的启发,不过功能比起Mybatis变得单一啦 |
|
返回顶楼 | |
发表时间:2011-12-22
json20080301 写道 osacar 写道 下了源码。还没看。
不过思路挺合适我的心水的。 就是你和另外一位给的启发,不过功能比起Mybatis变得单一啦 不是吧?居然还有我的份?说实在的,我最近也在弄类似这样的功能。目的就是要把项目里的hibernate彻底去掉。我认为,功能其实并不需要太多,合适项目使用就可以了。没有最好的,只有最合适的。 |
|
返回顶楼 | |
发表时间:2011-12-22
严重不建议使用Map作为参数的传入传出工具
|
|
返回顶楼 | |
发表时间:2011-12-22
evanzzy 写道 严重不建议使用Map作为参数的传入传出工具 ?? 有性能缺陷还是? 我这样做其实就把request里面的参数放到map中,作为查询条件传给要执行的SQL;我要实现的功能比较单一, 1.SQL可配置 2.只做查询,参数都是从request中提取到Map中,返回结果List<Map>即可, List<Map>可转换化JSONArray ; |
|
返回顶楼 | |
发表时间:2011-12-23
对你这个表示兴趣,你能不能把你的思想描述的详细一点.
|
|
返回顶楼 | |
发表时间:2011-12-23
json20080301 写道 evanzzy 写道 严重不建议使用Map作为参数的传入传出工具
?? 有性能缺陷还是? 我这样做其实就把request里面的参数放到map中,作为查询条件传给要执行的SQL;我要实现的功能比较单一, 1.SQL可配置 2.只做查询,参数都是从request中提取到Map中,返回结果List<Map>即可, List<Map>可转换化JSONArray ; 弱类型降低了代码的可读性(语义不清晰)和维护性 |
|
返回顶楼 | |
发表时间:2011-12-23
KimHo 写道 json20080301 写道 evanzzy 写道 严重不建议使用Map作为参数的传入传出工具
?? 有性能缺陷还是? 我这样做其实就把request里面的参数放到map中,作为查询条件传给要执行的SQL;我要实现的功能比较单一, 1.SQL可配置 2.只做查询,参数都是从request中提取到Map中,返回结果List<Map>即可, List<Map>可转换化JSONArray ; 弱类型降低了代码的可读性(语义不清晰)和维护性 +1,在下深有体会,除非你为每一个交易配置一个文件标识Map中存放内容,并进行一定校验 |
|
返回顶楼 | |
发表时间:2011-12-23
最后修改:2011-12-23
当初也同楼主想法差不多,但没能实现ibatis的替换,就简单做了个DTO查询的实现,
代码比较粗糙难看。 异常处理,使用了自己封装的业务异常DataAccessFailureException,可根据需要自己修改。 public abstract class SimpleJDBCDao<T, PK extends Serializable> { @Autowired protected SimpleJdbcTemplate simpleJdbcTemplate; @Autowired protected JdbcTemplate jdbcTemplate; protected Class<T> entityClass; public SimpleJDBCDao() { this.entityClass = ReflectionUtils.getSuperClassGenricType(getClass()); } public List<Map<String, Object>> getMapListBySql(final String mapListSql, final Object... args) { Assert.notNull(mapListSql, "查询Map集合语句不能为空"); try { if (args == null || args.length < 1) { return simpleJdbcTemplate.queryForList(mapListSql); } return simpleJdbcTemplate.queryForList(mapListSql, args); } catch (DataAccessException e) { throw new DataAccessFailureException(DATA_ACCESS_EXCEPTION_CODE, e); } } public List<Map<String, Object>> getMapListBySqlMap(final String mapListSql, final Map<String, ?> args) { Assert.notNull(mapListSql, "查询Map集合语句不能为空"); try { return simpleJdbcTemplate.queryForList(mapListSql, args); } catch (DataAccessException e) { throw new DataAccessFailureException(DATA_ACCESS_EXCEPTION_CODE, e); } } public List<Map<String, Object>> getMapListBySqlParam(final String mapListSql, final SqlParameterSource params) { Assert.hasText(mapListSql, "查询Map集合语句不能为空"); try { return simpleJdbcTemplate.queryForList(mapListSql, params); } catch (DataAccessException e) { throw new DataAccessFailureException(DATA_ACCESS_EXCEPTION_CODE, e); } } public T get(final String oneSql, final Object... args) { Assert.hasText(oneSql, "查询单条记录语句不能为空"); logger.debug("jdbc get: " + oneSql); try { return simpleJdbcTemplate.queryForObject(oneSql, getMapper(), args); } catch (DataAccessException e) { throw new DataAccessFailureException(DATA_ACCESS_EXCEPTION_CODE, e); } } public T getByMap(final String oneSql, final Map<String, ?> args) { Assert.hasText(oneSql, "查询单条记录语句不能为空"); logger.debug("jdbc get: " + oneSql); try { return simpleJdbcTemplate.queryForObject(oneSql, getMapper(), args); } catch (DataAccessException e) { throw new DataAccessFailureException(DATA_ACCESS_EXCEPTION_CODE, e); } } public T getBySqlParam(final String oneSql, final SqlParameterSource params) { Assert.hasText(oneSql, "查询单条记录语句不能为空"); logger.debug("jdbc get: " + oneSql); try { return simpleJdbcTemplate.queryForObject(oneSql, getMapper(), params); } catch (DataAccessException e) { throw new DataAccessFailureException(DATA_ACCESS_EXCEPTION_CODE, e); } } public List<T> getListBySql(final String listSql, final Object... args) { Assert.hasText(listSql, "查询集合语句不能为空"); logger.debug("jdbc list: " + listSql); try { if (args == null || args.length < 1) { return simpleJdbcTemplate.query(listSql, getMapper()); } return simpleJdbcTemplate.query(listSql, getMapper(), args); } catch (DataAccessException e) { throw new DataAccessFailureException(DATA_ACCESS_EXCEPTION_CODE, e); } } public List<T> getListBySqlMap(final String listSql, Map<String, ?> args) { Assert.hasText(listSql, "查询集合语句不能为空"); try { return simpleJdbcTemplate.query(listSql, getMapper(), args); } catch (DataAccessException e) { throw new DataAccessFailureException(DATA_ACCESS_EXCEPTION_CODE, e); } } public List<T> getListBySqlParam(final String listSql, final SqlParameterSource params) { Assert.hasText(listSql, "查询集合语句不能为空"); try { return simpleJdbcTemplate.query(listSql, getMapper(), params); } catch (DataAccessException e) { throw new DataAccessFailureException(DATA_ACCESS_EXCEPTION_CODE, e); } } public RowMapper<T> getMapper() { return (RowMapper<T>) ParameterizedBeanPropertyRowMapper.newInstance(entityClass); } } |
|
返回顶楼 | |