Browse Source

#91 github

druid datasource causes sql print issue
yuxiaobin 8 years ago
parent
commit
d7c8031ad1

+ 19 - 4
src/main/java/com/baomidou/mybatisplus/plugins/PerformanceInterceptor.java

@@ -53,6 +53,9 @@ import com.baomidou.mybatisplus.toolkit.SystemClock;
 public class PerformanceInterceptor implements Interceptor {
 
     private static final Log logger = LogFactory.getLog(PerformanceInterceptor.class);
+
+    private static final String DruidPooledPreparedStatement = "com.alibaba.druid.pool.DruidPooledPreparedStatement";
+    private static final String T4CPreparedStatement = "oracle.jdbc.driver.T4CPreparedStatement";
     /**
      * SQL 执行最大时长,超过自动停止运行,有助于发现问题。
      */
@@ -71,6 +74,7 @@ public class PerformanceInterceptor implements Interceptor {
     private boolean writeInLog = false;
 
     private Method oracleGetOriginalSqlMethod;
+    private Method druidGetSQLMethod;
 
     public Object intercept(Invocation invocation) throws Throwable {
         Statement statement;
@@ -81,7 +85,6 @@ public class PerformanceInterceptor implements Interceptor {
             statement = (Statement) firstArg;
         }
         try {
-            statement.getClass().getDeclaredField("stmt");
             statement = (Statement) SystemMetaObject.forObject(statement).getValue("stmt.statement");
         } catch (Exception e) {
             // do nothing
@@ -89,7 +92,19 @@ public class PerformanceInterceptor implements Interceptor {
 
         String originalSql = null;
         String stmtClassName = statement.getClass().getName();
-        if ("oracle.jdbc.driver.T4CPreparedStatement".equals(stmtClassName)) {
+        if(DruidPooledPreparedStatement.equals(stmtClassName)){
+            try {
+                if (druidGetSQLMethod == null) {
+                    Class<?> clazz = Class.forName(DruidPooledPreparedStatement);
+                    druidGetSQLMethod = clazz.getMethod("getSql");
+                }
+                Object stmtSql = druidGetSQLMethod.invoke(statement);
+                if (stmtSql != null && stmtSql instanceof String) {
+                    originalSql = (String) stmtSql;
+                }
+            } catch (Exception e) {
+            }
+        }else if (T4CPreparedStatement.equals(stmtClassName)) {
             try {
                 if (oracleGetOriginalSqlMethod != null) {
                     Object stmtSql = oracleGetOriginalSqlMethod.invoke(statement);
@@ -97,8 +112,8 @@ public class PerformanceInterceptor implements Interceptor {
                         originalSql = (String) stmtSql;
                     }
                 } else {
-                    Class<?> clazz = Class.forName("oracle.jdbc.driver.OracleStatement");
-                    oracleGetOriginalSqlMethod = clazz.getDeclaredMethod("getOriginalSql", (Class<?>) null);
+                    Class<?> clazz = Class.forName(T4CPreparedStatement);
+                    oracleGetOriginalSqlMethod = clazz.getDeclaredMethod("getOriginalSql");
                     if (oracleGetOriginalSqlMethod != null) {
                         Object stmtSql = oracleGetOriginalSqlMethod.invoke(statement);
                         if (stmtSql != null && stmtSql instanceof String) {

+ 62 - 0
src/test/java/com/baomidou/mybatisplus/test/oracle/OracleDruidTest.java

@@ -0,0 +1,62 @@
+package com.baomidou.mybatisplus.test.oracle;
+
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.test.oracle.config.DruidOracleDBConfig;
+import com.baomidou.mybatisplus.test.oracle.config.OracleMybatisPlusConfig;
+import com.baomidou.mybatisplus.test.oracle.entity.TestSequser;
+import com.baomidou.mybatisplus.test.oracle.mapper.TestSequserMapper;
+
+/**
+ * <p>
+ * </p>
+ *
+ * @author yuxiaobin
+ * @date 2017/7/4
+ */
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = {DruidOracleDBConfig.class, OracleMybatisPlusConfig.class})
+public class OracleDruidTest {
+
+    @Autowired
+    TestSequserMapper sequserMapper;
+
+    @Test
+    public void testSelectListMp() {
+        List<TestSequser> list = sequserMapper.selectList(new EntityWrapper<TestSequser>());
+        for (TestSequser u : list) {
+            System.out.println(u);
+        }
+    }
+
+    @Test
+    public void testSelectListNative() {
+        List<TestSequser> list = sequserMapper.getList();
+        for (TestSequser u : list) {
+            System.out.println(u);
+        }
+    }
+
+    @Test
+    public void testInsert(){
+        TestSequser user = new TestSequser();
+        user.setName("seqtest0627");
+        user.setAge(12);
+        user.setTestType(1);
+        sequserMapper.insert(user);
+        Long id = user.getId();
+        Assert.assertNotNull(id);
+
+
+    }
+
+
+}

+ 14 - 0
src/test/java/com/baomidou/mybatisplus/test/oracle/OracleUserTest.java

@@ -2,6 +2,7 @@ package com.baomidou.mybatisplus.test.oracle;
 
 import java.util.List;
 
+import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -45,4 +46,17 @@ public class OracleUserTest {
         }
     }
 
+    @Test
+    public void testInsert(){
+        TestSequser user = new TestSequser();
+        user.setName("seqtest0627");
+        user.setAge(12);
+        user.setTestType(1);
+        sequserMapper.insert(user);
+        Long id = user.getId();
+        Assert.assertNotNull(id);
+
+
+    }
+
 }

+ 37 - 0
src/test/java/com/baomidou/mybatisplus/test/oracle/config/DruidOracleDBConfig.java

@@ -0,0 +1,37 @@
+package com.baomidou.mybatisplus.test.oracle.config;
+
+import javax.sql.DataSource;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+import com.alibaba.druid.pool.DruidDataSource;
+
+/**
+ * <p>
+ * </p>
+ *
+ * @author yuxiaobin
+ * @date 2017/7/4
+ */
+@Configuration
+@EnableTransactionManagement
+public class DruidOracleDBConfig {
+
+    @Bean
+    public DataSource getDruidDataSource(){
+        DruidDataSource dataSource = new DruidDataSource();
+        dataSource.setUrl("jdbc:oracle:thin:@192.168.10.169:1521:orcl");
+        dataSource.setUsername("sa");
+        dataSource.setPassword("sa");
+        return dataSource;
+    }
+
+    @Bean
+    public DataSourceTransactionManager transactionManager(DataSource ds) {
+        return new DataSourceTransactionManager(ds);
+    }
+
+}

+ 10 - 4
src/test/java/com/baomidou/mybatisplus/test/oracle/config/OracleDBConfig.java

@@ -10,7 +10,7 @@ import org.springframework.jdbc.datasource.DataSourceTransactionManager;
 import org.springframework.jdbc.datasource.SimpleDriverDataSource;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
-import oracle.jdbc.OracleDriver;
+import oracle.jdbc.driver.OracleDriver;
 
 
 /**
@@ -26,10 +26,16 @@ public class OracleDBConfig {
     public DataSource dataSource() throws SQLException {
         SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
         dataSource.setDriver(new OracleDriver());
-        dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
-        dataSource.setUsername("mp");
-        dataSource.setPassword("mp");
+        dataSource.setUrl("jdbc:oracle:thin:@192.168.10.169:1521:orcl");
+        dataSource.setUsername("sa");
+        dataSource.setPassword("sa");
         return dataSource;
+//        SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
+//        dataSource.setDriver(new Driver());
+//        dataSource.setUrl("jdbc:h2:mem:AZ;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE");
+//        dataSource.setUsername("sa");
+//        dataSource.setPassword("");
+//        return dataSource;
     }
 
     @Bean

+ 4 - 2
src/test/java/com/baomidou/mybatisplus/test/oracle/config/OracleMybatisPlusConfig.java

@@ -15,6 +15,7 @@ import com.baomidou.mybatisplus.MybatisXMLLanguageDriver;
 import com.baomidou.mybatisplus.entity.GlobalConfiguration;
 import com.baomidou.mybatisplus.incrementer.OracleKeyGenerator;
 import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.plugins.PerformanceInterceptor;
 import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
 
 /**
@@ -41,7 +42,8 @@ public class OracleMybatisPlusConfig {
         sqlSessionFactory.setConfiguration(configuration);
         PaginationInterceptor pagination = new PaginationInterceptor();
         sqlSessionFactory.setPlugins(new Interceptor[]{
-                pagination
+                pagination,
+                new PerformanceInterceptor()
         });
         sqlSessionFactory.setGlobalConfig(globalConfiguration);
         return sqlSessionFactory.getObject();
@@ -51,7 +53,7 @@ public class OracleMybatisPlusConfig {
     public GlobalConfiguration globalConfiguration() {
         GlobalConfiguration conf = new GlobalConfiguration();
         conf.setIdType(1);
-        conf.setDbType("oracle");
+//        conf.setDbType("oracle");
         conf.setKeyGenerator(new OracleKeyGenerator());
 //        conf.setDbColumnUnderline(true);
         return conf;

+ 14 - 12
src/test/java/com/baomidou/mybatisplus/test/oracle/entity/BaseTestEntity.java

@@ -4,6 +4,8 @@ import java.io.Serializable;
 
 import com.baomidou.mybatisplus.annotations.KeySequence;
 import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
 
 /**
  * 用户表
@@ -14,23 +16,23 @@ public class BaseTestEntity implements Serializable {
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
 
-//    /**
-//     * 主键ID
-//     */
-//    @TableId(value = "TEST_ID", type = IdType.INPUT)
-//    private Long id;
+    /**
+     * 主键ID
+     */
+    @TableId(value = "TEST_ID", type = IdType.INPUT)
+    private Long id;
 
 //    public BaseTestEntity() {
 //
 //    }
 //
 //
-//    public Long getId() {
-//        return id;
-//    }
-//
-//    public void setId(Long id) {
-//        this.id = id;
-//    }
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
 
 }

+ 2 - 4
src/test/java/com/baomidou/mybatisplus/test/oracle/entity/TestSequser.java

@@ -3,9 +3,7 @@ package com.baomidou.mybatisplus.test.oracle.entity;
 import java.io.Serializable;
 
 import com.baomidou.mybatisplus.annotations.TableField;
-import com.baomidou.mybatisplus.annotations.TableId;
 import com.baomidou.mybatisplus.annotations.TableName;
-import com.baomidou.mybatisplus.enums.IdType;
 
 import lombok.Data;
 import lombok.experimental.Accessors;
@@ -25,8 +23,8 @@ public class TestSequser extends BaseTestEntity implements Serializable {
     /**
      * 主键ID
      */
-    @TableId(value = "TEST_ID", type = IdType.INPUT)
-    private Long id;
+//    @TableId(value = "TEST_ID", type = IdType.INPUT)
+//    private Long id;
     /**
      * 主键ID
      */

+ 2 - 2
src/test/resources/oracle-config.xml

@@ -71,8 +71,8 @@
 			<dataSource type="UNPOOLED">
 				<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
 				<property name="url" value="jdbc:oracle:thin:@192.168.10.169:1521:orcl" />
-				<property name="username" value="boxinfo" />
-				<property name="password" value="1qaz2wsx" />
+				<property name="username" value="sa" />
+				<property name="password" value="sa" />
 			<!-- 
 				<property name="driver" value="${jdbc.driver}" />
 				<property name="url" value="${jdbc.url}" />