Skip to content

Commit 778ef23

Browse files
committed
新版修改
Signed-off-by: ithander <[email protected]>
1 parent c0cc95a commit 778ef23

9 files changed

Lines changed: 402 additions & 0 deletions

File tree

src/main/java/org/ithang/MSQL.java

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
package org.ithang;
2+
3+
import java.util.Map;
4+
import java.util.concurrent.ConcurrentHashMap;
5+
6+
/**
7+
* 主要工具类,功能:根据实体类生成SQL
8+
* @author ithang
9+
*
10+
*/
11+
public class MSQL {
12+
13+
//private static boolean cache=false;//是否缓存解析实体类信息 (该功能要主用于生产环境,业务实体类不变的情况下,用于提高解析效率)
14+
private static Map<String,Mod> modelFields=new ConcurrentHashMap<>(50);
15+
16+
17+
public static String select(Class<?> cls,String ...fieldNames){
18+
StringBuilder sb=new StringBuilder();
19+
Mod md=getMod(cls);
20+
sb.append("select ");
21+
22+
if(null!=fieldNames&&fieldNames.length>0){
23+
int i=0;
24+
for(String fieldName:fieldNames){
25+
if(i>0){
26+
sb.append(" , ");
27+
}
28+
sb.append(md.getColumnName(fieldName));
29+
i++;
30+
}
31+
}else{
32+
String[] columnNames=md.getColumnNames();
33+
if(null!=columnNames){
34+
int i=0;
35+
for(String cm:columnNames){
36+
if(i>0){
37+
sb.append(",");
38+
}
39+
sb.append(cm);
40+
i++;
41+
}
42+
}
43+
}
44+
sb.append(" from ").append(md.getTableName());
45+
return sb.toString();
46+
}
47+
48+
public static String insert(Class<?> cls){
49+
StringBuilder sb=new StringBuilder();
50+
Mod md=getMod(cls);
51+
sb.append("insert into ").append(md.getTableName());
52+
String[] columnNames=md.getColumnNames();
53+
String[] fieldNames=md.getFieldNames();
54+
if(null!=columnNames){
55+
int i=0;
56+
sb.append("(");
57+
for(String cm:columnNames){
58+
if(i>0){
59+
sb.append(",");
60+
}
61+
sb.append(cm);
62+
i++;
63+
}
64+
sb.append(")");
65+
}
66+
sb.append("values");
67+
if(null!=fieldNames){
68+
int i=0;
69+
sb.append("(");
70+
for(String cm:fieldNames){
71+
if(i>0){
72+
sb.append(",");
73+
}
74+
sb.append(":").append(cm);
75+
i++;
76+
}
77+
sb.append(")");
78+
}
79+
return sb.toString();
80+
}
81+
82+
public static String update(Class<?> cls,String ...fieldNames){
83+
StringBuilder sb=new StringBuilder();
84+
Mod md=getMod(cls);
85+
String[] primaryFieldNames=md.getPrimaryFieldNames();
86+
sb.append("update ").append(md.getTableName());
87+
if(null==fieldNames){
88+
fieldNames=md.getFieldNames();
89+
}
90+
int i=0;
91+
sb.append(" set ");
92+
for(String fieldName:fieldNames){
93+
94+
for(String pfn:primaryFieldNames){
95+
if(fieldName==pfn){
96+
continue;
97+
}
98+
}
99+
100+
if(i>0){
101+
sb.append(" , ");
102+
}
103+
sb.append(md.getColumnName(fieldName)).append("=:").append(fieldName);
104+
i++;
105+
}
106+
107+
sb.append(" where ");
108+
i=0;
109+
boolean named=primaryFieldNames.length>2?true:false;
110+
for(String fieldName:primaryFieldNames){
111+
if(i>0){
112+
sb.append(" and ");
113+
}
114+
sb.append(fieldName);
115+
if(named){
116+
sb.append("=:").append(md.getColumnName(fieldName));
117+
}else{
118+
sb.append("=?");
119+
}
120+
i++;
121+
}
122+
return sb.toString();
123+
}
124+
125+
public static String delete(Class<?> cls){
126+
StringBuilder sb=new StringBuilder();
127+
Mod md=getMod(cls);
128+
String[] primaryFieldNames=md.getPrimaryFieldNames();
129+
130+
sb.append("delete from ").append(md.getTableName());
131+
132+
if(null!=primaryFieldNames&&primaryFieldNames.length>0){
133+
sb.append(" where ");
134+
boolean named=primaryFieldNames.length>1?true:false;
135+
int i=0;
136+
for(String fieldName:primaryFieldNames){
137+
if(i>0){
138+
sb.append(" and ");
139+
}
140+
sb.append(md.getColumnName(fieldName));
141+
if(named){
142+
sb.append("=:").append(md.getColumnName(fieldName));
143+
}else{
144+
sb.append("=?");
145+
}
146+
i++;
147+
}
148+
}
149+
150+
return sb.toString();
151+
}
152+
153+
private static Mod getMod(Class<?> cls){
154+
if(null!=modelFields){
155+
if(modelFields.containsKey(cls.getName())){
156+
return modelFields.get(cls.getName());
157+
}else{
158+
Mod mod=new Mod(cls);
159+
modelFields.put(cls.getName(), mod);
160+
return mod;
161+
}
162+
}
163+
return new Mod(cls);
164+
}
165+
166+
}

