问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mybatis.返回对象和map哪个好

发布网友 发布时间:2022-04-24 04:39

我来回答

1个回答

热心网友 时间:2023-10-28 21:14

1、MapParam.java
需要mybatis返回Map时需要指定参数类型为MapParam,可以通过构造函数单独指定Key,也可以同时指定Key和Value属性。

[java] view plain copy
public class MapParam extends HashMap<String, Object> {
private static final long serialVersionUID = 1L;

private static final String KEY_FIELD = "_mapKeyField_";

private static final String VALUE_FIELD = "_mapValueField_";

public MapParam(String keyField) {
this.put(KEY_FIELD, keyField);
}

public MapParam(String keyField, String valueField) {
this.put(KEY_FIELD, keyField);
this.put(VALUE_FIELD, valueField);
}

public String getKeyField() {
return (String)this.get(KEY_FIELD);
}

public String getValueField() {
return (String)this.get(VALUE_FIELD);
}
}
2、MapInterceptor.java

拦截mybatis的结果集处理方法,进行自定义操作

[java] view plain copy
@Intercepts(@Signature(method = "handleResultSets", type = ResultSetHandler.class, args = { Statement.class }))
public class MapInterceptor implements Interceptor {

@Override
public Object intercept(Invocation invocation) throws Throwable {
Object target = invocation.getTarget();

if (target instanceof FastResultSetHandler) {
FastResultSetHandler handler = (FastResultSetHandler) target;

ParameterHandler pHandler = Reflect.getFieldValue(handler,
"parameterHandler");
Object paramObj = pHandler.getParameterObject();

if (paramObj instanceof MapParam) {
MapParam param = (MapParam) paramObj;

String keyField = param.getKeyField();
String valueField = param.getValueField();
if (valueField == null) {
return handleKeyResult(invocation.proceed(), keyField);
} else {
Statement statement = (Statement) invocation.getArgs()[0];

return handleResultSet(statement.getResultSet(), keyField,
valueField);
}
}
}

return invocation.proceed();
}

@Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}

@Override
public void setProperties(Properties properties) {

}

private Object handleKeyResult(Object resultObj, String keyField) {
List<?> list = (List<?>) resultObj;

Map<Object, Object> map = new HashMap<Object, Object>();

for (int i = 0; i < list.size(); i++) {
Object obj = list.get(i);

Object key = null;
if (obj instanceof Map<?, ?>) {
Map<?, ?> tmpMap = (Map<?, ?>) obj;
key = (Object) tmpMap.get(keyField);
} else {
key = Reflect.getFieldValue(obj, keyField);
}
map.put(key, obj);
}

List<Object> resultList = new ArrayList<Object>();
resultList.add(map);
return resultList;
}

private Object handleResultSet(ResultSet resultSet, String keyField,
String valueField) {
if (resultSet != null) {
// 定义用于存放Key-Value的Map
Map<Object, Object> map = new HashMap<Object, Object>();
// handleResultSets的结果一定是一个List,当我们的对应的Mapper接口定义的是返回一个单一的元素,并且handleResultSets返回的列表
// 的size为1时,Mybatis会取返回的第一个元素作为对应Mapper接口方法的返回值。
List<Object> resultList = new ArrayList<Object>();
try {
// 把每一行对应的Key和Value存放到Map中
while (resultSet.next()) {
Object key = resultSet.getObject(keyField);
Object value = resultSet.getObject(valueField);
map.put(key, value);
}
} catch (SQLException e) {
} finally {
closeResultSet(resultSet);
}
// 把封装好的Map存放到List中并进行返回
resultList.add(map);
return resultList;
}
return null;
}

/**
* 关闭ResultSet
*
* @param resultSet
* 需要关闭的ResultSet
*/
private void closeResultSet(ResultSet resultSet) {
try {
if (resultSet != null) {
resultSet.close();
}
} catch (SQLException e) {

}
}
}
3、Reflect.java

通过反射方法,获取拦截对象中的某些参数

