我在部署时,使用的是ruoyi-vue的3.8版本,后端数据库是sqlserver2012。从mysql改成sqlserver,改动项还是很多的。
sqlserver2012,mybatis的mapper中的list对应的sql语句需要增加order by(如果页面有分页逻辑),否则报类似的错误:OFFSET ? ROWS FETCH NEXT ? ROWS ONLY

初步参考文章

ruoyi(若依)系统使用SqlServer数据库改动部分
这个篇文章讲解了一部分,有些地方没写的详细,我又根据自己部署实践,下边会补充完善一些。

maven配置修改
<dependency>
   <groupId>com.microsoft.sqlserver</groupId>
   <artifactId>mssql-jdbc</artifactId>
</dependency>
application-XXX.yml配置修改
数据源配置
# 数据源配置
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver  #改驱动
        druid:
            # 主库数据源
            master:
                url: jdbc:sqlserver://localhost:1433;DatabaseName=XXXXXX;SelectMethod=cursor  #SelectMethod=cursor新增
                username: XXX
                password: XXXXX
            # 从库数据源
            slave:
                # 从数据源开关/默认关闭
                enabled: false
                url: 
                username: 
                password: 
            # 初始连接数
            initialSize: 5
            # 最小连接池数量
            minIdle: 10
            # 最大连接池数量
            maxActive: 20
            # 配置获取连接等待超时的时间
            maxWait: 60000
            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
            timeBetweenEvictionRunsMillis: 60000
            # 配置一个连接在池中最小生存的时间,单位是毫秒
            minEvictableIdleTimeMillis: 300000
            # 配置一个连接在池中最大生存的时间,单位是毫秒
            maxEvictableIdleTimeMillis: 900000
            # 配置检测连接是否有效
            validationQuery: SELECT 'X'   #此处新增
            testWhileIdle: true
            testOnBorrow: false
            testOnReturn: false
            webStatFilter: 
                enabled: true
            statViewServlet:
                enabled: true
                # 设置白名单,不填则允许所有访问
                allow:
                url-pattern: /druid/*
                # 控制台管理用户名和密码
                login-username: ruoyi
                login-password: 123456
            filter:
                stat:
                    enabled: true
                    # 慢SQL记录
                    log-slow-sql: true
                    slow-sql-millis: 1000
                    merge-sql: false     #此处新增
                wall:
                    config:
                        multi-statement-allow: true
PageHelper分页插件
# PageHelper分页插件
pagehelper:
  helperDialect: sqlserver2012   #此处修改,2008前的是sqlserver
  supportMethodsArguments: true
  params: count=countSql
  reasonable: true
数据库初始化脚本

数据库表的主键字段要设置成自增长的 IDENTITY(1, 1)
数据库初始化脚本

Mapper文件

ruoyi-generator模块下的resources文件包下的GenTableMapper.xml
全局搜索date_format,把全部date_format语法全部改成DATEDIFF方式
例如如下例子:

<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
--调整前 	and date_format(r.create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
			and DATEDIFF(day, #{params.beginTime}, r.create_time) >= 0
		</if>
		<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
--调整前 	and date_format(r.create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
			and DATEDIFF(day, r.create_time , #{params.endTime}) >= 0
		</if>
selectGenTableList
<select id="selectGenTableList" parameterType="GenTable" resultMap="GenTableResult">
		<include refid="selectGenTableVo"/>
		<where>
			<if test="tableName != null and tableName != ''">
				AND lower(table_name) like lower(concat('%', #{tableName}, '%'))
			</if>
			<if test="tableComment != null and tableComment != ''">
				AND lower(table_comment) like lower(concat('%', #{tableComment}, '%'))
			</if>
			<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
-- 				AND date_format(create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
				and DATEDIFF(day, #{params.beginTime}, create_time) >= 0
			</if>
			<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
-- 				AND date_format(create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
				and DATEDIFF(day, create_time , #{params.endTime}) >= 0
			</if>
		</where>
		order by create_time desc   -- 新增语句
	</select>
selectDbTableList
<select id="selectDbTableList" parameterType="GenTable" resultMap="GenTableResult">
		select a.[name] as table_name,isnull(g.[value],'-') as table_comment
		,create_date as create_time,modify_date as update_time
		from sys.tables a
		left join sys.extended_properties g on (a.object_id = g.major_id AND g.minor_id = 0)
		where a.[name] NOT LIKE 'qrtz_%' AND a.[name] NOT LIKE 'gen_%' and a.[name] NOT LIKE 'sys_%'
		AND a.[name] NOT IN (select table_name from gen_table)
		<if test="tableName != null and tableName != ''">
			AND lower(a.[name]) like lower(concat('%', #{tableName}, '%'))
		</if>
		<if test="tableComment != null and tableComment != ''">
			AND lower(g.[value]) like lower(concat('%', #{tableComment}, '%'))
		</if>
		<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
-- 			AND date_format(create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
			and DATEDIFF(day, #{params.beginTime}, create_date) >= 0
		</if>
		<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
-- 			AND date_format(create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
			and DATEDIFF(day, create_date , #{params.endTime}) >= 0
		</if>
        order by create_date desc
	</select>
	
	--   新增部分:这个是分页所需,如果不加入,就会报错order by有问题
	<select id="selectDbTableList_COUNT" resultType="Long">
			select count(0)
			from sys.tables a
			left join sys.extended_properties g on (a.object_id = g.major_id AND g.minor_id = 0)
			where a.[name] NOT LIKE 'qrtz_%' AND a.[name] NOT LIKE 'gen_%' and a.[name] NOT LIKE 'sys_%'
			AND a.[name] NOT IN (select table_name from gen_table)
		</select>
selectDbTableListByNames
<select id="selectDbTableListByNames" resultMap="GenTableResult">
		select a.[name] as table_name,isnull(g.[value],'-') as table_comment
		,create_date as create_time,modify_date as update_time
		from sys.tables a
		left join sys.extended_properties g on (a.object_id = g.major_id AND g.minor_id = 0)
		where a.[name] NOT LIKE 'qrtz_%' AND a.[name] NOT LIKE 'gen_%'
		and a.[name] in
	    <foreach collection="array" item="name" open="(" separator="," close=")">
 			#{name}
        </foreach> 
	</select>
selectTableByName
<select id="selectTableByName" parameterType="String" resultMap="GenTableResult">
		select a.[name] as table_name,isnull(g.[value],'-') as table_comment
		,create_date as create_time,modify_date as update_time
		from sys.tables a
		left join sys.extended_properties g on (a.object_id = g.major_id AND g.minor_id = 0)
		where a.[name] NOT LIKE 'qrtz_%' AND a.[name] NOT LIKE 'gen_%'
			AND g.[value] <![CDATA[ <> ]]> ''
		and table_name = #{tableName}
	</select>

ruoyi-generator模块下的resources文件包下的GenTableColumnMapper.xml

selectDbTableColumnsByName
<select id="selectDbTableColumnsByName" parameterType="String" resultMap="GenTableColumnResult">
		SELECT a.name AS column_name,
	   (
		   CASE
			   WHEN a.isnullable = 1 THEN
				   0
			   ELSE
				   1
			   END
		   )  AS is_required,
	   (
		   CASE
			   WHEN (
						SELECT COUNT(*)
						FROM sysobjects
						WHERE (
								name IN (
								SELECT name
								FROM sysindexes
								WHERE (id = a.id)
								  AND (
										indid IN (
										SELECT indid
										FROM sysindexkeys
										WHERE (id = a.id)
										  AND (
												colid IN (
												SELECT colid
												FROM syscolumns
												WHERE (id = a.id)
												  AND (name = a.name)
											)
											)
									)
									)
							)
							)
						  AND (xtype = 'PK')
					) > 0 THEN
				   1
			   ELSE
				   0
			   END
		   )  AS is_pk,
	   a.colorder  AS sort,
	   isnull(g.[value], ' ') AS column_comment,
	   (
		   CASE
			   WHEN COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 THEN
				   1
			   ELSE
				   0
			   END
		) AS is_increment,
	   b.name  AS column_type
		FROM syscolumns a
				 LEFT JOIN systypes b ON a.xtype = b.xusertype
				 INNER JOIN sysobjects d ON a.id = d.id
			AND d.xtype = 'U'
			AND d.name  <![CDATA[ <> ]]> 'dtproperties'
				 LEFT JOIN syscomments e ON a.cdefault = e.id
				 LEFT JOIN sys.extended_properties g ON a.id = g.major_id
			AND a.colid = g.minor_id
				 LEFT JOIN sys.extended_properties f ON d.id = f.class
			AND f.minor_id = 0
				 LEFT JOIN sys.objects h ON a.id = h.object_id
				 LEFT JOIN sys.schemas i ON h.schema_id = i.schema_id
		WHERE d.name = #{tableName}
		ORDER BY a.colorder
	</select>
代码生成模块修改
生成消息初始化配置

路径:\ruoyi-generator\src\main\resources\generator.yml

gen: 
  # 作者
  author: wade
  # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool
  packageName: com.ruoyi.custom
  # 自动去除表前缀,默认是false
  autoRemovePre: false
  # 表前缀(生成类名不会包含表前缀,多个用逗号分隔)
  tablePrefix: lx_
生成的sql文件

路径:\ruoyi-generator\src\main\resources\vm\sql\sql.vm
把函数名称sysdate改成getdate

-- 按钮父菜单ID(mysql)
-- SELECT @parentId := LAST_INSERT_ID();
-- 按钮父菜单ID(sqlserver)

-- 改成下边
-- 返回insertinto 语句后的主键值
declare @parentId bigint
set @parentId = @@IDENTITY;
新建子模块

官网子模块操作

子模块的pom依赖
  <dependencies>
        <!-- 通用工具-->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common</artifactId>
        </dependency>
    </dependencies>

百度搜索到,引用pagehelper就带带入了mybatis,所以在子模块中无需引用
在这里插入图片描述

生成代码放置位置
  1. 后端代码

把main文件夹中的放入子模块java和resources文件夹中,具体如下,flows是我的子模块名字。
如果一个子模块有多个功能的,第二个功能开始只能从controller中复制文件到先前的controller文件夹中。
在这里插入图片描述
2. 前端代码
把vue文件夹中的放入ruoyi-ui文件夹下的src下的对应文件夹。
在这里插入图片描述

报错信息汇总

当把代码生成的代码放入相应的模块中后,点击新增的菜单的时候会报这样的错误:
ERROR c.r.f.w.e.GlobalExceptionHandler - [handleRuntimeException,69] - 请求地址'/yourroute/list',发生未知异常.
Cause: com.microsoft.sqlserver.jdbc.SQLServerException: “@P0”附近有语法错误
解决办法:
就是在生成的mapper中的Listmapper代码中,增加order by语句

<select id="selectLxAutoXsList">
.......................
order by field   ---新增部分

生成的前端代码 index.vue中的表格字段代码报错:
Syntax Error: Unexpected token (1:6169)
@ ./src/views/yourroute/index.vue?vue&type=template&id=4d0a624a& 1:0-434 1:0-434

在这里插入图片描述
即使没有选择任何字典类型,但是生成的代码会在表格代码的字段属性添加了 <template>的字典下拉项语句

 <el-table-column label=" 客户编号" align="center" prop="danwbh">
     <template slot-scope="scope">
        <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.danwbh"/>
     </template>
 </el-table-column>

解决办法:
<template>这个代码删除。

Logo

快速构建 Web 应用程序

更多推荐