1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.generator.plugins;
17
18 import java.util.List;
19
20 import org.mybatis.generator.api.PluginAdapter;
21 import org.mybatis.generator.api.IntrospectedColumn;
22 import org.mybatis.generator.api.IntrospectedTable;
23 import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
24 import org.mybatis.generator.api.dom.java.InnerClass;
25 import org.mybatis.generator.api.dom.java.JavaVisibility;
26 import org.mybatis.generator.api.dom.java.Method;
27 import org.mybatis.generator.api.dom.java.Parameter;
28 import org.mybatis.generator.api.dom.java.TopLevelClass;
29 import org.mybatis.generator.codegen.ibatis2.Ibatis2FormattingUtilities;
30
31
32
33
34
35
36
37
38
39
40
41
42 public class CaseInsensitiveLikePlugin extends PluginAdapter {
43
44
45
46
47 public CaseInsensitiveLikePlugin() {
48 super();
49 }
50
51 public boolean validate(List<String> warnings) {
52 return true;
53 }
54
55 @Override
56 public boolean modelExampleClassGenerated(TopLevelClass topLevelClass,
57 IntrospectedTable introspectedTable) {
58
59 InnerClass criteria = null;
60
61 for (InnerClass innerClass : topLevelClass.getInnerClasses()) {
62 if ("GeneratedCriteria".equals(innerClass.getType().getShortName())) {
63 criteria = innerClass;
64 break;
65 }
66 }
67
68 if (criteria == null) {
69
70 return true;
71 }
72
73 for (IntrospectedColumn introspectedColumn : introspectedTable
74 .getNonBLOBColumns()) {
75 if (!introspectedColumn.isJdbcCharacterColumn()
76 || !introspectedColumn.isStringColumn()) {
77 continue;
78 }
79
80 Method method = new Method();
81 method.setVisibility(JavaVisibility.PUBLIC);
82 method.addParameter(new Parameter(introspectedColumn
83 .getFullyQualifiedJavaType(), "value"));
84
85 StringBuilder sb = new StringBuilder();
86 sb.append(introspectedColumn.getJavaProperty());
87 sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
88 sb.insert(0, "and");
89 sb.append("LikeInsensitive");
90 method.setName(sb.toString());
91 method.setReturnType(FullyQualifiedJavaType.getCriteriaInstance());
92
93 sb.setLength(0);
94 sb.append("addCriterion(\"upper(");
95 sb.append(Ibatis2FormattingUtilities
96 .getAliasedActualColumnName(introspectedColumn));
97 sb.append(") like\", value.toUpperCase(), \"");
98 sb.append(introspectedColumn.getJavaProperty());
99 sb.append("\");");
100 method.addBodyLine(sb.toString());
101 method.addBodyLine("return (Criteria) this;");
102
103 criteria.addMethod(method);
104 }
105
106 return true;
107 }
108 }