非常喜欢valuelist拼sql的处理方式,遂写了该工具类,这下也可以弥补hibernate动态sql的缺陷了,将来应该会用到
<?xml version="1.0" encoding="UTF-8" ?>
<sql-definition>
<sqls>
<sql name="sql1">
select 1 from dual
where 1=1
/~name: and name={name}~/
/~age: and age={age}~/
order by 1
</sql>
<sql name="sql2">
select 1 from dualx
where 1=1
/~name: and name={name}~/
/~age: and age={age}~/
order by 1
</sql>
</sqls>
</sql-definition>
public class SqlUtil {
private static String startToken = "/~";
private static String endToken = "~/";
private static String XML_FILE_PATH="sql.xml";
private static Map<String, StringBuilder> sqls=new HashMap<String, StringBuilder>();
static {
init();
}
public static StringBuilder getSql(String sqlName,Map<String, Object> queryMap){
return manipulate(sqls.get(sqlName), queryMap);
}
private static StringBuilder manipulate(StringBuilder text ,Map<String , Object> model){
for (int start = 0, end = text.indexOf(endToken); ((end = text.indexOf(endToken)) >= 0);){
start = text.lastIndexOf(startToken, end);
String key = text.substring(start + 2, text.indexOf(":", start));
Object modelValue = model.get(key);
if(modelValue==null){
text.replace(start, end + 2, "");
}else{
text.replace(start, end + 2, text.substring(text.indexOf(":", start) + 1, end));
}
}
String valueStartToken="{";
String valueEndToken="}";
for (int start = 0, end = text.indexOf(valueEndToken); ((end = text.indexOf(valueEndToken)) >= 0);){
start=text.lastIndexOf(valueStartToken,end);
String key = text.substring(start + valueStartToken.length(), end);
Object modelValue = model.get(key);
if(modelValue==null){
text.replace(start, end + valueEndToken.length(), "");
}else{
String value;
if(modelValue instanceof String){
value="'"+modelValue+"'";
}else{
value=modelValue+"";
}
text.replace(start, end + valueEndToken.length(), value);
}
}
return text;
}
@SuppressWarnings("unchecked")
private static void init(){
try {
Configuration config = new XMLConfiguration(XML_FILE_PATH);
List<String> sqllist =config.getList("sqls.sql");
for (int i = 0; i < sqllist.size(); i++) {
String sql = config.getString("sqls.sql("+i+")");
String name = config.getString("sqls.sql("+i+")[@name]");
sqls.put(name, new StringBuilder(sql));
}
} catch (ConfigurationException e) {
e.printStackTrace();
}
}
@Deprecated
public static void reInit(){
sqls.clear();
init();
}
public static void main(String[] args) {
Map<String, Object> map=new HashMap<String, Object>();
map.put("name", null);
map.put("age", 45);
StringBuilder sql = SqlUtil.getSql("sql1", map);
System.out.println(sql);
}
}
分享到:
相关推荐
本话题聚焦于“分离valuelist的SQL拼装”,这是一个常见的编程需求,尤其是在处理批量数据插入、更新或者查询时。在描述中提到的博文链接已经失效,无法直接获取详细内容,但我们可以根据这个主题进行深入的探讨。 ...
2. **数据库查询优化**:Valuelist可能采用SQL动态拼接技术,只查询所需的数据,而不是全表扫描,这显著提高了查询效率。 3. **结果封装**:将数据库查询结果转化为适合分页展示的对象列表,同时包含总条数、总页数...
在Delphi编程环境中,`ValueList`是一种非常实用的组件,尤其对于初学者来说,它提供了方便的方式来管理和处理数据集合。`ValueList`组件通常用于存储键值对,类似于其他编程语言中的字典或哈希表。在这个压缩包中,...
本实例使用SSH框架整合开发,sqlserver2000数据库,valueList 插件,目的是练习分页插件的使用。由于jar包文件太多,故把jar包删去了,使用者只要加上SSH的jar文件,导入eclipse就可以运行
"valuelist"是一个专为高性能表格展示设计的组件,主要应用于J2EE环境中,它提供了丰富的功能,如分页、分组以及排序等,旨在优化数据处理和用户体验。在这个项目中,我们可以看到一系列的JSP文件,这些文件是Web...
兔八哥ValueList文档翻译 概述:ValueList是一个强大的数据访问工具,它可以帮助开发者快速构建数据驱动的应用程序。本文档是ValueList的官方文档翻译,旨在帮助开发者更好地理解和使用ValueList。 一、ValueList...
3. `ValueListAdapter` 执行 SQL 查询,将查询结果转换为 `ValueList`,其中包含一组Java对象,这些对象反映了数据库中的记录。 4. 可以遍历 `ValueList`,处理或展示返回的数据。 **总结** ValueList 是一个简化...
valuelist;valuelist;valuelist;valuelist; 不错的表格控制技术
- **兼容性**: 兼容多种数据库,包括MySQL、Oracle、SQL Server等,同时支持JDBC和ORM框架如Hibernate、MyBatis。 - **应用示例**:随组件提供的应用示例帮助开发者快速理解和使用,通过实际操作了解其工作原理和...
在传统的JDBC操作中,从数据库获取数据通常涉及大量的SQL编写和结果集遍历,这不仅繁琐且容易出错。ValueList技术引入了一种新的处理方式,它鼓励开发者使用ValueListHandler服务来统一处理从service层获取到的POJO...
功能强大的JSP分页组件 valuelist0.1.8 封装的很好
Struts2处理请求和展示,Hibernate管理数据持久化,Spring提供整体架构支持并负责整合其他组件,struts-menu实现动态菜单,而valuelist则优化了数据检索和展示。这样的设计不仅提高了开发效率,也保证了系统的稳定性...
这样,每次ValueList在拼装HQL之前,会先调用`IntegerSetter`中的`setParameter`方法,将接收到的String参数转换为Integer类型,然后再传递给HQL语句。这样既简化了代码,也避免了数据库迁移时的兼容性问题。 总结...
sql.Append($"INSERT INTO TableName ({columnList}) VALUES ({valueList});"); } command.CommandText = sql.ToString(); command.ExecuteNonQuery(); ``` 这里,`columnList`和`valueList`应根据实际列和值...
在initData()方法中,填充了一个包含这些键值的列表valueList,并为GridView设置适配器。当用户点击GridView中的项时,会触发onItemClick()监听器,处理相应的输入或删除操作。 在onItemClick()方法中,可以通过...
public int updateSchools(String condition, List<Object> valueList, School sch) throws DBException; public List<School> findSchools(String conditions, List<Object> ValueList) throws DBException; ...
本文将深入探讨如何在SQL Server环境中动态地为表添加或删除字段,并同时修改与这些字段相关的插入和更新存储过程。 首先,我们需要创建一个辅助表[A],它有两个字段:[ID](自增长)和[FieldName]。表[A]的设计...