Procházet zdrojové kódy

修复:代码设置了 DbStyle 后 SqlManager.template() 空指针异常
优化:完善 beetlsql 的相关配置

xinggang před 4 roky
rodič
revize
53f1b4bca0

+ 24 - 39
src/main/java/co/weiku/beetlsqldemo/config/DataSourceConfig.java

@@ -1,11 +1,11 @@
 package co.weiku.beetlsqldemo.config;
 
 import com.zaxxer.hikari.HikariDataSource;
-import org.beetl.sql.core.DefaultNameConversion;
-import org.beetl.sql.core.SQLManager;
-import org.beetl.sql.core.db.MySqlStyle;
+import org.beetl.sql.core.*;
 import org.beetl.sql.core.db.SqlServer2012Style;
+import org.beetl.sql.ext.DebugInterceptor;
 import org.beetl.sql.starter.SQLManagerCustomize;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Primary;
@@ -54,12 +54,13 @@ public class DataSourceConfig {
                 //DBInitHelper.executeSqlScript(manager,"db/ini.sql");
 
                 //设置命名转化NC及数据库风格
+                //这里设置DbStyle后会造成sqlManager.template()方法的空指针异常(3.0.3)
                 if (sqlMangerName.equals("db1")) {
-                    manager.setDbStyle(new MySqlStyle());
-                    manager.setNc(new DefaultNameConversion());
+                    //manager.setDbStyle(new MySqlStyle());
+                    //manager.setNc(new DefaultNameConversion());
                 } else if (sqlMangerName.equals("db2")) {
-                    manager.setDbStyle(new SqlServer2012Style());
-                    manager.setNc(new DefaultNameConversion());
+                    //manager.setDbStyle(new SqlServer2012Style());
+                    //manager.setNc(new DefaultNameConversion());
                 }
 
                 //可以对sqlManager进行其它设置
@@ -67,37 +68,21 @@ public class DataSourceConfig {
         };
     }
 
-    //region ========== 其它备用代码 ==========
+    //db1:配置文件中定义
+    //db2:配置文件中定义
+    //db3:此处定义
+    @Bean(name = "db3")
+    public SQLManager getSQLManager1(@Qualifier("ds2") DataSource ds) {
+        ConnectionSource source = ConnectionSourceHelper.getSingle(ds);
+        //source是唯一必须的参数,其他参数都有默认值
+        SQLManagerBuilder builder = new SQLManagerBuilder(source);
+        //设置NameConversion,这里数据库命名采用下划线风格,使用UnderlinedNameConversion
+        builder.setNc(new DefaultNameConversion());
+        //设置一个拦截器,输出debug日志,包含了sql语句和执行参数,执行时间
+        builder.setInters(new Interceptor[]{new DebugInterceptor()});
+        //设置数据库分隔,必须跟数据库一样
+        builder.setDbStyle(new SqlServer2012Style());
 
-    //    @Bean(name = "db1")
-    //    public SQLManager getSQLManager1(@Qualifier("ds1") DataSource ds){
-    //        ConnectionSource source = ConnectionSourceHelper.getSingle(ds);
-    //        //source是唯一必须的参数,其他参数都有默认值
-    //        SQLManagerBuilder builder = new SQLManagerBuilder(source);
-    //        //设置NameConversion,这里数据库命名采用下划线风格,使用UnderlinedNameConversion
-    //        builder.setNc(new DefaultNameConversion());
-    //        //设置一个拦截器,输出debug日志,包含了sql语句和执行参数,执行时间
-    //        builder.setInters(new Interceptor[]{new DebugInterceptor()});
-    //        //设置数据库分隔,必须跟数据库一样
-    //        builder.setDbStyle(new MySqlStyle());
-    //
-    //        return builder.build();
-    //    }
-    //
-    //    @Bean(name = "db2")
-    //    public SQLManager getSQLManager2(@Qualifier("ds2") DataSource ds){
-    //        ConnectionSource source = ConnectionSourceHelper.getSingle(ds);
-    //        //source是唯一必须的参数,其他参数都有默认值
-    //        SQLManagerBuilder builder = new SQLManagerBuilder(source);
-    //        //设置NameConversion,这里数据库命名采用下划线风格,使用UnderlinedNameConversion
-    //        builder.setNc(new DefaultNameConversion());
-    //        //设置一个拦截器,输出debug日志,包含了sql语句和执行参数,执行时间
-    //        builder.setInters(new Interceptor[]{new DebugInterceptor()});
-    //        //设置数据库分隔,必须跟数据库一样
-    //        builder.setDbStyle(new SqlServer2012Style());
-    //
-    //        return builder.build();
-    //    }
-
-    //endregion
+        return builder.build();
+    }
 }