[java] view plain copy
public class Reflect {

@SuppressWarnings("unchecked")
public static <T> T getFieldValue(Object obj, String fieldName) {
Object result = null;
Field field = getField(obj, fieldName);
if (field != null) {
field.setAccessible(true);
try {
result = field.get(obj);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return (T) result;
}

/**
* 利用反射获取指定对象里面的指定属性
*
* @param obj
* 目标对象
* @param fieldName
* 目标属性
* @return 目标字段
*/
private static Field getField(Object obj, String fieldName) {
Field field = null;
for (Class<?> clazz = obj.getClass(); clazz != Object.class; clazz = clazz
.getSuperclass()) {
try {
field = clazz.getDeclaredField(fieldName);
break;
} catch (NoSuchFieldException e) {
// 这里不用做处理,子类没有该字段可能对应的父类有,都没有就返回null。
}
}
return field;
}
}

4、注册*

在mybatis配置文件中注册自定义*,由于mybatis配置文件*,各个标签的位置必须按顺序来,我之前不清楚,加进去之后配置文件老是报错

[html] view plain copy
<plugins>
<plugin interceptor="com.aspirecn.mcp.common.interceptor.MapInterceptor"></plugin>
</plugins>

热心网友 时间:2023-10-28 21:14

1、MapParam.java
需要mybatis返回Map时需要指定参数类型为MapParam,可以通过构造函数单独指定Key,也可以同时指定Key和Value属性。

[java] view plain copy
public class MapParam extends HashMap<String, Object> {
private static final long serialVersionUID = 1L;

private static final String KEY_FIELD = "_mapKeyField_";

private static final String VALUE_FIELD = "_mapValueField_";

public MapParam(String keyField) {
this.put(KEY_FIELD, keyField);
}

public MapParam(String keyField, String valueField) {
this.put(KEY_FIELD, keyField);
this.put(VALUE_FIELD, valueField);
}

public String getKeyField() {
return (String)this.get(KEY_FIELD);
}

public String getValueField() {
return (String)this.get(VALUE_FIELD);
}
}
2、MapInterceptor.java

拦截mybatis的结果集处理方法,进行自定义操作

[java] view plain copy
@Intercepts(@Signature(method = "handleResultSets", type = ResultSetHandler.class, args = { Statement.class }))
public class MapInterceptor implements Interceptor {

@Override
public Object intercept(Invocation invocation) throws Throwable {
Object target = invocation.getTarget();

if (target instanceof FastResultSetHandler) {
FastResultSetHandler handler = (FastResultSetHandler) target;

ParameterHandler pHandler = Reflect.getFieldValue(handler,
"parameterHandler");
Object paramObj = pHandler.getParameterObject();

if (paramObj instanceof MapParam) {
MapParam param = (MapParam) paramObj;

String keyField = param.getKeyField();
String valueField = param.getValueField();
if (valueField == null) {
return handleKeyResult(invocation.proceed(), keyField);
} else {
Statement statement = (Statement) invocation.getArgs()[0];

return handleResultSet(statement.getResultSet(), keyField,
valueField);
}
}
}

return invocation.proceed();
}

@Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}

@Override
public void setProperties(Properties properties) {

}

private Object handleKeyResult(Object resultObj, String keyField) {
List<?> list = (List<?>) resultObj;

Map<Object, Object> map = new HashMap<Object, Object>();

for (int i = 0; i < list.size(); i++) {
Object obj = list.get(i);

Object key = null;
if (obj instanceof Map<?, ?>) {
Map<?, ?> tmpMap = (Map<?, ?>) obj;
key = (Object) tmpMap.get(keyField);
} else {
key = Reflect.getFieldValue(obj, keyField);
}
map.put(key, obj);
}

List<Object> resultList = new ArrayList<Object>();
resultList.add(map);
return resultList;
}

private Object handleResultSet(ResultSet resultSet, String keyField,
String valueField) {
if (resultSet != null) {
// 定义用于存放Key-Value的Map
Map<Object, Object> map = new HashMap<Object, Object>();
// handleResultSets的结果一定是一个List,当我们的对应的Mapper接口定义的是返回一个单一的元素,并且handleResultSets返回的列表
// 的size为1时,Mybatis会取返回的第一个元素作为对应Mapper接口方法的返回值。
List<Object> resultList = new ArrayList<Object>();
try {
// 把每一行对应的Key和Value存放到Map中
while (resultSet.next()) {
Object key = resultSet.getObject(keyField);
Object value = resultSet.getObject(valueField);
map.put(key, value);
}
} catch (SQLException e) {
} finally {
closeResultSet(resultSet);
}
// 把封装好的Map存放到List中并进行返回
resultList.add(map);
return resultList;
}
return null;
}

/**
* 关闭ResultSet
*
* @param resultSet
* 需要关闭的ResultSet
*/
private void closeResultSet(ResultSet resultSet) {
try {
if (resultSet != null) {
resultSet.close();
}
} catch (SQLException e) {

}
}
}
3、Reflect.java

通过反射方法,获取拦截对象中的某些参数

[java] view plain copy
public class Reflect {

@SuppressWarnings("unchecked")
public static <T> T getFieldValue(Object obj, String fieldName) {
Object result = null;
Field field = getField(obj, fieldName);
if (field != null) {
field.setAccessible(true);
try {
result = field.get(obj);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return (T) result;
}

/**
* 利用反射获取指定对象里面的指定属性
*
* @param obj
* 目标对象
* @param fieldName
* 目标属性
* @return 目标字段
*/
private static Field getField(Object obj, String fieldName) {
Field field = null;
for (Class<?> clazz = obj.getClass(); clazz != Object.class; clazz = clazz
.getSuperclass()) {
try {
field = clazz.getDeclaredField(fieldName);
break;
} catch (NoSuchFieldException e) {
// 这里不用做处理,子类没有该字段可能对应的父类有,都没有就返回null。
}
}
return field;
}
}

4、注册*

在mybatis配置文件中注册自定义*,由于mybatis配置文件*,各个标签的位置必须按顺序来,我之前不清楚,加进去之后配置文件老是报错

[html] view plain copy
<plugins>
<plugin interceptor="com.aspirecn.mcp.common.interceptor.MapInterceptor"></plugin>
</plugins>

热心网友 时间:2023-10-28 21:14

1、MapParam.java
需要mybatis返回Map时需要指定参数类型为MapParam,可以通过构造函数单独指定Key,也可以同时指定Key和Value属性。

[java] view plain copy
public class MapParam extends HashMap<String, Object> {
private static final long serialVersionUID = 1L;

private static final String KEY_FIELD = "_mapKeyField_";

private static final String VALUE_FIELD = "_mapValueField_";

public MapParam(String keyField) {
this.put(KEY_FIELD, keyField);
}

public MapParam(String keyField, String valueField) {
this.put(KEY_FIELD, keyField);
this.put(VALUE_FIELD, valueField);
}

public String getKeyField() {
return (String)this.get(KEY_FIELD);
}

public String getValueField() {
return (String)this.get(VALUE_FIELD);
}
}
2、MapInterceptor.java

拦截mybatis的结果集处理方法,进行自定义操作

[java] view plain copy
@Intercepts(@Signature(method = "handleResultSets", type = ResultSetHandler.class, args = { Statement.class }))
public class MapInterceptor implements Interceptor {

@Override
public Object intercept(Invocation invocation) throws Throwable {
Object target = invocation.getTarget();

if (target instanceof FastResultSetHandler) {
FastResultSetHandler handler = (FastResultSetHandler) target;

ParameterHandler pHandler = Reflect.getFieldValue(handler,
"parameterHandler");
Object paramObj = pHandler.getParameterObject();

if (paramObj instanceof MapParam) {
MapParam param = (MapParam) paramObj;

String keyField = param.getKeyField();
String valueField = param.getValueField();
if (valueField == null) {
return handleKeyResult(invocation.proceed(), keyField);
} else {
Statement statement = (Statement) invocation.getArgs()[0];

return handleResultSet(statement.getResultSet(), keyField,
valueField);
}
}
}

return invocation.proceed();
}

@Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}

@Override
public void setProperties(Properties properties) {

}

private Object handleKeyResult(Object resultObj, String keyField) {
List<?> list = (List<?>) resultObj;

Map<Object, Object> map = new HashMap<Object, Object>();

for (int i = 0; i < list.size(); i++) {
Object obj = list.get(i);

Object key = null;
if (obj instanceof Map<?, ?>) {
Map<?, ?> tmpMap = (Map<?, ?>) obj;
key = (Object) tmpMap.get(keyField);
} else {
key = Reflect.getFieldValue(obj, keyField);
}
map.put(key, obj);
}

List<Object> resultList = new ArrayList<Object>();
resultList.add(map);
return resultList;
}

private Object handleResultSet(ResultSet resultSet, String keyField,
String valueField) {
if (resultSet != null) {
// 定义用于存放Key-Value的Map
Map<Object, Object> map = new HashMap<Object, Object>();
// handleResultSets的结果一定是一个List,当我们的对应的Mapper接口定义的是返回一个单一的元素,并且handleResultSets返回的列表
// 的size为1时,Mybatis会取返回的第一个元素作为对应Mapper接口方法的返回值。
List<Object> resultList = new ArrayList<Object>();
try {
// 把每一行对应的Key和Value存放到Map中
while (resultSet.next()) {
Object key = resultSet.getObject(keyField);
Object value = resultSet.getObject(valueField);
map.put(key, value);
}
} catch (SQLException e) {
} finally {
closeResultSet(resultSet);
}
// 把封装好的Map存放到List中并进行返回
resultList.add(map);
return resultList;
}
return null;
}

/**
* 关闭ResultSet
*
* @param resultSet
* 需要关闭的ResultSet
*/
private void closeResultSet(ResultSet resultSet) {
try {
if (resultSet != null) {
resultSet.close();
}
} catch (SQLException e) {

}
}
}
3、Reflect.java

通过反射方法,获取拦截对象中的某些参数

[java] view plain copy
public class Reflect {

@SuppressWarnings("unchecked")
public static <T> T getFieldValue(Object obj, String fieldName) {
Object result = null;
Field field = getField(obj, fieldName);
if (field != null) {
field.setAccessible(true);
try {
result = field.get(obj);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return (T) result;
}

/**
* 利用反射获取指定对象里面的指定属性
*
* @param obj
* 目标对象
* @param fieldName
* 目标属性
* @return 目标字段
*/
private static Field getField(Object obj, String fieldName) {
Field field = null;
for (Class<?> clazz = obj.getClass(); clazz != Object.class; clazz = clazz
.getSuperclass()) {
try {
field = clazz.getDeclaredField(fieldName);
break;
} catch (NoSuchFieldException e) {
// 这里不用做处理,子类没有该字段可能对应的父类有,都没有就返回null。
}
}
return field;
}
}

4、注册*

在mybatis配置文件中注册自定义*,由于mybatis配置文件*,各个标签的位置必须按顺序来,我之前不清楚,加进去之后配置文件老是报错

[html] view plain copy
<plugins>
<plugin interceptor="com.aspirecn.mcp.common.interceptor.MapInterceptor"></plugin>
</plugins>

热心网友 时间:2023-10-28 21:14

1、MapParam.java
需要mybatis返回Map时需要指定参数类型为MapParam,可以通过构造函数单独指定Key,也可以同时指定Key和Value属性。

[java] view plain copy
public class MapParam extends HashMap<String, Object> {
private static final long serialVersionUID = 1L;

private static final String KEY_FIELD = "_mapKeyField_";

private static final String VALUE_FIELD = "_mapValueField_";

public MapParam(String keyField) {
this.put(KEY_FIELD, keyField);
}

public MapParam(String keyField, String valueField) {
this.put(KEY_FIELD, keyField);
this.put(VALUE_FIELD, valueField);
}

public String getKeyField() {
return (String)this.get(KEY_FIELD);
}

public String getValueField() {
return (String)this.get(VALUE_FIELD);
}
}
2、MapInterceptor.java

拦截mybatis的结果集处理方法,进行自定义操作

[java] view plain copy
@Intercepts(@Signature(method = "handleResultSets", type = ResultSetHandler.class, args = { Statement.class }))
public class MapInterceptor implements Interceptor {

@Override
public Object intercept(Invocation invocation) throws Throwable {
Object target = invocation.getTarget();

if (target instanceof FastResultSetHandler) {
FastResultSetHandler handler = (FastResultSetHandler) target;

ParameterHandler pHandler = Reflect.getFieldValue(handler,
"parameterHandler");
Object paramObj = pHandler.getParameterObject();

if (paramObj instanceof MapParam) {
MapParam param = (MapParam) paramObj;

String keyField = param.getKeyField();
String valueField = param.getValueField();
if (valueField == null) {
return handleKeyResult(invocation.proceed(), keyField);
} else {
Statement statement = (Statement) invocation.getArgs()[0];

return handleResultSet(statement.getResultSet(), keyField,
valueField);
}
}
}

return invocation.proceed();
}

@Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}

@Override
public void setProperties(Properties properties) {

}

private Object handleKeyResult(Object resultObj, String keyField) {
List<?> list = (List<?>) resultObj;

Map<Object, Object> map = new HashMap<Object, Object>();

for (int i = 0; i < list.size(); i++) {
Object obj = list.get(i);

Object key = null;
if (obj instanceof Map<?, ?>) {
Map<?, ?> tmpMap = (Map<?, ?>) obj;
key = (Object) tmpMap.get(keyField);
} else {
key = Reflect.getFieldValue(obj, keyField);
}
map.put(key, obj);
}

List<Object> resultList = new ArrayList<Object>();
resultList.add(map);
return resultList;
}

private Object handleResultSet(ResultSet resultSet, String keyField,
String valueField) {
if (resultSet != null) {
// 定义用于存放Key-Value的Map
Map<Object, Object> map = new HashMap<Object, Object>();
// handleResultSets的结果一定是一个List,当我们的对应的Mapper接口定义的是返回一个单一的元素,并且handleResultSets返回的列表
// 的size为1时,Mybatis会取返回的第一个元素作为对应Mapper接口方法的返回值。
List<Object> resultList = new ArrayList<Object>();
try {
// 把每一行对应的Key和Value存放到Map中
while (resultSet.next()) {
Object key = resultSet.getObject(keyField);
Object value = resultSet.getObject(valueField);
map.put(key, value);
}
} catch (SQLException e) {
} finally {
closeResultSet(resultSet);
}
// 把封装好的Map存放到List中并进行返回
resultList.add(map);
return resultList;
}
return null;
}

/**
* 关闭ResultSet
*
* @param resultSet
* 需要关闭的ResultSet
*/
private void closeResultSet(ResultSet resultSet) {
try {
if (resultSet != null) {
resultSet.close();
}
} catch (SQLException e) {

}
}
}
3、Reflect.java

通过反射方法,获取拦截对象中的某些参数

[java] view plain copy
public class Reflect {

@SuppressWarnings("unchecked")
public static <T> T getFieldValue(Object obj, String fieldName) {
Object result = null;
Field field = getField(obj, fieldName);
if (field != null) {
field.setAccessible(true);
try {
result = field.get(obj);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return (T) result;
}

/**
* 利用反射获取指定对象里面的指定属性
*
* @param obj
* 目标对象
* @param fieldName
* 目标属性
* @return 目标字段
*/
private static Field getField(Object obj, String fieldName) {
Field field = null;
for (Class<?> clazz = obj.getClass(); clazz != Object.class; clazz = clazz
.getSuperclass()) {
try {
field = clazz.getDeclaredField(fieldName);
break;
} catch (NoSuchFieldException e) {
// 这里不用做处理,子类没有该字段可能对应的父类有,都没有就返回null。
}
}
return field;
}
}

4、注册*

在mybatis配置文件中注册自定义*,由于mybatis配置文件*,各个标签的位置必须按顺序来,我之前不清楚,加进去之后配置文件老是报错

[html] view plain copy
<plugins>
<plugin interceptor="com.aspirecn.mcp.common.interceptor.MapInterceptor"></plugin>
</plugins>

热心网友 时间:2023-10-28 21:14

1、MapParam.java
需要mybatis返回Map时需要指定参数类型为MapParam,可以通过构造函数单独指定Key,也可以同时指定Key和Value属性。

[java] view plain copy
public class MapParam extends HashMap<String, Object> {
private static final long serialVersionUID = 1L;

private static final String KEY_FIELD = "_mapKeyField_";

private static final String VALUE_FIELD = "_mapValueField_";

public MapParam(String keyField) {
this.put(KEY_FIELD, keyField);
}

public MapParam(String keyField, String valueField) {
this.put(KEY_FIELD, keyField);
this.put(VALUE_FIELD, valueField);
}

public String getKeyField() {
return (String)this.get(KEY_FIELD);
}

public String getValueField() {
return (String)this.get(VALUE_FIELD);
}
}
2、MapInterceptor.java

拦截mybatis的结果集处理方法,进行自定义操作

[java] view plain copy
@Intercepts(@Signature(method = "handleResultSets", type = ResultSetHandler.class, args = { Statement.class }))
public class MapInterceptor implements Interceptor {

@Override
public Object intercept(Invocation invocation) throws Throwable {
Object target = invocation.getTarget();

if (target instanceof FastResultSetHandler) {
FastResultSetHandler handler = (FastResultSetHandler) target;

ParameterHandler pHandler = Reflect.getFieldValue(handler,
"parameterHandler");
Object paramObj = pHandler.getParameterObject();

if (paramObj instanceof MapParam) {
MapParam param = (MapParam) paramObj;

String keyField = param.getKeyField();
String valueField = param.getValueField();
if (valueField == null) {
return handleKeyResult(invocation.proceed(), keyField);
} else {
Statement statement = (Statement) invocation.getArgs()[0];

return handleResultSet(statement.getResultSet(), keyField,
valueField);
}
}
}

return invocation.proceed();
}

@Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}

@Override
public void setProperties(Properties properties) {

}

private Object handleKeyResult(Object resultObj, String keyField) {
List<?> list = (List<?>) resultObj;

Map<Object, Object> map = new HashMap<Object, Object>();

for (int i = 0; i < list.size(); i++) {
Object obj = list.get(i);

Object key = null;
if (obj instanceof Map<?, ?>) {
Map<?, ?> tmpMap = (Map<?, ?>) obj;
key = (Object) tmpMap.get(keyField);
} else {
key = Reflect.getFieldValue(obj, keyField);
}
map.put(key, obj);
}

List<Object> resultList = new ArrayList<Object>();
resultList.add(map);
return resultList;
}

private Object handleResultSet(ResultSet resultSet, String keyField,
String valueField) {
if (resultSet != null) {
// 定义用于存放Key-Value的Map
Map<Object, Object> map = new HashMap<Object, Object>();
// handleResultSets的结果一定是一个List,当我们的对应的Mapper接口定义的是返回一个单一的元素,并且handleResultSets返回的列表
// 的size为1时,Mybatis会取返回的第一个元素作为对应Mapper接口方法的返回值。
List<Object> resultList = new ArrayList<Object>();
try {
// 把每一行对应的Key和Value存放到Map中
while (resultSet.next()) {
Object key = resultSet.getObject(keyField);
Object value = resultSet.getObject(valueField);
map.put(key, value);
}
} catch (SQLException e) {
} finally {
closeResultSet(resultSet);
}
// 把封装好的Map存放到List中并进行返回
resultList.add(map);
return resultList;
}
return null;
}

/**
* 关闭ResultSet
*
* @param resultSet
* 需要关闭的ResultSet
*/
private void closeResultSet(ResultSet resultSet) {
try {
if (resultSet != null) {
resultSet.close();
}
} catch (SQLException e) {

}
}
}
3、Reflect.java

通过反射方法,获取拦截对象中的某些参数

[java] view plain copy
public class Reflect {

@SuppressWarnings("unchecked")
public static <T> T getFieldValue(Object obj, String fieldName) {
Object result = null;
Field field = getField(obj, fieldName);
if (field != null) {
field.setAccessible(true);
try {
result = field.get(obj);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return (T) result;
}

/**
* 利用反射获取指定对象里面的指定属性
*
* @param obj
* 目标对象
* @param fieldName
* 目标属性
* @return 目标字段
*/
private static Field getField(Object obj, String fieldName) {
Field field = null;
for (Class<?> clazz = obj.getClass(); clazz != Object.class; clazz = clazz
.getSuperclass()) {
try {
field = clazz.getDeclaredField(fieldName);
break;
} catch (NoSuchFieldException e) {
// 这里不用做处理,子类没有该字段可能对应的父类有,都没有就返回null。
}
}
return field;
}
}

4、注册*

在mybatis配置文件中注册自定义*,由于mybatis配置文件*,各个标签的位置必须按顺序来,我之前不清楚,加进去之后配置文件老是报错

[html] view plain copy
<plugins>
<plugin interceptor="com.aspirecn.mcp.common.interceptor.MapInterceptor"></plugin>
</plugins>
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
宝宝被蜱虫叮咬后怎么办? 宝宝被蜱虫咬后该怎么办? 宝宝被蜱虫咬了,要怎么办啊? 宝宝被蜱虫咬了该怎么办? 携程旅行飞机票怎么退 携程旅行退机票手续费介绍 苹果七用ios10.0.01为什么打字 翻照片都炒鸡卡?刚刚买了几天 而且是1... 苹果7怎么老是感觉一顿一顿的 有没有人把苹果手机系统换成ios10之后,老死 QQ会员怎样成为VIP2 mybatis怎么接收vue穿的参数 mybatis可以省略paramaterType吗 关于mybatis的使用之怎么传递参数总结 mybatis 怎么获取多个参数 mybatis找不到参数 Parameter &#39;page&#39; not found. Available parameters are [1, 0, param1, param2] mybatis映射文件parametertype有两种类型参数怎么写 MyBatis之SQL语句映射文件增删改查和Java参数如何对应 怎么用STRING给MYBATIS配置文件传值 mybatis传值同时传入list和string该怎么弄 mybatis 传入string参数,parametertype怎样写 mybatis怎么实现对象参数和注解参数同时传入 mybatis注解方式 mapper.java什么时候用@param MyBatis 传入多个参数时,如何处理 Mybatis 多个参数注解的@Param中的value值相同会怎样? mybatis 什么时候要加@param 为什么mybatis 需要@Param 怎么进行个人电脑隐私 笔记本如何设置两个模式一个工作一个私人 共用的电脑中如何设置自己的私人空间?怎么样加密? 怎么在自己的电脑设置一个要密码才看得到的文件夹?我是要放私人相片的 论文里面的混凝土裂缝图该用什么软件画? 混凝土开裂是什么原因造成的? 混凝土表面裂缝的原因是什么? 混凝土为什么会开裂? 图中路面混凝土出现裂缝的原因是为什么呢 混凝土开裂的原因,如何防治 刚浇混凝土地基开裂是什么原因? 常见的混凝土裂缝有哪几种 多少士兵一个班?几个班一个排?几个排一个连?几个连一个营?几个营一个团?以此类推 微信运动如何删除数据来源? 一个连多少人?一个排多少人?一个班多少人? 不小心把手机自带的计算机删了 怎么重新下回来? 我想知道多少人一个军,多少人一个营,多少人一个连……都是怎么分的 一个连有多少个排一共有多少人 怎样取消微信运动中记录的智能手环的步数 一个连几个排,一个排几个班? 一个班几个人,一个排几个人,一个连?以此类推。然后班排连团旅之后呢 一个连有多少人啊?一个排呢? 微信运动清空此功能消息记录怎么恢复 军队一个排多少人?一个连多少人?