本文主要是介绍SpringJDBC之RowMapper通用类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
SpringJDBC无疑极大的方便了我们访问数据库,但是有一个小问题,每次查询操作返回的实体对象不一样,难道我们每次都要重新实现RowMapper吗?利用泛型,可以方便处理这样的操作。
开发环境:Windows10、eclipse、SpringJDBC4.3.7。文末含项目源码下载链接。
1、自我实现RowMapper
/** 文件名:LocalRowMapper.java* 版权:Copyright 2007-2017 517na Tech. Co. Ltd. All Rights Reserved. * 描述: LocalRowMapper.java* 修改人:xiaofan* 修改时间:2017年3月19日* 修改内容:新增*/
package com.zxiaofan.dubboProvidder.rowMapper;import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
import java.util.HashMap;import org.springframework.jdbc.core.RowMapper;/*** * @author xiaofan*/
public class LocalRowMapper<T> implements RowMapper<T> {/*** 添加字段注释.*/private Class<?> targetClazz;/*** 添加字段注释.*/private HashMap<String, Field> fieldMap;/*** 构造函数.* * @param targetClazz* .*/public LocalRowMapper(Class<?> targetClazz) {this.targetClazz = targetClazz;fieldMap = new HashMap<>();Field[] fields = targetClazz.getDeclaredFields();for (Field field : fields) {// 同时存入大小写,如果表中列名区分大小写且有列ID和列iD,则会出现异常。// 阿里开发公约,建议表名、字段名必须使用小写字母或数字;禁止出现数字开头,禁止两个下划线中间只出现数字。fieldMap.put(field.getName(), field);// fieldMap.put(getFieldNameUpper(field.getName()), field);}}/*** {@inheritDoc}.*/@Overridepublic T mapRow(ResultSet rs, int arg1) throws SQLException {T obj = null;try {obj = (T) targetClazz.newInstance();final ResultSetMetaData metaData = rs.getMetaData();int columnLength = metaData.getColumnCount();String columnName = null;for (int i = 1; i <= columnLength; i++) {columnName = metaData.getColumnName(i);Class fieldClazz = fieldMap.get(columnName).getType();Field fiel
这篇关于SpringJDBC之RowMapper通用类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!