+ 25 - 15
src/main/java/co/weiku/beetlsqldemo/web/HomeController.java

@@ -3,14 +3,11 @@ package co.weiku.beetlsqldemo.web;
 import co.weiku.beetlsqldemo.bean.UserEntity;
 import co.weiku.beetlsqldemo.mapper.UserMapper;
 import org.beetl.sql.core.SQLManager;
-import org.beetl.sql.core.SqlId;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.HashMap;
-
 /**
  * 演示控制器
  * 作者:Xing Gang
@@ -28,6 +25,10 @@ public class HomeController {
     @Qualifier("db2")
     SQLManager sqlManager2;
 
+    @Autowired
+    @Qualifier("db3")
+    SQLManager sqlManager3;
+
     @Autowired
     UserMapper userMapper;
 
@@ -63,22 +64,31 @@ public class HomeController {
         //        sqlManager.executeUpdate(updateSqlReady);
 
         //var list1 = sqlManager1.unique(UserEntity.class, 1);
-        //        SQLReady sql = new SQLReady("select * from Article");
-        //        var list2 = sqlManager2.execute(sql, LinkedHashMap.class);
-        //        var item=list2.get(0);
+        //SQLReady sql = new SQLReady("select * from Article");
+        //var list = sqlManager2.execute(sql, LinkedHashMap.class);
 
         //单据sql文件
-        SqlId sql = SqlId.of("user", "select");
-        var param = new HashMap<String, Object>();
-        param.put("name", "moxiao");
-        var list = sqlManager1.select(sql, UserEntity.class, param);
-        for (var item : list) {
-            System.out.println(item.getName());
-        }
+        //        SqlId sql = SqlId.of("user", "select");
+        //        var param = new HashMap<String, Object>();
+        //        param.put("name", "moxiao");
+        //        var list = sqlManager1.select(sql, UserEntity.class, param);
+        //        for (var item : list) {
+        //            System.out.println(item.getName());
+        //        }
 
         //var userMapper = sqlManager1.getMapper(UserMapper.class);
-        var item = userMapper.all();
+        //var list = userMapper.all();
+        //        UserEntity u = new UserEntity();
+        //        u.setName("xxx");
+        //        var list = sqlManager2.template(u);
+
+        //SQLReady sql = new SQLReady("select * from [sys_sql]");
+        //var list = sqlManager3.execute(sql, LinkedHashMap.class);
+
+        UserEntity u = new UserEntity();
+        u.setName("moxiao");
+        var list = sqlManager1.template(u);
 
-        return item;
+        return list;
     }
 }

+ 11 - 3
src/main/resources/application.properties

@@ -1,4 +1,4 @@
-# 数据库连接配置
+# mysql数据库连接配置
 spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
 spring.datasource.url = jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
 spring.datasource.username = root
@@ -9,11 +9,19 @@ spring.datasource2.url = jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Demo
 spring.datasource2.username = sa
 spring.datasource2.password = 263499118
 
-# BeetlSql 配置
 beetlsql = db1,db2
-
 beetlsql.db1.ds = ds1
+beetlsql.db1.nameConversion = org.beetl.sql.core.DefaultNameConversion
+beetlsql.db1.dbStyle = org.beetl.sql.core.db.MySqlStyle
 beetlsql.db1.basePackage = co.weiku.beetlsqldemo.mapper
+beetlsql.db1.daoSuffix = Mapper
+beetlsql.db1.sqlPath = sql
+beetlsql.db1.dev = true
 
 beetlsql.db2.ds = ds2
+beetlsql.db2.nameConversion = org.beetl.sql.core.DefaultNameConversion
+beetlsql.db2.dbStyle = org.beetl.sql.core.db.SqlServer2012Style
 beetlsql.db2.basePackage = co.weiku.beetlsqldemo.mapper2
+beetlsql.db2.daoSuffix = Mapper
+beetlsql.db2.sqlPath = sql
+beetlsql.db2.dev = true