增加数据库访问
第一:登录用户信息来自数据库(用户自身信息以及用户对应的权限信息)
第二:将上传的文件信息写入到数据库(自己做)
第三:将登录操作,文件上传操作的操作日志写入到数据库.(自己做)
第一:认证服务调用系统服务(获取用户以及用户权限)
第二:认证服务与资源服务都调用系统服务(将日志传递给系统服务,进行数据的持久化)-自己做
业务描述
系统服务sca-system工程用于提供其它服务需要的基础数据,例如用户信息,日志信息的记录等,其关键表设计例如:
服务设计 工程结构 数据初始化将jt-sso.sql文件在mysql中执行一下,其过程如下:
第一:登录mysql
mysql -uroot -proot
第二:通过source指令执行jt-sso.sql文件(文件存储路径)
source d:/jt-sso.sql创建系统工程
创建sca-system工程,此工程作为02-sca-files的子工程进行业务实现,例如:
添加项目核心依赖
mysql
mysql-connector-java
com.baomidou
mybatis-plus-boot-starter
3.4.2
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
org.springframework.boot
spring-boot-starter-web
创建项目配置文件
在项目中添加bootstrap.yml文件,其内容如下:
server:
port: 8061
spring:
application:
name: sca-system
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848
file-extension: yml
datasource:
url: jdbc:mysql:///jt-sso?serverTimezone=Asia/Shanghai&characterEncoding=utf8
username: root
password: root
创建项目启动及测试类
第一步:在项目中添加启动类,例如:
package com.jt;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SystemApplication {
public static void main(String[] args) {
SpringApplication.run(SystemApplication.class,args);
}
}
第二步:在项目中添加单元测试类,测试数据库连接,例如:
package com.jt;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
@SpringBootTest
public class DataSourceTests {
@Autowired
private DataSource dataSource;//HikariDataSource
@Test
void testGetConnection() throws SQLException {
Connection conn=
dataSource.getConnection();
System.out.println(conn);
}
}
Pojo对象逻辑实现
添加项目User对象,用于封装用户信息。
package com.jt.system.pojo;
import lombok.Data;
import java.io.Serializable;
@Data
public class User implements Serializable {
private static final long serialVersionUID = 4831304712151465443L;
private Long id;
private String username;
private String password;
private String status;
}
Dao对象逻辑实现
第一步:创建UserMapper接口,并定义基于用户名查询用户信息,基于用户id查询用户权限信息的方法,代码如下:
package com.jt.system.dao; import com.baomidou.mybatisplus.core.mapper.baseMapper; import com.jt.system.pojo.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper public interface UserMapper extends baseMapper{ @Select("select id,username,password,status " + "from tb_users " + "where username=#{username}") User selectUserByUsername(String username); @Select("select distinct m.permission " + "from tb_user_roles ur join tb_role_menus rm on ur.role_id=rm.role_id" + " join tb_menus m on rm.menu_id=m.id " + "where ur.user_id=#{userId}") List selectUserPermissions(Long userId); }
mysql单表查询,多表联合查询
#查询用户权限-方案1(单表多次查询)
#基于用户名获取用户信息
select * from tb_users where username= 'admin';
#基于用户id获取用户角色
select role_id from tb_user_roles where user_id =1;
#基于角色id获取菜单id
select menu_id from tb_role_menus where role_id =1;
#基于菜单id获取菜单对应的权限标识
select permission from tb_menus where id in(1,2,3);
#查询用户权限-方案2(多表嵌套查询)
select permission from tb_menus
where id in (select menu_id from tb_role_menus where role_id =
(select role_id from tb_user_roles where user_id =1))
#查询用户权限-方案3(多表关联查询)
select m.permission from tb_user_roles ur join tb_role_menus rm on ur.role_id=rm.role_id
join tb_menus m on rm.menu_id =m.id where ur.id=1
第二步:创建UserMapperTests类,对业务方法做单元测试,例如:
package com.jt;
import com.jt.system.pojo.User;
import com.jt.system.dao.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class UserMapperTests {
@Autowired
private UserMapper userMapper;
@Test
void testSelectUserByUsername(){
User user =
userMapper.selectUserByUsername("admin");
System.out.println(user);
}
@Test
void testSelectUserPermissions(){
List permission=
userMapper.selectUserPermissions(1L);
System.out.println(permission);
}
}



