之前项目中利用JdbcTemplate进行查询时经常遇到需要将结果封装到具体自定义类中的情况,每次针对不同的类,不同的查询结果都要重新编写RowMapper,感觉十分繁琐,今天自己写了一个通用的,在系统负载不大的情况下还比较实用
package object;
import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
public class ObjectRowMapper implements RowMapper{
private Class className;
public ObjectRowMapper(Class className){
this.className = className;
}
/*
* 该方法自动将数据库字段对应到Object中相应字段
* 要求:数据库与Object中字段名相同
*
*/
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
Object nt = new Object();
Field[] fields = className.getDeclaredFields();
try {
nt = className.newInstance();
for (Field field : fields) {
//如果结果中没有改field项则跳过
try {
rs.findColumn(field.getName());
} catch (Exception e) {
continue;
}
//修改相应filed的权限
boolean accessFlag = field.isAccessible();
field.setAccessible(true);
String value = rs.getString(field.getName());
value = value==null?"":value;
setFieldValue(nt, field, value);
//恢复相应field的权限
field.setAccessible(accessFlag);
}
} catch (Exception e) {
e.printStackTrace();
}
return nt;
}
/*
* 根据类型对具体对象属性赋值
*/
public static void setFieldValue(Object form, Field field, String value) {
String elemType = field.getType().toString();
if (elemType.indexOf("boolean") != -1||elemType.indexOf("Boolean") != -1) {
try {
field.set(form, Boolean.valueOf(value));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else if (elemType.indexOf("byte") != -1||elemType.indexOf("Byte") != -1) {
try {
field.set(form, Byte.valueOf(value));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else if (elemType.indexOf("char") != -1||elemType.indexOf("Character") != -1) {
try {
field.set(form, Character.valueOf(value.charAt(0)));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else if (elemType.indexOf("double") != -1||elemType.indexOf("Double") != -1) {
try {
field.set(form, Double.valueOf(value));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else if (elemType.indexOf("float") != -1||elemType.indexOf("Float") != -1) {
try {
field.set(form, Float.valueOf(value));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else if (elemType.indexOf("int") != -1||elemType.indexOf("Integer") != -1) {
try {
field.set(form, Integer.valueOf(value));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else if (elemType.indexOf("long") != -1||elemType.indexOf("Long") != -1) {
try {
field.set(form, Long.valueOf(value));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else if (elemType.indexOf("short") != -1||elemType.indexOf("Short") != -1) {
try {
field.set(form, Short.valueOf(value));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else {
try {
field.set(form, (Object) value);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
分享到:
相关推荐
- 如果是查询操作,可以使用`RowMapper`或`ResultSetExtractor`来映射结果到Java对象。 8. **性能考虑** 尽管SpringJdbcTemplate提供了便利,但在高并发、大数据量的场景下,可能需要考虑其性能。例如,大量数据...
params)`,查询通常使用`query(String sql, RowMapper<T> rowMapper, Object... params)`,删除操作则是`delete(String sql, Object... params)`。这些方法都处理了异常和资源关闭,使得代码更易读,更不易出错。 ...
JdbcTemplate 是 Spring 框架中 org.springframework.jdbc.core 包提供的 JDBC 模板类,它是核心类,其他模板类都是基于它封装完成的。JdbcTemplate 类主要提供四类方法:execute 方法、update 方法及 batchUpdate ...
该类的主要目的是提供一种机制来查询或执行Oracle数据库中的存储过程,并返回相应的结果。 ##### 2. 方法详解 - **queryProcedure**方法:该方法是核心处理方法,用于调用存储过程,并获取结果集。 - 参数列表: ...
在Spring3中,我们可以通过接口定义通用的CRUD(Create, Read, Update, Delete)操作,然后创建一个实现该接口的抽象类,封装共性的JDBC操作,比如执行SQL、处理结果集等。这样,对于每个具体的数据库表,只需要创建...
另一种方法是使用JdbcTemplate的query()方法和RowMapper接口来查询数据库,并将查询结果转换为自定义对象集合。下面是一个示例代码: ```java public List<UserInfo> findAll() { String sql = "SELECT * FROM ...
如果查询结果有多列,所有列值将被封装到一个Map对象中,其中键为列名,值为对应的列值。 4. `queryForObject(String sql, RowMapper<T> rowMapper, Object... args)`:当预期查询结果只有一行数据时,可以使用此...
在Spring JDBC中,RowMapper接口用于将数据库查询结果的一行映射为一个Java对象。生成RowMapper代码时,通常会为每个DTO创建一个对应的RowMapper实现,这样可以在处理数据库查询结果时,方便地将结果集转换为DTO...
4. **RowMapper.java**: RowMapper是Spring框架中常见的一种接口,用于将数据库查询结果的每一行映射为Java对象。在这个压缩包中,这个接口可能被用来将数据库查询的结果转换为自定义的Java对象。开发人员可以实现这...
- "基于jdbctemplate封装"可能包含一个或多个类文件,如BaseJdbcDao.java,它定义了通用的方法,以及针对特定业务的子DAO类,如UserDao.java,实现了用户相关的数据库操作。 7. **使用示例**: - 创建一个新的...
- `query(String sql, RowMapper<T> rowMapper)`:执行查询并使用自定义的RowMapper将结果映射到对象。 - `update(String sql)`:执行更新操作,如INSERT、UPDATE或DELETE。 - `execute(String sql)`:执行任意的...
- **使用RowMapper接口**:用户自定义映射规则,直接获取对象。 ```java public <T> List<T> query(String sql, RowMapper<T> rowMapper, Object... args) { // 实现细节略 } public interface RowMapper<T> { T...
# 封装查询所有用户姓名的函数 def get_all_user_names(): s = select([users.c.name]) result = engine.execute(s) return [row[0] for row in result] ``` - **Java中的JDBC模板**:Spring框架提供了...
- `query(String sql, RowMapper<T> rowMapper)`: 执行SQL查询并使用RowMapper将结果映射到自定义类型。 - `queryForObject(String sql, RowMapper<T> rowMapper, Object... args)`: 执行查询并期望只返回一个对象。...
2. **结果映射**:查询结果通常需要映射到Java对象。可以使用`RowMapper`或`ResultSetExtractor`来完成这个任务。 3. **事务管理**:`JdbcTemplate`支持事务,可以通过`@Transactional`注解来控制事务的边界。 在`...
`JdbcTemplate`是模板方法设计模式的一个实例,将数据库操作的通用流程封装在模板类中,而具体的数据库操作(如SQL语句的执行)则由子类或者回调接口来实现。这种设计降低了代码的耦合度,使得扩展和维护变得更加...
在`JsonBean.java`中,可能定义了一个用于存储数据库查询结果的Java bean类,它的属性与数据库表的字段相对应,通过`RowMapper`映射到对象。例如: ```java public class JsonBean { private String field1; ...
这里,`queryForList`接受SQL语句和结果集映射类作为参数,它会自动将查询结果转换为指定类型的列表。 2. **参数化查询** Spring JdbcTemplate支持参数化的SQL查询,这可以避免SQL注入的风险。例如,使用`query`...
- 查询(Query):`query(String sql, RowMapper<T> rowMapper)`方法用于执行SELECT语句,根据SQL语句获取结果集,并通过`RowMapper`接口将结果转换为自定义的对象。 3. **批处理操作**:如果需要批量执行SQL语句...
在处理结果集时,JdbcTemplate提供了RowMapper接口,我们可以自定义映射规则,将数据库行数据转换为我们需要的Java对象。例如,实现RowMapper接口的`mapRow(ResultSet rs, int rowNum)`方法,根据列名或索引将...