一、反射及泛型
反射可以通过Class创建对象,而泛型则可以创建程序模板。
二、Mybatis中的应用
2.1定义mapper
定义一个通用的sql,允许传入表名table,以及查询条件where,返回值List<Map<String,Object>>。
public interface CommonMapper {
@Select("select * from ${table} where ${where}")
List<Map<String,Object>> GetList(@Param(value="table") String table, @Param(value="where") String where);
}
2.1定义service
我们使用通配符接收Class,然后通过Class.getDeclaredConstructor().newInstance()创建一个新对象,然后使用 BeanUtils.populate()填充对象。其实我们这里也就是相当于实现了Mybatis-plus自带的功能,不建议这样做,因为反射的消耗也挺大的。
public <E> List<E> GetList(Class<?> resultType, String where) throws Exception {
ArrayList<E> results = new ArrayList<E>();
ConvertUtils.register(new MyConverter(), LocalDateTime.class);
List<Map<String,Object>>result= commonMapper.GetList(resultType.getSimpleName(),where);
for(Map<String