自定义一个批量修改数据的接口方法。批量操作时需要配置如下图。
实体类Mapper
public interface EmployeeMapper extends MyMapper<Employee>,Mapper<Employee> {
}
MyMapper.java
@UpdateProvider(
type = MyBatchUpdateProvider.class,
method = "dynamicSQL"
)
void batchUpdate(List<T> list);
MyBatchUpdateProvider.java
public class MyBatchUpdateProvider extends MapperTemplate {
public MyBatchUpdateProvider(Class<?> mapperClass, MapperHelper mapperHelper) {
super(mapperClass, mapperHelper);
}
/*
<foreach collection="list" item="record" separator=";" >
UPDATE table_emp
<set>
emp_name=#{record.empName},
emp_age=#{record.empAge},
emp_salary=#{record.empSalary},
</set>
where emp_id=#{record.empId}
</foreach>
*/
public String batchUpdate(MappedStatement ms) {
StringBuilder stringBuilder=new StringBuilder();
stringBuilder.append(
"<foreach collection=\"list\" item=\"record\" separator=\";\" >");
//获取实体类对应的Class对象
Class<?> entityClass = super.getEntityClass(ms);
String tableName = super.tableName(entityClass);
//生成update子句
String updateClause = SqlHelper.updateTable(entityClass, tableName);
//获取所有字段信息
Set<EntityColumn> columnSet = EntityHelper.getColumns(entityClass);
Iterator iterator = columnSet.iterator();
String idColumn=null;
String idHolder=null;
stringBuilder.append(updateClause);
stringBuilder.append("<set>");
while(iterator.hasNext()) {
EntityColumn column = (EntityColumn)iterator.next();
if (!column.isId() ) {
//使用非主键字段拼接SET子句
String columnName = column.getColumn();
//返回格式如:#{record.age,jdbcType=NUMERIC,typeHandler=MyTypeHandler}
String columnHolder = column.getColumnHolder("record");
stringBuilder.append(columnName).append("=")
.append(columnHolder).append(",");
} else if (column.isId()) {
idColumn = column.getColumn();
idHolder = column.getColumnHolder("record");
}
}
stringBuilder.append("</set>");
stringBuilder.append("where ").append(idColumn)
.append("=").append(idHolder);
stringBuilder.append("</foreach>");
return stringBuilder.toString();
}
}
spring-config.xml
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.my.maven.mappers"/>
<!--自定义的mapper-->
<property name="properties">
<value>
mappers=com.my.maven.myMapper.MyMapper
</value>
</property>
</bean>
笔记整合,一起学习,一起进步~~~