
6 changed files with 220 additions and 0 deletions
@ -0,0 +1,16 @@ |
|||
package com.genersoft.iot.vmp.conf.dao; |
|||
|
|||
import java.lang.annotation.ElementType; |
|||
import java.lang.annotation.Retention; |
|||
import java.lang.annotation.RetentionPolicy; |
|||
import java.lang.annotation.Target; |
|||
|
|||
/** |
|||
* 通过注解控制实体中的ID属性 |
|||
* |
|||
* @author |
|||
*/ |
|||
@Target(ElementType.FIELD) |
|||
@Retention(RetentionPolicy.RUNTIME) |
|||
public @interface Id { |
|||
} |
@ -0,0 +1,16 @@ |
|||
package com.genersoft.iot.vmp.conf.dao; |
|||
|
|||
import java.lang.annotation.ElementType; |
|||
import java.lang.annotation.Retention; |
|||
import java.lang.annotation.RetentionPolicy; |
|||
import java.lang.annotation.Target; |
|||
|
|||
/** |
|||
* 通过注解控制实体中的属性不存数据库 |
|||
* |
|||
* @author |
|||
*/ |
|||
@Target(ElementType.FIELD) |
|||
@Retention(RetentionPolicy.RUNTIME) |
|||
public @interface Invisible { |
|||
} |
@ -0,0 +1,43 @@ |
|||
package com.genersoft.iot.vmp.conf.dao; |
|||
|
|||
import com.google.common.base.CaseFormat; |
|||
import org.apache.ibatis.mapping.SqlSource; |
|||
import org.apache.ibatis.scripting.LanguageDriver; |
|||
import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; |
|||
import org.apache.ibatis.session.Configuration; |
|||
|
|||
import java.lang.reflect.Field; |
|||
import java.util.regex.Matcher; |
|||
import java.util.regex.Pattern; |
|||
|
|||
/** |
|||
* mybatis 注解模式 select 支持传入对象 驱动 |
|||
* SELECT * FROM xxx_user where 1=1 (#{userObject}) |
|||
* |
|||
* @author |
|||
*/ |
|||
public class SelectByEntityExtendedLanguageDriver extends XMLLanguageDriver implements LanguageDriver { |
|||
|
|||
private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); |
|||
|
|||
@Override |
|||
public SqlSource createSqlSource(Configuration configuration, String script, Class<?> parameterType) { |
|||
|
|||
Matcher matcher = inPattern.matcher(script); |
|||
if (matcher.find()) { |
|||
StringBuffer ss = new StringBuffer(); |
|||
for (Field field : parameterType.getDeclaredFields()) { |
|||
//如果不是加了忽略注解的字段就去拼接
|
|||
if (!field.isAnnotationPresent(Invisible.class)) { |
|||
//and type !=''
|
|||
String temp = "<if test=\"__field != null and __field!='' \">and __column=#{__field}</if>"; |
|||
ss.append(temp.replaceAll("__field", field.getName()).replaceAll("__column", |
|||
CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, field.getName()))); |
|||
} |
|||
} |
|||
script = matcher.replaceAll(ss.toString()); |
|||
script = "<script>" + script + "</script>"; |
|||
} |
|||
return super.createSqlSource(configuration, script, parameterType); |
|||
} |
|||
} |
@ -0,0 +1,59 @@ |
|||
package com.genersoft.iot.vmp.conf.dao; |
|||
|
|||
import com.google.common.base.CaseFormat; |
|||
import org.apache.ibatis.mapping.SqlSource; |
|||
import org.apache.ibatis.scripting.LanguageDriver; |
|||
import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; |
|||
import org.apache.ibatis.session.Configuration; |
|||
|
|||
import java.lang.reflect.Field; |
|||
import java.util.regex.Matcher; |
|||
import java.util.regex.Pattern; |
|||
|
|||
/** |
|||
* mybatis 注解模式 insert 支持传入对象 驱动 |
|||
* INSERT INTO xxx_user (#{userObject}) |
|||
* |
|||
* @author |
|||
*/ |
|||
public class SimpleInsertExtendedLanguageDriver extends XMLLanguageDriver implements LanguageDriver { |
|||
private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); |
|||
|
|||
@Override |
|||
public SqlSource createSqlSource(Configuration configuration, String script, Class<?> parameterType) { |
|||
Matcher matcher = inPattern.matcher(script); |
|||
if (matcher.find()) { |
|||
|
|||
// 组建 (xx, xx , xx)字段语句
|
|||
StringBuffer ss = new StringBuffer("( <trim suffixOverrides=\",\">"); |
|||
for (Field field : parameterType.getDeclaredFields()) { |
|||
//如果不是加了忽略注解的字段就去拼接
|
|||
if (field.isAnnotationPresent(Invisible.class)) { |
|||
continue; |
|||
} |
|||
|
|||
String column = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, field.getName()); |
|||
String temp = "<if test=\"__field != null\"> __column,</if>"; |
|||
ss.append(temp.replaceAll("__field", field.getName()).replaceAll("__column", column)); |
|||
} |
|||
ss.append("</trim>) VALUES ( <trim suffixOverrides=\",\">"); |
|||
|
|||
// 组建 ("1", "xx", "")值语句
|
|||
for (Field field : parameterType.getDeclaredFields()) { |
|||
if (field.isAnnotationPresent(Invisible.class)) { |
|||
continue; |
|||
} |
|||
|
|||
String temp = "<if test=\"__field != null\"> #{__field},</if>"; |
|||
ss.append(temp.replaceAll("__field", field.getName())); |
|||
} |
|||
|
|||
ss.append("</trim>) "); |
|||
script = matcher.replaceAll(ss.toString()); |
|||
|
|||
script = "<script>" + script + "</script>"; |
|||
} |
|||
return super.createSqlSource(configuration, script, parameterType); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,33 @@ |
|||
package com.genersoft.iot.vmp.conf.dao; |
|||
|
|||
import org.apache.ibatis.mapping.SqlSource; |
|||
import org.apache.ibatis.scripting.LanguageDriver; |
|||
import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; |
|||
import org.apache.ibatis.session.Configuration; |
|||
|
|||
import java.util.regex.Matcher; |
|||
import java.util.regex.Pattern; |
|||
|
|||
/** |
|||
* mybatis 注解模式 select 支持传入list 驱动 |
|||
* SELECT * FROM xxx_user WHERE user_id IN (#{userIds}) |
|||
* |
|||
* @author |
|||
*/ |
|||
public class SimpleSelectInExtendedLanguageDriver extends XMLLanguageDriver implements LanguageDriver { |
|||
|
|||
private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); |
|||
|
|||
@Override |
|||
public SqlSource createSqlSource(Configuration configuration, String script, Class<?> parameterType) { |
|||
|
|||
Matcher matcher = inPattern.matcher(script); |
|||
if (matcher.find()) { |
|||
script = matcher |
|||
.replaceAll("(<foreach collection=\"$1\" item=\"__item\" separator=\",\" >#{__item}</foreach>)"); |
|||
} |
|||
|
|||
script = "<script>" + script + "</script>"; |
|||
return super.createSqlSource(configuration, script, parameterType); |
|||
} |
|||
} |
@ -0,0 +1,53 @@ |
|||
package com.genersoft.iot.vmp.conf.dao; |
|||
|
|||
import com.google.common.base.CaseFormat; |
|||
import org.apache.ibatis.mapping.SqlSource; |
|||
import org.apache.ibatis.scripting.LanguageDriver; |
|||
import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; |
|||
import org.apache.ibatis.session.Configuration; |
|||
|
|||
import java.lang.reflect.Field; |
|||
import java.util.Date; |
|||
import java.util.regex.Matcher; |
|||
import java.util.regex.Pattern; |
|||
|
|||
/** |
|||
* mybatis 注解模式 update 支持传入对象 驱动 |
|||
* UPDATE xxx_user (#{userObject}) WHERE true and xxxx |
|||
* |
|||
* @author |
|||
*/ |
|||
public class SimpleUpdateExtendedLanguageDriver extends XMLLanguageDriver implements LanguageDriver { |
|||
private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); |
|||
|
|||
@Override |
|||
public SqlSource createSqlSource(Configuration configuration, String script, Class<?> parameterType) { |
|||
Matcher matcher = inPattern.matcher(script); |
|||
if (matcher.find()) { |
|||
StringBuffer ss = new StringBuffer(); |
|||
ss.append("<set>"); |
|||
|
|||
for (Field field : parameterType.getDeclaredFields()) { |
|||
if (!field.isAnnotationPresent(Id.class)){ |
|||
String temp = ""; |
|||
if(field.getType()== Date.class){ |
|||
temp = "<if test=\"__field != null \">__column=#{__field},</if>"; |
|||
}else { |
|||
temp = "<if test=\"__field != null \">__column=#{__field},</if>"; |
|||
} |
|||
ss.append(temp.replaceAll("__field", field.getName()).replaceAll("__column", |
|||
CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, field.getName()))); |
|||
} |
|||
|
|||
} |
|||
|
|||
ss.deleteCharAt(ss.lastIndexOf(",")); |
|||
ss.append("</set>"); |
|||
|
|||
script = matcher.replaceAll(ss.toString()); |
|||
|
|||
script = "<script>" + script + "</script>"; |
|||
} |
|||
return super.createSqlSource(configuration, script, parameterType); |
|||
} |
|||
} |
Loading…
Reference in new issue