heefox 发表于 2016-7-19 19:24:30

如何让JEECG3.6以上版本支持SQL SERVER2008

    自己也是多方了解,经实际使用打通了这个小关节,现在分享给大家。
    第一步,建立一个方言类:
package org.jeecgframework.core.common.hibernate.dialect;

import java.sql.Types;

import org.hibernate.dialect.SQLServer2008Dialect;
import org.hibernate.type.StringType;


/**
* ClassName: MySQLServer2008Dialect
* @Description: TODO
* @author yokoboy
* @date 2016-6-7
*/
public class MySQLServer2008Dialect extends SQLServer2008Dialect {
    publicMySQLServer2008Dialect() {
                super();
                registerHibernateType(Types.NVARCHAR, StringType.INSTANCE.getName());
        }
}
第二步修改类DBTypeUtil
package org.jeecgframework.core.util;



import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;

import org.jeecgframework.web.cgform.controller.autolist.CgAutoListController;
import org.jeecgframework.web.system.listener.OnlineListener;

/**
*
* @author张代浩
*
*/
public class DBTypeUtil {
        private static Logger log = Logger.getLogger(DBTypeUtil.class);
        /**
       * 获取数据库类型
       * @return
       */
        public static String getDBType(){
                String retStr="";
                ApplicationContext ctx = OnlineListener.getCtx();
                if (ctx==null) {
                       return retStr;//如果ctx为空,则服务器异常了
                }else{
                        org.springframework.orm.hibernate4.LocalSessionFactoryBean sf = (org.springframework.orm.hibernate4.LocalSessionFactoryBean)ctx.getBean("&sessionFactory");
                        String dbdialect = sf.getHibernateProperties().getProperty("hibernate.dialect");
                        log.debug(dbdialect);
                        if (dbdialect.equals("org.hibernate.dialect.MySQLDialect")) {
                                retStr="mysql";
                        }else if (dbdialect.contains("Oracle")) {//oracle有多个版本的方言
                                retStr = "oracle";
                        }else if (dbdialect.equals("org.hibernate.dialect.SQLServerDialect")) {
                                retStr = "sqlserver";
                        }else if (dbdialect.equals("org.hibernate.dialect.PostgreSQLDialect")) {
                                retStr = "postgres";
                        }
                        //                         org.jeecgframework.core.common.hibernate.dialect.MySQLServer2008Dialect
                        else if (dbdialect.equals("org.jeecgframework.core.common.hibernate.dialect.MySQLServer2008Dialect")) {
                                retStr = "sqlserver";
                        }
                        return retStr;
                }
        }
}
第三步:修改类DbTableUtil
package org.jeecgframework.web.cgform.service.impl.config.util;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.jeecgframework.web.cgform.service.config.DbTableHandleI;
import org.jeecgframework.web.cgform.service.config.DbTableServiceI;
import org.jeecgframework.web.cgform.service.impl.config.DbTableMysqlHandleImpl;
import org.jeecgframework.web.cgform.service.impl.config.DbTableOracleHandleImpl;
import org.jeecgframework.web.cgform.service.impl.config.DbTablePostgresHandleImpl;
import org.jeecgframework.web.cgform.service.impl.config.DbTableServiceMysqlImpl;
import org.jeecgframework.web.cgform.service.impl.config.TableSQLServerHandleImpl;

import org.hibernate.Session;
import org.hibernate.internal.SessionImpl;

/**
* 数据库工具类
* @author jueyue
* 2013年7月6日
*/
public class DbTableUtil {
       
        /**
       * 获取列的Map
       * key 是 cloumn_name value 是 List<Map<String, Object>>
       * @param queryForList
       * @return
       */
        public static Map<String, Object> getColumnMap(
                        List<Map<String, Object>> queryForList) {
                Map<String, Object> columnMap = new HashMap<String, Object>();
                for(int i =0 ;i<queryForList.size();i++){
                        columnMap.put(queryForList.get(i).get("column_name").toString(), queryForList.get(i));
                }
                return columnMap;
        }
       
