MySql表转换为SQList表
使用NavicatPremium将Mysql表转换为SQlist表
导出完毕
新建SQlist链接
等待导入即可
至此数据库已经修改完毕
引入依赖修改数据库链接
pom文件中引入依赖
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.42.0.0</version>
</dependency>
数据库链接修改:
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
# driverClassName: com.mysql.cj.jdbc.Driver
driverClassName: org.sqlite.JDBC
druid:
# 主库数据源
master:
# url: jdbc:sqlite:sql\\db.sqlite3?date_string_format=yyyy-MM-dd HH:mm:ss
url: jdbc:sqlite:sql\\test.db?date_string_format=yyyy-MM-dd HH:mm:ss
# url: jdbc:sqlite:sql\\test.db?date_string_format=dd/MM/yyyy HH:mm:ss
username:
password:
# url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
# username: root
# password: root
到这里数据库连接已经结束了,因为MySQL语法与SQList语法有部分差异,所以接下来开始将部分MySQL语句修改为SQList语句!
部分MySQL语句修改为SQList语句
首先第一个问题:
ruoyi在列表查询的时候会根据create_time进行排序,多表查询时SQList报错。
第二个问题:
SQList中没有concat函数当需要进行拼接时可以使用 || 进行拼接
第三个问题:
SQList没有date_format函数
第四个问题:
在使用部门查询时用到了FIND_IN_SET函数,但是SQList中没有该函数
第五个问题:
SQList中使用的是datetime('now')来获取当前时间,返回的是时间字符串
第六个问题:
date类型的数据存储到SQList中变成毫秒值
以在线用户为例
先将类型改为String
再找到AsyncFactory.java将上图的两个字段转换为时间字符串
原来的savaOnline是将insert和update合并了,但是SQList中没有这个写法,所以我们需要修改一下逻辑
写如下三个方法
<insert id="insertOnline" parameterType="SysUserOnline">
insert into sys_user_online(sessionId, login_name, dept_name,
ipaddr, login_location, browser,
os, status, start_timestamp,
last_access_time, expire_time)
values (#{sessionId}, #{loginName}, #{deptName}, #{ipaddr},
#{loginLocation}, #{browser}, #{os}, #{status},
#{startTimestamp}, #{lastAccessTime}, #{expireTime})
</insert>
<update id="updateOnline" parameterType="SysUserOnline">
UPDATE sys_user_online
SET login_name = #{loginName},
dept_name = #{deptName},
ipaddr = #{ipaddr},
login_location = #{loginLocation},
browser = #{browser},
os = #{os},
status = #{status},
start_timestamp = #{startTimestamp},
last_access_time = #{lastAccessTime},
expire_time = #{expireTime}
WHERE sessionId = #{sessionId}
</update>
<select id="selectUserOnlineCount" parameterType="SysUserOnline" resultType="Long">
select COUNT(sessionId) from sys_user_online where sessionId = #{sessionId}
</select>
第七个问题:
根据时间区间查询结束时间当天的数据查询不出来
我们将date类型改为时间字符串之后,在页面上根据时间区间查询时就会出问题,开始时间为yyyy-MM-dd 00:00:00 但是截至时间也为yyyy-MM-dd 00:00:00 没有到一天中最后的时间点,所以结束时间当天的数据还是查询不出来。
我们以SysUserMapper.xml中的selectUserList为例:
在前边我们已经将SQL语句进行了修改
我们找到调用该方法的地方,对Param.endTime进行修改(其他用到时间区间查询的地方也是一样进行处理)
/**
* 根据条件分页查询用户列表
*
* @param user 用户信息
* @return 用户信息集合信息
*/
@Override
@DataScope(deptAlias = "d", userAlias = "u")
public List<SysUser> selectUserList(SysUser user)
{
Map<String, Object> params = user.getParams();
if (params.get("endTime")!=null && !"".equals(params.get("endTime"))){
String endDate = params.get("endTime").toString();
Date date = DateUtils.parseDate(endDate);
Date ofDayLast = DateUtils.getOfDayLast(date);
String s = DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", ofDayLast);
params.put("endTime",s);
}
return userMapper.selectUserList(user);
}
简写
/**
* 根据条件分页查询用户列表
*
* @param user 用户信息
* @return 用户信息集合信息
*/
@Override
@DataScope(deptAlias = "d", userAlias = "u")
public List<SysUser> selectUserList(SysUser user)
{
Map<String, Object> params = user.getParams();
if (params.get("endTime")!=null && !"".equals(params.get("endTime"))){
String endDate = DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", DateUtils.getOfDayLast(DateUtils.parseDate(params.get("endTime").toString())));
params.put("endTime",endDate);
}
return userMapper.selectUserList(user);
}
获取一天开始时间和结束时间的方法:
/**
* 获取一天的开始时间(如:2015-11-3 00:00:00.000)
* @param date 日期
* @return
*/
public static Date getOfDayFirst(Date date) {
if (date == null){
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 获取一天的最后时间(如:2015-11-3 23:59:59.999)
* @param date 日期
* @return
*/
public static Date getOfDayLast(Date date) {
if (date == null){
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
}
好了,基本上就是这么多了!
整合好的项目地址:
ruoyi-SpringBoot-MySQL-To-SQlist: 若依SpringBoot项目将MySQL数据库修改为SQlist数据库