接下来一步一步操作:
ruoyi-admin下的poom里加上依赖
<dependency>
<groupId>com.microsoft.sqlservergroupId>
<artifactId>mssql-jdbcartifactId>
dependency>
数据库配置这样修改:
# 数据源配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
druid:
# 主库数据源
master:
url: jdbc:sqlserver://localhost:1433;DataBaseName=数据库名
username: 账户
password: 密码
validationQuery的值也要修改成SELECT 1
validationQuery: SELECT 1
PageHelper分页插件,注销helperDialect方言设置,新增autoRuntimeDialect=true表示运行时获取数据源
#PageHelper分页插件
pagehelper:
# helperDialect: mysql
supportMethodsArguments: true
params: count=countSql
autoRuntimeDialect: true
# 如果不能分页就把这句加上
# dialect: com.github.pagehelper.dialect.helper.SqlServerDialect
ruoyi-common\pom.xml模块添加整合依赖
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.4.2version>
dependency>
配置文件里修改MyBatis配置,改为mybatis-plus:
mybatis-plus:
# 搜索指定包别名
typeAliasesPackage: com.trace.**.domain
# 配置mapper的扫描,找到所有的mapper.xml映射文件
mapperLocations: classpath*:mapper/**/*Mapper.xml
# 加载全局的配置文件
configLocation: classpath:mybatis/mybatis-config.xml
framework.config包下添加Mybatis Plus配置MybatisPlusConfig.java。 PS:原来的MyBatisConfig.java需要删除掉
package com.ruoyi.framework.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* Mybatis Plus 配置
*
* @author ruoyi
*/
@EnableTransactionManagement(proxyTargetClass = true)
@Configuration
public class MybatisPlusConfig
{
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor()
{
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 分页插件
interceptor.addInnerInterceptor(paginationInnerInterceptor());
// 乐观锁插件
interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor());
// 阻断插件
interceptor.addInnerInterceptor(blockAttackInnerInterceptor());
return interceptor;
}
/**
* 分页插件,自动识别数据库类型 https://baomidou.com/guide/interceptor-pagination.html
*/
public PaginationInnerInterceptor paginationInnerInterceptor()
{
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
// 设置数据库类型为mysql
paginationInnerInterceptor.setDbType(DbType.MYSQL);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
paginationInnerInterceptor.setMaxLimit(-1L);
return paginationInnerInterceptor;
}
/**
* 乐观锁插件 https://baomidou.com/guide/interceptor-optimistic-locker.html
*/
public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor()
{
return new OptimisticLockerInnerInterceptor();
}
/**
* 如果是对全表的删除或更新操作,就会终止该操作 https://baomidou.com/guide/interceptor-block-attack.html
*/
public BlockAttackInnerInterceptor blockAttackInnerInterceptor()
{
return new BlockAttackInnerInterceptor();
}
}
quartz.config包下的ScheduleConfig.java解除注释
SysMenuMapper.xml文件内,把4个ifnull全部改为isnull
自此是可以启动了,但是有个小问题.当按时间查询语句的时候遇到date_format会报错.比如这里
应改为这样
<if test="params.beginTime != null and params.beginTime != ''">
and datediff(d, create_time, #{params.beginTime}) 0
if>
<if test="params.endTime != null and params.endTime != ''">
and datediff(d, create_time, #{params.endTime}) =]]> 0
if>
2023.2.17更新: 我觉得上面不妥,下面这样最好:
<if test="params.endTime != null and params.endTime != ''">
and verify_time between #{params.beginVerifyTime} and #{params.endVerifyTime}
if>
这里需要改好几个文件,但是有的不改其实关系也不大.(用不上就不报错呗)
比如sysdate()要改成getdate()
if null要改成isnull
date_format要改成datediff (注意这里datediff函数是有三个参数的,所以第一个参数要填dd)
这里是个坑,比如原来的语句是:
<if test="xxx">
and datediff(dd,oper_time,'%y%m%d') <= datediff(dd,#{params.endTime},'%y%m%d')
if>
那么要改成:
<if test="xxx">
and datediff(d, oper_time, #{params.endTime}) =]]> 0
if>
FIND_IN_SET 函数需要改成CHARINDEX
比如原来的语句是:
select * from sys_dept where FIND_IN_SET (#{deptId}, ancestors)
那么要改成:
select * from sys_dept where CHARINDEX(#{deptId}, ancestors)> 0
2021.9 最新发现,代码生成功能有问题,需要改动GenTableColumnMapper.xml和GenTableMapper.xml两个文件,如下
GenTableColumnMapper:
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.generator.mapper.GenTableColumnMapper">
<resultMap type="GenTableColumn" id="GenTableColumnResult">
<id property="columnId" column="column_id" />
<result property="tableId" column="table_id" />
<result property="columnName" column="column_name" />
<result property="columnComment" column="column_comment" />
<result property="columnType" column="column_type" />
<result property="javaType" column="java_type" />
<result property="javaField" column="java_field" />
<result property="isPk" column="is_pk" />
<result property="isIncrement" column="is_increment" />
<result property="isRequired" column="is_required" />
<result property="isInsert" column="is_insert" />
<result property="isEdit" column="is_edit" />
<result property="isList" column="is_list" />
<result property="isQuery" column="is_query" />
<result property="queryType" column="query_type" />
<result property="htmlType" column="html_type" />
<result property="dictType" column="dict_type" />
<result property="sort" column="sort" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
resultMap>
<sql id="selectGenTableColumnVo">
select column_id, table_id, column_name, column_comment, column_type, java_type, java_field, is_pk, is_increment, is_required, is_insert, is_edit, is_list, is_query, query_type, html_type, dict_type, sort, create_by, create_time, update_by, update_time from gen_table_column
sql>
<select id="selectGenTableColumnListByTableId" parameterType="Long" resultMap="GenTableColumnResult">
<include refid="selectGenTableColumnVo"/>
where table_id = #{tableId}
order by sort
select>
<select id="selectDbTableColumnsByName" parameterType="String" resultMap="GenTableColumnResult">
SELECT
cast(A.NAME as nvarchar) as column_name,
cast(B.NAME as nvarchar) + (case when B.NAME ='numeric' then '('+cast(A.prec as nvarchar)+','+cast(A.scale as nvarchar)+')' else '' end) as column_type,
cast(G.[VALUE] as nvarchar) as column_comment,
(SELECT 1 FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE Z WHERE TABLE_NAME=D.NAME and A.NAME = Z.column_name ) as is_pk,
colorder as sort
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!='DTPROPERTIES'
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.MAJOR_ID AND F.MINOR_ID =0
WHERE D.NAME = #{tableName}
ORDER BY A.COLORDER
select>
<insert id="insertGenTableColumn" parameterType="GenTableColumn" useGeneratedKeys="true" keyProperty="columnId">
insert into gen_table_column (
<if test="tableId != null and tableId != ''">table_id,if>
<if test="columnName != null and columnName != ''">column_name,if>
<if test="columnComment != null and columnComment != ''">column_comment,if>
<if test="columnType != null and columnType != ''">column_type,if>
<if test="javaType != null and javaType != ''">java_type,if>
<if test="javaField != null and javaField != ''">java_field,if>
<if test="isPk != null and isPk != ''">is_pk,if>
<if test="isIncrement != null and isIncrement != ''">is_increment,if>
<if test="isRequired != null and isRequired != ''">is_required,if>
<if test="isInsert != null and isInsert != ''">is_insert,if>
<if test="isEdit != null and isEdit != ''">is_edit,if>
<if test="isList != null and isList != ''">is_list,if>
<if test="isQuery != null and isQuery != ''">is_query,if>
<if test="queryType != null and queryType != ''">query_type,if>
<if test="htmlType != null and htmlType != ''">html_type,if>
<if test="dictType != null and dictType != ''">dict_type,if>
<if test="sort != null">sort,if>
<if test="createBy != null and createBy != ''">create_by,if>
create_time
)values(
<if test="tableId != null and tableId != ''">#{tableId},if>
<if test="columnName != null and columnName != ''">#{columnName},if>
<if test="columnComment != null and columnComment != ''">#{columnComment},if>
<if test="columnType != null and columnType != ''">#{columnType},if>
<if test="javaType != null and javaType != ''">#{javaType},if>
<if test="javaField != null and javaField != ''">#{javaField},if>
<if test="isPk != null and isPk != ''">#{isPk},if>
<if test="isIncrement != null and isIncrement != ''">#{isIncrement},if>
<if test="isRequired != null and isRequired != ''">#{isRequired},if>
<if test="isInsert != null and isInsert != ''">#{isInsert},if>
<if test="isEdit != null and isEdit != ''">#{isEdit},if>
<if test="isList != null and isList != ''">#{isList},if>
<if test="isQuery != null and isQuery != ''">#{isQuery},if>
<if test="queryType != null and queryType != ''">#{queryType},if>
<if test="htmlType != null and htmlType != ''">#{htmlType},if>
<if test="dictType != null and dictType != ''">#{dictType},if>
<if test="sort != null">#{sort},if>
<if test="createBy != null and createBy != ''">#{createBy},if>
getdate()
)
insert>
<update id="updateGenTableColumn" parameterType="GenTableColumn">
update gen_table_column
<set>
column_comment = #{columnComment},
java_type = #{javaType},
java_field = #{javaField},
is_insert = #{isInsert},
is_edit = #{isEdit},
is_list = #{isList},
is_query = #{isQuery},
is_required = #{isRequired},
query_type = #{queryType},
html_type = #{htmlType},
dict_type = #{dictType},
sort = #{sort},
update_by = #{updateBy},
update_time = getdate()
set>
where column_id = #{columnId}
update>
<delete id="deleteGenTableColumnByIds" parameterType="Long">
delete from gen_table_column where table_id in
<foreach collection="array" item="tableId" open="(" separator="," close=")">
#{tableId}
foreach>
delete>
<delete id="deleteGenTableColumns">
delete from gen_table_column where column_id in
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item.columnId}
foreach>
delete>
mapper>
GenTableMapper.xml
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.generator.mapper.GenTableMapper">
<resultMap type="GenTable" id="GenTableResult">
<id property="tableId" column="table_id" />
<result property="tableName" column="table_name" />
<result property="tableComment" column="table_comment" />
<result property="subTableName" column="sub_table_name" />
<result property="subTableFkName" column="sub_table_fk_name" />
<result property="className" column="class_name" />
<result property="tplCategory" column="tpl_category" />
<result property="packageName" column="package_name" />
<result property="moduleName" column="module_name" />
<result property="businessName" column="business_name" />
<result property="functionName" column="function_name" />
<result property="functionAuthor" column="function_author" />
<result property="genType" column="gen_type" />
<result property="genPath" column="gen_path" />
<result property="options" column="options" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
<collection property="columns" javaType="java.util.List" resultMap="GenTableColumnResult" />
resultMap>
<resultMap type="GenTableColumn" id="GenTableColumnResult">
<id property="columnId" column="column_id" />
<result property="tableId" column="table_id" />
<result property="columnName" column="column_name" />
<result property="columnComment" column="column_comment" />
<result property="columnType" column="column_type" />
<result property="javaType" column="java_type" />
<result property="javaField" column="java_field" />
<result property="isPk" column="is_pk" />
<result property="isIncrement" column="is_increment" />
<result property="isRequired" column="is_required" />
<result property="isInsert" column="is_insert" />
<result property="isEdit" column="is_edit" />
<result property="isList" column="is_list" />
<result property="isQuery" column="is_query" />
<result property="queryType" column="query_type" />
<result property="htmlType" column="html_type" />
<result property="dictType" column="dict_type" />
<result property="sort" column="sort" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
resultMap>
<sql id="selectGenTableVo">
select table_id, table_name, table_comment, sub_table_name, sub_table_fk_name, class_name, tpl_category, package_name, module_name, business_name, function_name, function_author, gen_type, gen_path, options, create_by, create_time, update_by, update_time, remark from gen_table
sql>
<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 CONVERT(varchar(100), create_time, 112) >= CONVERT(varchar(100), #{params.beginTime}, 112)
if>
<if test="params.endTime != null and params.endTime != ''">
AND CONVERT(varchar(100), create_time, 112) <= CONVERT(varchar(100), #{params.endTime}, 112)
if>
where>
select>
<select id="selectDbTableList" parameterType="GenTable" resultMap="GenTableResult">
SELECT cast(D.NAME as nvarchar) as table_name,cast(F.VALUE as nvarchar) as table_comment,
crdate as create_time,refdate as update_time FROM SYSOBJECTS D
inner JOIN SYS.EXTENDED_PROPERTIES F ON D.ID=F.MAJOR_ID
AND F.MINOR_ID=0 AND D.XTYPE='U' AND D.NAME!='DTPROPERTIES'
AND D.NAME NOT LIKE 'qrtz_%' AND D.NAME NOT LIKE 'gen_%'
AND D.NAME NOT IN (select table_name from gen_table)
<if test="tableName != null and tableName != ''">
AND lower(CAST(D.NAME AS VARCHAR)) like lower(concat('%', #{tableName}, '%'))
if>
<if test="tableComment != null and tableComment != ''">
AND lower(CAST(F.value AS VARCHAR)) like lower(concat('%', #{tableComment}, '%'))
if>
<if test="params.beginTime != null and params.beginTime != ''">
AND CONVERT(varchar(100), create_time, 112) >= CONVERT(varchar(100), #{params.beginTime}, 112)
if>
<if test="params.endTime != null and params.endTime != ''">
AND CONVERT(varchar(100), create_time, 112) <= CONVERT(varchar(100), #{params.endTime}, 112)
if>
order by create_time desc
select>
<select id="selectDbTableListByNames" resultMap="GenTableResult">
SELECT cast(D.NAME as nvarchar) as table_name,cast(F.VALUE as nvarchar) as table_comment,
crdate as create_time,refdate as update_time FROM SYSOBJECTS D
inner JOIN SYS.EXTENDED_PROPERTIES F ON D.ID=F.MAJOR_ID
AND F.MINOR_ID=0 AND D.XTYPE='U' AND D.NAME!='DTPROPERTIES'
AND D.NAME NOT LIKE 'qrtz_%' AND D.NAME NOT LIKE 'gen_%'
AND D.NAME in
<foreach collection="array" item="name" open="(" separator="," close=")">
#{name}
foreach>
select>
<select id="selectTableByName" parameterType="String" resultMap="GenTableResult">
select table_name, table_comment, create_time, update_time from information_schema.tables
where table_comment ]]> '' and table_schema = (Select Name From Master..SysDataBases Where DbId=(Select Dbid From Master..SysProcesses Where Spid = @@spid))
and table_name = #{tableName}
select>
<select id="selectGenTableById" parameterType="Long" resultMap="GenTableResult">
SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark,
c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
FROM gen_table t
LEFT JOIN gen_table_column c ON t.table_id = c.table_id
where t.table_id = #{tableId} order by c.sort
select>
<select id="selectGenTableByName" parameterType="String" resultMap="GenTableResult">
SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark,
c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
FROM gen_table t
LEFT JOIN gen_table_column c ON t.table_id = c.table_id
where t.table_name = #{tableName} order by c.sort
select>
<select id="selectGenTableAll" parameterType="String" resultMap="GenTableResult">
SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.options, t.remark,
c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
FROM gen_table t
LEFT JOIN gen_table_column c ON t.table_id = c.table_id
order by c.sort
select>
<insert id="insertGenTable" parameterType="GenTable" useGeneratedKeys="true" keyProperty="tableId">
insert into gen_table (
<if test="tableName != null">table_name,if>
<if test="tableComment != null and tableComment != ''">table_comment,if>
<if test="className != null and className != ''">class_name,if>
<if test="tplCategory != null and tplCategory != ''">tpl_category,if>
<if test="packageName != null and packageName != ''">package_name,if>
<if test="moduleName != null and moduleName != ''">module_name,if>
<if test="businessName != null and businessName != ''">business_name,if>
<if test="functionName != null and functionName != ''">function_name,if>
<if test="functionAuthor != null and functionAuthor != ''">function_author,if>
<if test="genType != null and genType != ''">gen_type,if>
<if test="genPath != null and genPath != ''">gen_path,if>
<if test="remark != null and remark != ''">remark,if>
<if test="createBy != null and createBy != ''">create_by,if>
create_time
)values(
<if test="tableName != null">#{tableName},if>
<if test="tableComment != null and tableComment != ''">#{tableComment},if>
<if test="className != null and className != ''">#{className},if>
<if test="tplCategory != null and tplCategory != ''">#{tplCategory},if>
<if test="packageName != null and packageName != ''">#{packageName},if>
<if test="moduleName != null and moduleName != ''">#{moduleName},if>
<if test="businessName != null and businessName != ''">#{businessName},if>
<if test="functionName != null and functionName != ''">#{functionName},if>
<if test="functionAuthor != null and functionAuthor != ''">#{functionAuthor},if>
<if test="genType != null and genType != ''">#{genType},if>
<if test="genPath != null and genPath != ''">#{genPath},if>
<if test="remark != null and remark != ''">#{remark},if>
<if test="createBy != null and createBy != ''">#{createBy},if>
getdate()
)
insert>
<update id="updateGenTable" parameterType="GenTable">
update gen_table
<set>
<if test="tableName != null">table_name = #{tableName},if>
<if test="tableComment != null and tableComment != ''">table_comment = #{tableComment},if>
<if test="subTableName != null">sub_table_name = #{subTableName},if>
<if test="subTableFkName != null">sub_table_fk_name = #{subTableFkName},if>
<if test="className != null and className != ''">class_name = #{className},if>
<if test="functionAuthor != null and functionAuthor != ''">function_author = #{functionAuthor},if>
<if test="genType != null and genType != ''">gen_type = #{genType},if>
<if test="genPath != null and genPath != ''">gen_path = #{genPath},if>
<if test="tplCategory != null and tplCategory != ''">tpl_category = #{tplCategory},if>
<if test="packageName != null and packageName != ''">package_name = #{packageName},if>
<if test="moduleName != null and moduleName != ''">module_name = #{moduleName},if>
<if test="businessName != null and businessName != ''">business_name = #{businessName},if>
<if test="functionName != null and functionName != ''">function_name = #{functionName},if>
<if test="options != null and options != ''">options = #{options},if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},if>
<if test="remark != null">remark = #{remark},if>
update_time = getdate()
set>
where table_id = #{tableId}
update>
<delete id="deleteGenTableByIds" parameterType="Long">
delete from gen_table where table_id in
<foreach collection="array" item="tableId" open="(" separator="," close=")">
#{tableId}
foreach>
delete>
mapper>
2023.2.22补充 : SSMS里顺便把需要操作的表名字改一下
生成后的代码包含的sql文件内的sql语句也需要修改,比如说:
-- 按钮父菜单ID
SELECT @parentId := LAST_INSERT_ID();
需要改成
declare @parentId int;
-- 按钮父菜单ID
SELECT * INTO #TMP FROM (select parentId = @@IDENTITY) T ;
SELECT parentId FROM #TMP;
插入语句当中的@parentId
-- 按钮 SQL
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('商品查询', @parentId, '1', '#', '', 1, 0, 'F', '0', '0', 'system:inventory:query','#', 'admin', sysdate(), '', null, '');
需要改成(SELECT parentId FROM #TMP)
当然获取时间的函数 sysdate()也需要改成getdate()
-- 按钮 SQL
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values('商品查询', (SELECT parentId FROM #TMP), '1', '#', '', 1, 0, 'F', '0', '0', 'system:inventory:query', '#', 'admin', getdate(), '', null, '');
删除import com.sun.xml.internal.bind.v2.TODO;
SysUserServiceImpl包下的import com.sun.xml.internal.bind.v2.TODO导包需要删除
PS: 自己改不好的话,就把整合版的下载下来对着抄吧.
首先如果不是要迁移项目的话,从头开始写的话,我建议直接用这个别人整合好的版本:
https://gitee.com/MaShangYouLi/RuoYi-Vue-SQLServer-C
我自己整合好的版本我简单测了一下基本功能没问题,部门停用那里有点问题,网盘下载太慢了,就用这个小鸭子图吧
把图片下载下来,后缀jpg改成zip打开即可获得源码.目前这个版本代码生成是有问题的,把上面的关于代码生成需要修改的地方复制进来就可以了.
关于多数据的配置这里有别人的教程:https://blog.csdn.net/weixin_41084290/article/details/120013730
我自己整合了一个,可以移步https://gitee.com/zhang-zihao123/ruoyi下载
这里有的人可能不会切换数据源,其实很简单,只要在对应的mapper下加上@DataSource(value = DataSourceType.SLAVE)注解就行了,不用从数据源的mapper不用加,用再加.
2023.5.6更新:
数据库事务注解
乐观锁注解
乐观锁要注意的一点是,如果在一个方法内有两个相同的类需要更新,我们在保证值的正确的情况下,可以主动给它+1,这样就能改变它的预期,解决乐观锁的问题。问题在此处
有效性注解是一套帮助我们继续对传输的参数进行数据校验的注解,通过配置Validation可以很轻松的完成对数据的约束。
有效性注解作用在类、方法和参数上
分类 | 限制 | 说明 |
---|---|---|
空和非空检查 | @Null | 限制只能为null |
@NotNull | 限制必须不为null | |
@NotEmpty | 验证注解的元嘉值不为null目不为空 (字符串长度不为0、集合大小不为0) | |
@NotBlank | 验证注解的元素值不为空 (不为null、去除首位空格后长度为0),不同于@NotEmpty@NotBlank只应用于字符串目在比较时会去除字符串的空格 | |
Boolean值检查 |
@AssertFalse | 限制必须为False |
@AssertTrue | 限制必须为True | |
长度检查 | @Size(max,min) | 限制字符长度必须在min到max之间 |
@Leanth | 限制字符长度必须在min到max之间 | |
日期检查 | @Future | 限制日期为当前时间之后 |
@FutureOrPresent | 限制日期为当前时间或之后 | |
@Past | 限制日期为当前时间之前 | |
@PastOrPresent | 限制日期为当前时间或之前 | |
数值检查 | @Max(Value) | 限制必须为一个不大于指定值的数字 |
@Min(Value) | 限制必须为一个不小于指定值的数字 | |
@DecimalMin(value) | 限制必须为一个不小于指定值的数字 | |
@DecimalMax(value) | 限制必须为一个不小于指定值的数字 | |
@Digits(integer,fraction) | 限制必须为小数,且整数部分的位数不能超过Integer,小数部分的位数不能超过fraction | |
@Negative | 限制必须为负整数 | |
@NegativeOrZero(value) | 限制必须为负整数或零 | |
@Positive(value) | 限制必须为正整数 | |
@PositiveOrZero(value) | 限制必须为正整数或零 | |
其他检查 | @Pattern(Value) | 限制必须符合指定的正则表达式 |
限制必须为email格式 |