Minidao 自定义拦截器
===
### 1.MiniDao配置文件–拦截器配置
[1]、MiniDaoBeanScannerConfigurer 增加拦截器参数emptyInterceptor
```
<!-- Minidao拦截器配置参数 -->
<property name="emptyInterceptor" ref="minidaoInterceptor"></property>
```
[2]、spring配置文件,配置minidao 拦截器bean
```
<!-- minidao拦截器 -->
<bean name="minidaoInterceptor" class="examples.interceptor.MinidaoInterceptor"></bean>
```
### 2.MiniDao拦截器代码 – 自定义示例
**说明:**自定义拦截器需要实现接口EmptyInterceptor,实现onInsert和onUpdate方法
**参考代码:**
```
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.jeecgframework.minidao.aspect.EmptyInterceptor;
import org.springframework.stereotype.Service;
/**
* minidao拦截器实现【自动填充:创建人,创建时间,修改人,修改时间】
*/
@Service
public class MinidaoInterceptor implements EmptyInterceptor {
@Override
public boolean onInsert(Field[] fields, Object obj) {
Map<Object, Object> map = new HashMap<Object, Object>();
for (int j = 0; j < fields.length; j++) {
fields[j].setAccessible(true);
String fieldName = fields[j].getName();
if ("createDate".equals(fieldName)) {
map.put("createDate", new Date());
}
if ("createBy".equals(fieldName)) {
map.put("createBy", "scott");
}
}
try {
//回写Value值
setFieldValue(map, obj);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
@Override
public boolean onUpdate(Field[] fields, Object obj) {
Map<Object, Object> map = new HashMap<Object, Object>();
for (int j = 0; j < fields.length; j++) {
fields[j].setAccessible(true);
String fieldName = fields[j].getName();
if ("updateBy".equals(fieldName)) {
map.put("updateBy", "scott");
}
if ("updateDate".equals(fieldName)) {
map.put("updateDate", new Date());
}
}
try {
//回写Value值
setFieldValue(map, obj);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 设置bean 属性值
*
* @param map
* @param bean
* @throws Exception
*/
private static void setFieldValue(Map<Object, Object> map, Object bean) throws Exception {
Class<?> cls = bean.getClass();
Method methods[] = cls.getDeclaredMethods();
Field fields[] = cls.getDeclaredFields();
for (Field field : fields) {
String fldtype = field.getType().getSimpleName();
String fldSetName = field.getName();
String setMethod = pareSetName(fldSetName);
if (!checkMethod(methods, setMethod)) {
continue;
}
if(!map.containsKey(fldSetName)){continue;}
Object value = map.get(fldSetName);
Method method = cls.getMethod(setMethod, field.getType());
if (null != value) {
if ("String".equals(fldtype)) {
method.invoke(bean, (String) value);
} else if ("Double".equals(fldtype)) {
method.invoke(bean, (Double) value);
} else if ("int".equals(fldtype)) {
int val = Integer.valueOf((String) value);
method.invoke(bean, val);
}else{
method.invoke(bean, value);
}
}
}
}
/**
* 拼接某属性set 方法
*
* @param fldname
* @return
*/
private static String pareSetName(String fldname) {
if (null == fldname || "".equals(fldname)) {
return null;
}
String pro = "set" + fldname.substring(0, 1).toUpperCase() + fldname.substring(1);
return pro;
}
/**
* 判断该方法是否存在
*
* @param methods
* @param met
* @return
*/
private static boolean checkMethod(Method methods[], String met) {
if (null != methods) {
for (Method method : methods) {
if (met.equals(method.getName())) {
return true;
}
}
}
return false;
}
}
```
- 前言
- MiniDao的介绍
- Springboot 快速集成minidao
- springmvc 快速集成minidao
- Minidao 技术架构
- Minidao Vs Mybatis
- MiniDao简介及特征
- MiniDao简介及特征
- MiniDao SQL分离写法
- Minidao SQL注解写法
- Minidao SQL参数用法
- MiniDao主键策略
- 数据库支持类型
- MiniDao安装及配置
- Minidao安装
- Minidao配置
- 自定义拦截器
- MiniDao基本概念
- Minidao基本理念
- DAO定义
- DAO注解
- SQL条件语法
- 实战技巧篇
- minidao条件like写法
- 参数格式化工具类:DaoFormat
- 批量查询写法