数据库表部分更新
对应的Mapper类
public interface WorksDetailDao extends BaseMapper<WorksDetail> {
void addAll(List<WorksDetail> list);
void updateAll(@Param(value = "list") List<WorksDetail> items);
}
对应的addAll的XML文件
<insert id="addAll" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
Insert Into `works_detail` (
`source_id`
,`platform`
)
Values
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.sourceId}
,#{item.platform}
)
</foreach>
</insert>
对应的updateAll的XML文件
<update id="updateAll" parameterType="java.util.List">
Update `works_detail`
<trim prefix="set" suffixOverrides=",">
<trim prefix="`author`=case" suffix="else `author` end,">
<foreach collection="list" item="item" index="index">
<if test="item.author!=null">
when `id`=#{item.id} then #{item.author}
</if>
</foreach>
</trim>
<trim prefix="`title`=case" suffix="else `title` end,">
<foreach collection="list" item="item" index="index">
<if test="item.title!=null">
when `id`=#{item.id} then #{item.title}
</if>
</foreach>
</trim>
</trim>
where
<foreach collection="list" separator="or" item="item" index="index">
`id`=#{item.id}
</foreach>
</update>
根据类生成xml语句代码
public class JavaBeanToTrimXml {
public static String generateUpdateTrimsForClass(Class<?> clazz) {
StringBuilder sb = new StringBuilder();
List<Field> fields = getAllFields(clazz);
for (Field field : fields) {
if (!field.getName().equals("id")) { // Assuming "id" is not supposed to be updated
String fieldName = field.getName();
String columnName = fieldName;
sb.append("\n\t<!-- ").append(camelToUnderscore(fieldName)).append(" -->\n");
sb.append("\t<trim prefix=\"`").append(camelToUnderscore(fieldName)).append("`=CASE\" suffix=\"ELSE `").append(camelToUnderscore(fieldName)).append("` END,\" >\n");
sb.append("\t\t<foreach collection=\"list\" item=\"item\" index=\"index\">\n");
sb.append("\t\t\t<if test=\"item.").append(fieldName).append(" != null\">\n");
sb.append("\t\t\t\tWHEN `id` = #{item.id} THEN #{item.").append(fieldName).append("}\n");
sb.append("\t\t\t</if>\n");
sb.append("\t\t</foreach>\n");
sb.append("\t</trim>");
}
}
return sb.toString();
}
private static List<Field> getAllFields(Class<?> clazz) {
List<Field> fields = new ArrayList<>();
while (clazz != null) {
for (Field field : clazz.getDeclaredFields()) {
fields.add(field);
}
clazz = clazz.getSuperclass();
}
return fields;
}
/**
* 将驼峰命名风格的字符串转换为下划线分隔的小写字母字符串。
*
* @param camelCaseString 驼峰命名风格的字符串
* @return 下划线分隔的小写字母字符串
*/
public static String camelToUnderscore(String camelCaseString) {
StringBuilder sb = new StringBuilder(camelCaseString.length());
for (int i = 0; i < camelCaseString.length(); i++) {
char c = camelCaseString.charAt(i);
if (Character.isUpperCase(c)) {
if (i > 0 && !Character.isUpperCase(camelCaseString.charAt(i - 1))) {
sb.append('_');
}
sb.append(Character.toLowerCase(c));
} else {
sb.append(c);
}
}
return sb.toString();
}
private static String convertFieldNameToColumnName(String fieldName) {
// Perform any necessary conversion from field name to column name.
// For simplicity, here we assume they are the same.
return fieldName;
}
public static void main(String[] args) {
String generatedTrims = generateUpdateTrimsForClass(GrainPortraitVo.class);
System.out.println(generatedTrims);
}
}
获取java的所有sql字段
public class JavaBeanToTableFeild {
public static String generateFieldList(Class<?> clazz) {
List<String> fieldNames = new ArrayList<>();
List<Field> fields = getAllFields(clazz);
for (Field field : fields) {
fieldNames.add("\"" + camelToUnderscore(field.getName()) + "\"" + "\n");
}
return String.join(", ", fieldNames);
}
/**
* 将驼峰命名风格的字符串转换为下划线分隔的小写字母字符串。
*
* @param camelCaseString 驼峰命名风格的字符串
* @return 下划线分隔的小写字母字符串
*/
public static String camelToUnderscore(String camelCaseString) {
StringBuilder sb = new StringBuilder(camelCaseString.length());
for (int i = 0; i < camelCaseString.length(); i++) {
char c = camelCaseString.charAt(i);
if (Character.isUpperCase(c)) {
if (i > 0 && !Character.isUpperCase(camelCaseString.charAt(i - 1))) {
sb.append('_');
}
sb.append(Character.toLowerCase(c));
} else {
sb.append(c);
}
}
return sb.toString();
}
private static List<Field> getAllFields(Class<?> clazz) {
List<Field> fields = new ArrayList<>();
while (clazz != null) {
for (Field field : clazz.getDeclaredFields()) {
fields.add(field);
}
clazz = clazz.getSuperclass();
}
return fields;
}
public static void main(String[] args) {
String fieldList = generateFieldList(GrainPortraitVo.class);
System.out.println(fieldList);
}
}