src/main/java/org/ithang/Mod.java

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package org.ithang;
2+
3+
import java.lang.reflect.Field;
4+
5+
public class Mod {
6+
7+
private Class<?> cls;
8+
private Field[] fields;
9+
10+
11+
private volatile String tableName;
12+
private volatile String[] columnNames;
13+
private volatile String[] fieldNames;
14+
private volatile String[] primaryFieldNames;
15+
16+
17+
public Mod(Class<?> cls){
18+
setCls(cls);
19+
setFields(cls.getDeclaredFields());
20+
tableName=ModTool.getTableName(this);
21+
fieldNames=ModTool.getFieldNames(this);
22+
columnNames=ModTool.getColumnNames(this);
23+
primaryFieldNames=ModTool.getPrimaryFieldNames(this);
24+
}
25+
26+
27+
public String getTableName(){
28+
if(null==tableName){
29+
tableName=ModTool.getTableName(this);
30+
}
31+
return tableName;
32+
}
33+
34+
public String[] getPrimaryFieldNames(){
35+
if(null==primaryFieldNames||0==primaryFieldNames.length){
36+
primaryFieldNames=ModTool.getPrimaryFieldNames(this);
37+
}
38+
return primaryFieldNames;
39+
}
40+
41+
public String[] getFieldNames(){
42+
if(null==fieldNames||0==fieldNames.length){
43+
fieldNames=ModTool.getFieldNames(this);
44+
}
45+
return fieldNames;
46+
}
47+
48+
public String[] getColumnNames(){
49+
if(null==columnNames||0==columnNames.length){
50+
columnNames=ModTool.getColumnNames(this);
51+
}
52+
return columnNames;
53+
}
54+
55+
public String getColumnName(String fieldName){
56+
if(null!=fieldName&&fieldName.trim().length()>0){
57+
return ModTool.getColumnName(this, fieldName);
58+
}
59+
return null;
60+
}
61+
62+
public Field getField(String fieldName) {
63+
if(null!=fields&&fields.length>0){
64+
for(Field field:fields){
65+
if(fieldName.equals(field.getName())){
66+
return field;
67+
}
68+
}
69+
}
70+
return null;
71+
}
72+
73+
public Field[] getFields() {
74+
return fields;
75+
}
76+
77+
public void setFields(Field[] fields) {
78+
this.fields = fields;
79+
}
80+
81+
public Class<?> getCls() {
82+
return cls;
83+
}
84+
85+
public void setCls(Class<?> cls) {
86+
this.cls = cls;
87+
}
88+
89+
90+
}
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package org.ithang;
2+
3+
import java.lang.reflect.Field;
4+
import java.util.Arrays;
5+
6+
import org.ithang.tools.lang.StrUtils;
7+
import org.ithang.tools.mate.Column;
8+
import org.ithang.tools.mate.Primary;
9+
import org.ithang.tools.mate.Table;
10+
11+
public class ModTool {
12+
13+
public static String getTableName(Mod md){
14+
if(md.getCls().isAnnotationPresent(Table.class)){
15+
if(md.getCls().isAnnotationPresent(Table.class)){
16+
return md.getCls().getAnnotation(Table.class).value();
17+
}
18+
}
19+
return StrUtils.addUnderline(md.getCls().getSimpleName());
20+
}
21+
22+
public static String getColumnName(Mod md,String fieldName){
23+
Field field=md.getField(fieldName);
24+
if(null!=field){
25+
if(field.isAnnotationPresent(Column.class)){
26+
return field.getAnnotation(Column.class).value();
27+
}else{
28+
StrUtils.addUnderline(field.getName());
29+
}
30+
}
31+
return StrUtils.addUnderline(fieldName);
32+
}
33+
34+
public static String[] getColumnNames(Mod md){
35+
if(null!=md&&null!=md.getFields()&&md.getFields().length>0){
36+
String[] columnNames=new String[md.getFields().length];
37+
int i=0;
38+
for(Field field:md.getFields()){
39+
if(field.isAnnotationPresent(Column.class)){
40+
columnNames[i++]=field.getAnnotation(Column.class).value();
41+
}else{
42+
columnNames[i++]=StrUtils.addUnderline(field.getName());
43+
}
44+
}
45+
return columnNames;
46+
}
47+
return null;
48+
}
49+
50+
public static String[] getFieldNames(Mod md){
51+
if(null!=md&&null!=md.getFields()&&md.getFields().length>0){
52+
String[] fieldNames=new String[md.getFields().length];
53+
int i=0;
54+
for(Field field:md.getFields()){
55+
fieldNames[i++]=field.getName();
56+
}
57+
return fieldNames;
58+
}
59+
return null;
60+
}
61+
62+
/**
63+
* 得到主键字段名称
64+
* @return
65+
*/
66+
public static String[] getPrimaryFieldNames(Mod md){
67+
if(null!=md&&null!=md.getFields()&&md.getFields().length>0){
68+
String[] fieldNames=new String[md.getFields().length];
69+
int i=0;
70+
for(Field field:md.getFields()){
71+
if(field.isAnnotationPresent(Primary.class)){
72+
fieldNames[i++]=field.getName();
73+
}
74+
}
75+
return Arrays.copyOf(fieldNames,i);
76+
}
77+
return null;
78+
}
79+
80+
/**
81+
* 得到主键字段名称
82+
* @return
83+
*/
84+
public static String[] getPrimaryColumnNames(Mod md){
85+
if(null!=md&&null!=md.getFields()&&md.getFields().length>0){
86+
String[] columnNames=new String[md.getFields().length];
87+
int i=0;
88+
for(Field field:md.getFields()){
89+
if(field.isAnnotationPresent(Primary.class)){
90+
if(field.isAnnotationPresent(Column.class)){
91+
columnNames[i++]=field.getAnnotation(Column.class).value();
92+
}else{
93+
columnNames[i++]=StrUtils.addUnderline(field.getName());
94+
}
95+
}
96+
}
97+
return columnNames;
98+
}
99+
return null;
100+
}
101+
}

src/main/java/org/ithang/Model.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
* @author ithang
1212
* 针对实体类每个字段与表中每一列的详细对应关系
1313
*/
14+
@Deprecated
1415
public class Model {
1516

1617
private String tableName;

src/main/java/org/ithang/ModelSQL.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
*
1515
* @param <T>
1616
*/
17+
@Deprecated
1718
public class ModelSQL<T> {
1819

1920
private String tableName;//表名称

src/test/java/org/ithang/entity/UserBean.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@ public class UserBean {
1515

1616
private String uname;
1717

18+
@Primary
1819
private int age;
1920

2021
private Integer grade;
2122

23+
@Primary
2224
private Long high;
2325

2426
@Column("create_time")

src/test/java/org/ithang/entity/a.md

Whitespace-only changes.

src/test/java/org/ithang/entity/b.md

Whitespace-only changes.

0 commit comments

Comments
 (0)