RuoYI(若依)-SpringBoot-修改MySQL数据库为SQlist

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数据库

  • 24
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值