diff --git a/src/main/java/com/genersoft/iot/vmp/conf/dao/Id.java b/src/main/java/com/genersoft/iot/vmp/conf/dao/Id.java
new file mode 100644
index 00000000..45f20b20
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/conf/dao/Id.java
@@ -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 {
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/dao/Invisible.java b/src/main/java/com/genersoft/iot/vmp/conf/dao/Invisible.java
new file mode 100644
index 00000000..6983deff
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/conf/dao/Invisible.java
@@ -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 {
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/dao/SelectByEntityExtendedLanguageDriver.java b/src/main/java/com/genersoft/iot/vmp/conf/dao/SelectByEntityExtendedLanguageDriver.java
new file mode 100644
index 00000000..1dcc1597
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/conf/dao/SelectByEntityExtendedLanguageDriver.java
@@ -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 = "and __column=#{__field}";
+ ss.append(temp.replaceAll("__field", field.getName()).replaceAll("__column",
+ CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, field.getName())));
+ }
+ }
+ script = matcher.replaceAll(ss.toString());
+ script = "";
+ }
+ return super.createSqlSource(configuration, script, parameterType);
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/dao/SimpleInsertExtendedLanguageDriver.java b/src/main/java/com/genersoft/iot/vmp/conf/dao/SimpleInsertExtendedLanguageDriver.java
new file mode 100644
index 00000000..4269f0be
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/conf/dao/SimpleInsertExtendedLanguageDriver.java
@@ -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("( ");
+ for (Field field : parameterType.getDeclaredFields()) {
+ //如果不是加了忽略注解的字段就去拼接
+ if (field.isAnnotationPresent(Invisible.class)) {
+ continue;
+ }
+
+ String column = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, field.getName());
+ String temp = " __column,";
+ ss.append(temp.replaceAll("__field", field.getName()).replaceAll("__column", column));
+ }
+ ss.append(") VALUES ( ");
+
+ // 组建 ("1", "xx", "")值语句
+ for (Field field : parameterType.getDeclaredFields()) {
+ if (field.isAnnotationPresent(Invisible.class)) {
+ continue;
+ }
+
+ String temp = " #{__field},";
+ ss.append(temp.replaceAll("__field", field.getName()));
+ }
+
+ ss.append(") ");
+ script = matcher.replaceAll(ss.toString());
+
+ script = "";
+ }
+ return super.createSqlSource(configuration, script, parameterType);
+ }
+
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/dao/SimpleSelectInExtendedLanguageDriver.java b/src/main/java/com/genersoft/iot/vmp/conf/dao/SimpleSelectInExtendedLanguageDriver.java
new file mode 100644
index 00000000..654d4c9c
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/conf/dao/SimpleSelectInExtendedLanguageDriver.java
@@ -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("(#{__item})");
+ }
+
+ script = "";
+ return super.createSqlSource(configuration, script, parameterType);
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/dao/SimpleUpdateExtendedLanguageDriver.java b/src/main/java/com/genersoft/iot/vmp/conf/dao/SimpleUpdateExtendedLanguageDriver.java
new file mode 100644
index 00000000..145657d6
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/conf/dao/SimpleUpdateExtendedLanguageDriver.java
@@ -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("");
+
+ for (Field field : parameterType.getDeclaredFields()) {
+ if (!field.isAnnotationPresent(Id.class)){
+ String temp = "";
+ if(field.getType()== Date.class){
+ temp = "__column=#{__field},";
+ }else {
+ temp = "__column=#{__field},";
+ }
+ ss.append(temp.replaceAll("__field", field.getName()).replaceAll("__column",
+ CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, field.getName())));
+ }
+
+ }
+
+ ss.deleteCharAt(ss.lastIndexOf(","));
+ ss.append("");
+
+ script = matcher.replaceAll(ss.toString());
+
+ script = "";
+ }
+ return super.createSqlSource(configuration, script, parameterType);
+ }
+}