        /**
       * 把配置中的字段翻译成数据库中的字段如:A ---> _a
       * @param fileName
       * @return
       */
        public static String translatorToDbField(String fileName){
               
                //去掉转换
                return fileName;
//                String name = "";
//                char[] chars = fileName.toCharArray();
//                for(int i =0 ;i<chars.length;i++){
//                        name+= chars>'A'&&chars<'Z'?("_"+Character.toLowerCase(chars)):chars;
//                }
//                return name;
        }
       
        /**
       * 获取DB 维护表的工具类
       * @return
       */
        public static DbTableServiceI getTableUtil(Sessionsession) {
                DbTableServiceI tableUtil = null;
                String dialect = ((SessionImpl)session).getFactory().getDialect()
                                .getClass().getName();
                if (dialect.equals("org.hibernate.dialect.MySQLDialect")) {
                        tableUtil = new DbTableServiceMysqlImpl();
                }
                return tableUtil;
        }

        public static DbTableHandleI getTableHandle(Sessionsession) {
                DbTableHandleI dbTableHandle = null;
                String dialect = ((SessionImpl)session).getFactory().getDialect()
                                .getClass().getName();
                if (dialect.equals("org.hibernate.dialect.MySQLDialect")) {
                        dbTableHandle = new DbTableMysqlHandleImpl();
                }else if (dialect.contains("Oracle")) {
                        dbTableHandle = new DbTableOracleHandleImpl();
                }else if (dialect.equals("org.hibernate.dialect.PostgreSQLDialect")) {
                        dbTableHandle = new DbTablePostgresHandleImpl();
                }else if (dialect.equals("org.hibernate.dialect.SQLServerDialect")) {
                        dbTableHandle = new TableSQLServerHandleImpl();
                }
                else if (dialect.equals("org.jeecgframework.core.common.hibernate.SQLServer2008Dialect")) {
                        dbTableHandle = new TableSQLServerHandleImpl();
                }
                return dbTableHandle;
        }
       
        /**
       * 数据库类型
       * @param session
       * @return
       */
       
        public static String getDataType(Session session){
                String dataType="MYSQL";
                String dialect = ((SessionImpl)session).getFactory().getDialect()
                .getClass().getName();
                if (dialect.equals("org.hibernate.dialect.MySQLDialect")) {
                        dataType="MYSQL";
                }else if (dialect.contains("Oracle")) {
                        dataType="ORACLE";
                }else if (dialect.equals("org.hibernate.dialect.PostgreSQLDialect")) {
                        dataType = "POSTGRESQL";
                }else if (dialect.equals("org.hibernate.dialect.SQLServerDialect")) {
                        dataType="SQLSERVER";
                }
                else if (dialect.equals("org.jeecgframework.core.common.hibernate.SQLServer2008Dialect")) {
                        dataType="SQLSERVER";
                }
                return dataType;
        }
}
每四步,修改配置:jeecg_database.properties#sqlserver
diver_name=org.jeecgframework.core.common.hibernate.dialect.MySQLServer2008Dialect

url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=jeecg
username=sa
password=123456

database_name=jeecg
第五步,修改配置:dbconfig.properties
#SQLServer2005\u4ee5\u4e0a
hibernate.dialect=org.jeecgframework.core.common.hibernate.dialect.MySQLServer2008Dialect
validationQuery.sqlserver=SELECT 1
jdbc.url.jeecg=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=jeecg
jdbc.username.jeecg=sa
jdbc.password.jeecg=123456
jdbc.dbType=sqlserver
第六步,重启一下ECLIPSE,享受开发的快乐吧!

String 发表于 2016-7-19 22:09:35

:lol好

amao800613 发表于 2016-7-22 17:23:14

为什么我的按照上面的步骤就是跑不起来呢:dizzy:

admin 发表于 2016-8-9 10:32:00

如果运行还有问题,替换下驱动包
<dependency>
                  <groupId>com.microsoft.sqlserver</groupId>
                  <artifactId>sqljdbc4</artifactId>
                  <version>4.0</version>
                </dependency>
页: [1]
查看完整版本: 如何让JEECG3.6以上版本支持SQL SERVER2008