添加lombok,MyBatis动态SQL和代码生成器

pull/362/head
AlanScipio 2 years ago
parent 484012c995
commit 2e8c447280

@ -0,0 +1,150 @@
{
"info": {
"_postman_id": "9067946a-288e-4a37-a276-4c453aa850e1",
"name": "RYAS-Cloud",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
"_exporter_id": "28622810"
},
"item": [
{
"name": "登录",
"request": {
"auth": {
"type": "noauth"
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"username\": \"admin\",\r\n \"password\": \"admin123\"\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{baseUrl}}/auth/specialAuth/login",
"host": [
"{{baseUrl}}"
],
"path": [
"auth",
"specialAuth",
"login"
]
}
},
"response": []
},
{
"name": "登出",
"request": {
"method": "DELETE",
"header": [],
"url": {
"raw": "{{baseUrl}}/auth/logout",
"host": [
"{{baseUrl}}"
],
"path": [
"auth",
"logout"
]
}
},
"response": []
},
{
"name": "打印测试信息-System",
"request": {
"auth": {
"type": "noauth"
},
"method": "GET",
"header": [],
"url": {
"raw": "{{baseUrl}}/system/test/showInfo",
"host": [
"{{baseUrl}}"
],
"path": [
"system",
"test",
"showInfo"
]
}
},
"response": []
},
{
"name": "打印测试信息-WMS",
"request": {
"auth": {
"type": "noauth"
},
"method": "GET",
"header": [],
"url": {
"raw": "{{baseUrl}}/wms/test/showInfo",
"host": [
"{{baseUrl}}"
],
"path": [
"wms",
"test",
"showInfo"
]
}
},
"response": []
}
],
"auth": {
"type": "apikey",
"apikey": [
{
"key": "value",
"value": "{{loginToken}}",
"type": "string"
},
{
"key": "key",
"value": "Authorization",
"type": "string"
}
]
},
"event": [
{
"listen": "prerequest",
"script": {
"type": "text/javascript",
"exec": [
""
]
}
},
{
"listen": "test",
"script": {
"type": "text/javascript",
"exec": [
""
]
}
}
],
"variable": [
{
"key": "baseUrl",
"value": "http://localhost:8080",
"type": "string"
},
{
"key": "loginToken",
"value": "",
"type": "string"
}
]
}

@ -36,6 +36,9 @@
<minio.version>8.2.2</minio.version> <minio.version>8.2.2</minio.version>
<poi.version>4.1.2</poi.version> <poi.version>4.1.2</poi.version>
<transmittable-thread-local.version>2.14.4</transmittable-thread-local.version> <transmittable-thread-local.version>2.14.4</transmittable-thread-local.version>
<lombok.version>1.18.30</lombok.version>
<mybatis.gen.version>1.4.2</mybatis.gen.version>
<mybatis.dynamic.version>1.5.0</mybatis.dynamic.version>
</properties> </properties>
<!-- 依赖声明 --> <!-- 依赖声明 -->
@ -156,6 +159,13 @@
<version>${druid.version}</version> <version>${druid.version}</version>
</dependency> </dependency>
<!-- Mybatis Generator -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>${mybatis.gen.version}</version>
</dependency>
<!-- 核心模块 --> <!-- 核心模块 -->
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
@ -259,6 +269,19 @@
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId> <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency> </dependency>
<!-- 测试工具 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>

@ -16,7 +16,7 @@
</description> </description>
<dependencies> <dependencies>
<!-- RuoYi Common Core--> <!-- RuoYi Common Core-->
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>

@ -1,16 +1,18 @@
package com.ruoyi.system.api.model; package com.ruoyi.system.api.model;
import com.ruoyi.system.api.domain.SysUser;
import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.util.Set; import java.util.Set;
import com.ruoyi.system.api.domain.SysUser;
/** /**
* *
* *
* @author ruoyi * @author ruoyi
*/ */
public class LoginUser implements Serializable public class LoginUser implements Serializable {
{ @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** /**
@ -58,93 +60,75 @@ public class LoginUser implements Serializable
*/ */
private SysUser sysUser; private SysUser sysUser;
public String getToken() public String getToken() {
{
return token; return token;
} }
public void setToken(String token) public void setToken(String token) {
{
this.token = token; this.token = token;
} }
public Long getUserid() public Long getUserid() {
{
return userid; return userid;
} }
public void setUserid(Long userid) public void setUserid(Long userid) {
{
this.userid = userid; this.userid = userid;
} }
public String getUsername() public String getUsername() {
{
return username; return username;
} }
public void setUsername(String username) public void setUsername(String username) {
{
this.username = username; this.username = username;
} }
public Long getLoginTime() public Long getLoginTime() {
{
return loginTime; return loginTime;
} }
public void setLoginTime(Long loginTime) public void setLoginTime(Long loginTime) {
{
this.loginTime = loginTime; this.loginTime = loginTime;
} }
public Long getExpireTime() public Long getExpireTime() {
{
return expireTime; return expireTime;
} }
public void setExpireTime(Long expireTime) public void setExpireTime(Long expireTime) {
{
this.expireTime = expireTime; this.expireTime = expireTime;
} }
public String getIpaddr() public String getIpaddr() {
{
return ipaddr; return ipaddr;
} }
public void setIpaddr(String ipaddr) public void setIpaddr(String ipaddr) {
{
this.ipaddr = ipaddr; this.ipaddr = ipaddr;
} }
public Set<String> getPermissions() public Set<String> getPermissions() {
{
return permissions; return permissions;
} }
public void setPermissions(Set<String> permissions) public void setPermissions(Set<String> permissions) {
{
this.permissions = permissions; this.permissions = permissions;
} }
public Set<String> getRoles() public Set<String> getRoles() {
{
return roles; return roles;
} }
public void setRoles(Set<String> roles) public void setRoles(Set<String> roles) {
{
this.roles = roles; this.roles = roles;
} }
public SysUser getSysUser() public SysUser getSysUser() {
{
return sysUser; return sysUser;
} }
public void setSysUser(SysUser sysUser) public void setSysUser(SysUser sysUser) {
{
this.sysUser = sysUser; this.sysUser = sysUser;
} }
} }

@ -0,0 +1,25 @@
package com.ruoyi.auth.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
/**
* @author Alan Scipio
* created on 2024/2/1
*/
@Configuration
@RefreshScope
@ConfigurationProperties(prefix = "special.auth")
public class SpecialAuthProperties {
private Boolean loginEnabled;
public Boolean getLoginEnabled() {
return loginEnabled;
}
public void setLoginEnabled(Boolean loginEnabled) {
this.loginEnabled = loginEnabled;
}
}

@ -0,0 +1,39 @@
package com.ruoyi.auth.controller;
import com.ruoyi.auth.config.SpecialAuthProperties;
import com.ruoyi.auth.form.LoginBody;
import com.ruoyi.common.core.domain.R;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
*
*
* @author Alan Scipio
* created on 2024/2/1
*/
@RequestMapping("/specialAuth")
@RestController
public class SpecialAuthController {
@Resource
private TokenController tokenController;
@Resource
private SpecialAuthProperties specialAuthProperties;
/**
*
*/
@PostMapping("login")
public R<?> login(@RequestBody LoginBody form) {
if (specialAuthProperties.getLoginEnabled() == null || !specialAuthProperties.getLoginEnabled()) {
return R.fail("Special login is not enabled.");
} else {
return tokenController.login(form);
}
}
}

@ -0,0 +1,43 @@
package ryas.test;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.utils.JwtUtils;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import io.jsonwebtoken.Claims;
import org.junit.jupiter.api.Test;
import java.util.HashMap;
import java.util.Map;
/**
* @author Alan Scipio
* created on 2024/2/1
*/
public class TokenTest {
@Test
public void createToken() {
int userId = 1;
String userName = "管理员";
String userKey = IdUtils.fastUUID();
Map<String, Object> claimsMap = new HashMap<>();
claimsMap.put(SecurityConstants.USER_KEY, userKey);
claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId);
claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName);
String token = JwtUtils.createToken(claimsMap);
System.out.println(token);
}
@Test
public void parseToken() {
String token = "eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX2tleSI6IjhkZDc5ZDcxLTg3MGYtNDliMy1hNGVkLTQxNzI5OTdmNTcxNCIsInVzZXJuYW1lIjoiYWRtaW4ifQ.b5230z65JXGzz-JpIa_1fSkDs_gct4nbuQ0wexW78POxixTzyeBAksh1pUUU9hEPW2_cIpK1MSF6ypi9RhxtxQ";
Claims claims = JwtUtils.parseToken(token);
for (Map.Entry<String, Object> entry : claims.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}

@ -47,7 +47,7 @@
<artifactId>transmittable-thread-local</artifactId> <artifactId>transmittable-thread-local</artifactId>
</dependency> </dependency>
<!-- PageHelper --> <!-- PageHelper (带来了mybatis-spring-boot-starter) -->
<dependency> <dependency>
<groupId>com.github.pagehelper</groupId> <groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId> <artifactId>pagehelper-spring-boot-starter</artifactId>
@ -87,7 +87,6 @@
<artifactId>jakarta.xml.bind-api</artifactId> <artifactId>jakarta.xml.bind-api</artifactId>
</dependency> </dependency>
<!-- Apache Lang3 --> <!-- Apache Lang3 -->
<dependency> <dependency>
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>
@ -118,6 +117,13 @@
<artifactId>swagger-annotations</artifactId> <artifactId>swagger-annotations</artifactId>
</dependency> </dependency>
<!-- Mybatis Dynamic Sql -->
<dependency>
<groupId>org.mybatis.dynamic-sql</groupId>
<artifactId>mybatis-dynamic-sql</artifactId>
<version>${mybatis.dynamic.version}</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

@ -1,19 +1,19 @@
package com.ruoyi.common.core.web.controller; package com.ruoyi.common.core.web.controller;
import java.beans.PropertyEditorSupport;
import java.util.Date;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.ruoyi.common.core.constant.HttpStatus; import com.ruoyi.common.core.constant.HttpStatus;
import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.PageUtils; import com.ruoyi.common.core.utils.PageUtils;
import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo; import com.ruoyi.common.core.web.page.TableDataInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import java.beans.PropertyEditorSupport;
import java.util.Date;
import java.util.List;
/** /**
* web * web
@ -59,7 +59,7 @@ public class BaseController {
TableDataInfo rspData = new TableDataInfo(); TableDataInfo rspData = new TableDataInfo();
rspData.setCode(HttpStatus.SUCCESS); rspData.setCode(HttpStatus.SUCCESS);
rspData.setRows(list); rspData.setRows(list);
rspData.setMsg("查询成功"); rspData.setMsg("Query success");
rspData.setTotal(new PageInfo(list).getTotal()); rspData.setTotal(new PageInfo(list).getTotal());
return rspData; return rspData;
} }

@ -1,118 +1,119 @@
package com.ruoyi.common.core.web.domain; package com.ruoyi.common.core.web.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
/** /**
* Entity * Entity
* *
* @author ruoyi * @author ruoyi
*/ */
public class BaseEntity implements Serializable public class BaseEntity implements Serializable {
{ @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** 搜索值 */ /**
*
*/
@JsonIgnore @JsonIgnore
private String searchValue; private String searchValue;
/** 创建者 */ /**
*
*/
private String createBy; private String createBy;
/** 创建时间 */ /**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime; private Date createTime;
/** 更新者 */ /**
*
*/
private String updateBy; private String updateBy;
/** 更新时间 */ /**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime; private Date updateTime;
/** 备注 */ /**
*
*/
private String remark; private String remark;
/** 请求参数 */ /**
*
*/
@JsonInclude(JsonInclude.Include.NON_EMPTY) @JsonInclude(JsonInclude.Include.NON_EMPTY)
private Map<String, Object> params; private Map<String, Object> params;
public String getSearchValue() public String getSearchValue() {
{
return searchValue; return searchValue;
} }
public void setSearchValue(String searchValue) public void setSearchValue(String searchValue) {
{
this.searchValue = searchValue; this.searchValue = searchValue;
} }
public String getCreateBy() public String getCreateBy() {
{
return createBy; return createBy;
} }
public void setCreateBy(String createBy) public void setCreateBy(String createBy) {
{
this.createBy = createBy; this.createBy = createBy;
} }
public Date getCreateTime() public Date getCreateTime() {
{
return createTime; return createTime;
} }
public void setCreateTime(Date createTime) public void setCreateTime(Date createTime) {
{
this.createTime = createTime; this.createTime = createTime;
} }
public String getUpdateBy() public String getUpdateBy() {
{
return updateBy; return updateBy;
} }
public void setUpdateBy(String updateBy) public void setUpdateBy(String updateBy) {
{
this.updateBy = updateBy; this.updateBy = updateBy;
} }
public Date getUpdateTime() public Date getUpdateTime() {
{
return updateTime; return updateTime;
} }
public void setUpdateTime(Date updateTime) public void setUpdateTime(Date updateTime) {
{
this.updateTime = updateTime; this.updateTime = updateTime;
} }
public String getRemark() public String getRemark() {
{
return remark; return remark;
} }
public void setRemark(String remark) public void setRemark(String remark) {
{
this.remark = remark; this.remark = remark;
} }
public Map<String, Object> getParams() public Map<String, Object> getParams() {
{ if (params == null) {
if (params == null)
{
params = new HashMap<>(); params = new HashMap<>();
} }
return params; return params;
} }
public void setParams(Map<String, Object> params) public void setParams(Map<String, Object> params) {
{
this.params = params; this.params = params;
} }
} }

@ -32,5 +32,12 @@
<version>${dynamic-ds.version}</version> <version>${dynamic-ds.version}</version>
</dependency> </dependency>
<!-- Mybatis Generator -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<optional>true</optional>
</dependency>
</dependencies> </dependencies>
</project> </project>

@ -0,0 +1,62 @@
package com.ruoyi.common.datasource.mybatis.gen;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* MyBatis
*
* @author Alan Scipio
* created on 2024/1/3
* @see <a href="https://mybatis.org/generator/"></a>
*/
public class MyBatisGenerationHelper {
/**
*
*
* @param configFilePath [] /generatorConfig.xml
*/
public static void generate(String configFilePath) {
if (configFilePath == null || configFilePath.isEmpty()) {
configFilePath = "/generatorConfig.xml";
}
try (InputStream in = MyBatisGenerationHelper.class.getResourceAsStream(configFilePath)) {
if (in == null) {
throw new FileNotFoundException(configFilePath);
}
List<String> warnings = new ArrayList<>();
ConfigurationParser cp = new ConfigurationParser(warnings);
System.out.println("Start to parse config file...");
Configuration config = cp.parseConfiguration(in);
System.out.println("Config file parsed");
DefaultShellCallback callback = new DefaultShellCallback(true);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
System.out.println("Start to generate code files...");
myBatisGenerator.generate(null);
System.out.println("Generation finished");
for (String warning : warnings) {
System.out.println("[warning] " + warning);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void generate() {
generate(null);
}
}

@ -10,13 +10,13 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>ruoyi-common-log</artifactId> <artifactId>ruoyi-common-log</artifactId>
<description> <description>
ruoyi-common-log日志记录 ruoyi-common-log日志记录
</description> </description>
<dependencies> <dependencies>
<!-- RuoYi Common Security --> <!-- RuoYi Common Security -->
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>

@ -1,9 +1,5 @@
package com.ruoyi.common.security.auth; package com.ruoyi.common.security.auth;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import org.springframework.util.PatternMatchUtils;
import com.ruoyi.common.core.context.SecurityContextHolder; import com.ruoyi.common.core.context.SecurityContextHolder;
import com.ruoyi.common.core.exception.auth.NotLoginException; import com.ruoyi.common.core.exception.auth.NotLoginException;
import com.ruoyi.common.core.exception.auth.NotPermissionException; import com.ruoyi.common.core.exception.auth.NotPermissionException;
@ -17,18 +13,26 @@ import com.ruoyi.common.security.annotation.RequiresRoles;
import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.model.LoginUser; import com.ruoyi.system.api.model.LoginUser;
import org.springframework.util.PatternMatchUtils;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
/** /**
* Token * Token
* *
* @author ruoyi * @author ruoyi
*/ */
public class AuthLogic public class AuthLogic {
{ /**
/** 所有权限标识 */ *
*/
private static final String ALL_PERMISSION = "*:*:*"; private static final String ALL_PERMISSION = "*:*:*";
/** 管理员角色权限标识 */ /**
*
*/
private static final String SUPER_ADMIN = "admin"; private static final String SUPER_ADMIN = "admin";
public TokenService tokenService = SpringUtils.getBean(TokenService.class); public TokenService tokenService = SpringUtils.getBean(TokenService.class);
@ -36,11 +40,9 @@ public class AuthLogic
/** /**
* *
*/ */
public void logout() public void logout() {
{
String token = SecurityUtils.getToken(); String token = SecurityUtils.getToken();
if (token == null) if (token == null) {
{
return; return;
} }
logoutByToken(token); logoutByToken(token);
@ -49,34 +51,29 @@ public class AuthLogic
/** /**
* Token * Token
*/ */
public void logoutByToken(String token) public void logoutByToken(String token) {
{
tokenService.delLoginUser(token); tokenService.delLoginUser(token);
} }
/** /**
* *
*/ */
public void checkLogin() public void checkLogin() {
{
getLoginUser(); getLoginUser();
} }
/** /**
* , * ,
* *
* @return * @return
*/ */
public LoginUser getLoginUser() public LoginUser getLoginUser() {
{
String token = SecurityUtils.getToken(); String token = SecurityUtils.getToken();
if (token == null) if (token == null) {
{
throw new NotLoginException("未提供token"); throw new NotLoginException("未提供token");
} }
LoginUser loginUser = SecurityUtils.getLoginUser(); LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser == null) if (loginUser == null) {
{
throw new NotLoginException("无效的token"); throw new NotLoginException("无效的token");
} }
return loginUser; return loginUser;
@ -84,64 +81,54 @@ public class AuthLogic
/** /**
* , * ,
* *
* @param token * @param token
* @return * @return
*/ */
public LoginUser getLoginUser(String token) public LoginUser getLoginUser(String token) {
{
return tokenService.getLoginUser(token); return tokenService.getLoginUser(token);
} }
/** /**
* , 120 * , 120
* *
* @param loginUser * @param loginUser
*/ */
public void verifyLoginUserExpire(LoginUser loginUser) public void verifyLoginUserExpire(LoginUser loginUser) {
{
tokenService.verifyToken(loginUser); tokenService.verifyToken(loginUser);
} }
/** /**
* *
* *
* @param permission * @param permission
* @return * @return
*/ */
public boolean hasPermi(String permission) public boolean hasPermi(String permission) {
{
return hasPermi(getPermiList(), permission); return hasPermi(getPermiList(), permission);
} }
/** /**
* , : NotPermissionException * , : NotPermissionException
* *
* @param permission * @param permission
* @return
*/ */
public void checkPermi(String permission) public void checkPermi(String permission) {
{ if (!hasPermi(getPermiList(), permission)) {
if (!hasPermi(getPermiList(), permission))
{
throw new NotPermissionException(permission); throw new NotPermissionException(permission);
} }
} }
/** /**
* (@RequiresPermissions), : NotPermissionException * (@RequiresPermissions), : NotPermissionException
* *
* @param requiresPermissions * @param requiresPermissions
*/ */
public void checkPermi(RequiresPermissions requiresPermissions) public void checkPermi(RequiresPermissions requiresPermissions) {
{
SecurityContextHolder.setPermission(StringUtils.join(requiresPermissions.value(), ",")); SecurityContextHolder.setPermission(StringUtils.join(requiresPermissions.value(), ","));
if (requiresPermissions.logical() == Logical.AND) if (requiresPermissions.logical() == Logical.AND) {
{
checkPermiAnd(requiresPermissions.value()); checkPermiAnd(requiresPermissions.value());
} } else {
else
{
checkPermiOr(requiresPermissions.value()); checkPermiOr(requiresPermissions.value());
} }
} }
@ -151,13 +138,10 @@ public class AuthLogic
* *
* @param permissions * @param permissions
*/ */
public void checkPermiAnd(String... permissions) public void checkPermiAnd(String... permissions) {
{
Set<String> permissionList = getPermiList(); Set<String> permissionList = getPermiList();
for (String permission : permissions) for (String permission : permissions) {
{ if (!hasPermi(permissionList, permission)) {
if (!hasPermi(permissionList, permission))
{
throw new NotPermissionException(permission); throw new NotPermissionException(permission);
} }
} }
@ -165,78 +149,64 @@ public class AuthLogic
/** /**
* *
* *
* @param permissions * @param permissions
*/ */
public void checkPermiOr(String... permissions) public void checkPermiOr(String... permissions) {
{
Set<String> permissionList = getPermiList(); Set<String> permissionList = getPermiList();
for (String permission : permissions) for (String permission : permissions) {
{ if (hasPermi(permissionList, permission)) {
if (hasPermi(permissionList, permission))
{
return; return;
} }
} }
if (permissions.length > 0) if (permissions.length > 0) {
{
throw new NotPermissionException(permissions); throw new NotPermissionException(permissions);
} }
} }
/** /**
* *
* *
* @param role * @param role
* @return * @return
*/ */
public boolean hasRole(String role) public boolean hasRole(String role) {
{
return hasRole(getRoleList(), role); return hasRole(getRoleList(), role);
} }
/** /**
* , : NotRoleException * , : NotRoleException
* *
* @param role * @param role
*/ */
public void checkRole(String role) public void checkRole(String role) {
{ if (!hasRole(role)) {
if (!hasRole(role))
{
throw new NotRoleException(role); throw new NotRoleException(role);
} }
} }
/** /**
* (@RequiresRoles) * (@RequiresRoles)
* *
* @param requiresRoles * @param requiresRoles
*/ */
public void checkRole(RequiresRoles requiresRoles) public void checkRole(RequiresRoles requiresRoles) {
{ if (requiresRoles.logical() == Logical.AND) {
if (requiresRoles.logical() == Logical.AND)
{
checkRoleAnd(requiresRoles.value()); checkRoleAnd(requiresRoles.value());
} } else {
else
{
checkRoleOr(requiresRoles.value()); checkRoleOr(requiresRoles.value());
} }
} }
/** /**
* *
* *
* @param roles * @param roles
*/ */
public void checkRoleAnd(String... roles) public void checkRoleAnd(String... roles) {
{
Set<String> roleList = getRoleList(); Set<String> roleList = getRoleList();
for (String role : roles) for (String role : roles) {
{ if (!hasRole(roleList, role)) {
if (!hasRole(roleList, role))
{
throw new NotRoleException(role); throw new NotRoleException(role);
} }
} }
@ -244,129 +214,106 @@ public class AuthLogic
/** /**
* *
* *
* @param roles * @param roles
*/ */
public void checkRoleOr(String... roles) public void checkRoleOr(String... roles) {
{
Set<String> roleList = getRoleList(); Set<String> roleList = getRoleList();
for (String role : roles) for (String role : roles) {
{ if (hasRole(roleList, role)) {
if (hasRole(roleList, role))
{
return; return;
} }
} }
if (roles.length > 0) if (roles.length > 0) {
{
throw new NotRoleException(roles); throw new NotRoleException(roles);
} }
} }
/** /**
* (@RequiresLogin) * (@RequiresLogin)
* *
* @param at * @param at
*/ */
public void checkByAnnotation(RequiresLogin at) public void checkByAnnotation(RequiresLogin at) {
{
this.checkLogin(); this.checkLogin();
} }
/** /**
* (@RequiresRoles) * (@RequiresRoles)
* *
* @param at * @param at
*/ */
public void checkByAnnotation(RequiresRoles at) public void checkByAnnotation(RequiresRoles at) {
{
String[] roleArray = at.value(); String[] roleArray = at.value();
if (at.logical() == Logical.AND) if (at.logical() == Logical.AND) {
{
this.checkRoleAnd(roleArray); this.checkRoleAnd(roleArray);
} } else {
else
{
this.checkRoleOr(roleArray); this.checkRoleOr(roleArray);
} }
} }
/** /**
* (@RequiresPermissions) * (@RequiresPermissions)
* *
* @param at * @param at
*/ */
public void checkByAnnotation(RequiresPermissions at) public void checkByAnnotation(RequiresPermissions at) {
{
String[] permissionArray = at.value(); String[] permissionArray = at.value();
if (at.logical() == Logical.AND) if (at.logical() == Logical.AND) {
{
this.checkPermiAnd(permissionArray); this.checkPermiAnd(permissionArray);
} } else {
else
{
this.checkPermiOr(permissionArray); this.checkPermiOr(permissionArray);
} }
} }
/** /**
* *
* *
* @return * @return
*/ */
public Set<String> getRoleList() public Set<String> getRoleList() {
{ try {
try
{
LoginUser loginUser = getLoginUser(); LoginUser loginUser = getLoginUser();
return loginUser.getRoles(); return loginUser.getRoles();
} } catch (Exception e) {
catch (Exception e)
{
return new HashSet<>(); return new HashSet<>();
} }
} }
/** /**
* *
* *
* @return * @return
*/ */
public Set<String> getPermiList() public Set<String> getPermiList() {
{ try {
try
{
LoginUser loginUser = getLoginUser(); LoginUser loginUser = getLoginUser();
return loginUser.getPermissions(); return loginUser.getPermissions();
} } catch (Exception e) {
catch (Exception e)
{
return new HashSet<>(); return new HashSet<>();
} }
} }
/** /**
* *
* *
* @param authorities * @param authorities
* @param permission * @param permission
* @return * @return
*/ */
public boolean hasPermi(Collection<String> authorities, String permission) public boolean hasPermi(Collection<String> authorities, String permission) {
{
return authorities.stream().filter(StringUtils::hasText) return authorities.stream().filter(StringUtils::hasText)
.anyMatch(x -> ALL_PERMISSION.equals(x) || PatternMatchUtils.simpleMatch(x, permission)); .anyMatch(x -> ALL_PERMISSION.equals(x) || PatternMatchUtils.simpleMatch(x, permission));
} }
/** /**
* *
* *
* @param roles * @param roles
* @param role * @param role
* @return * @return
*/ */
public boolean hasRole(Collection<String> roles, String role) public boolean hasRole(Collection<String> roles, String role) {
{
return roles.stream().filter(StringUtils::hasText) return roles.stream().filter(StringUtils::hasText)
.anyMatch(x -> SUPER_ADMIN.equals(x) || PatternMatchUtils.simpleMatch(x, role)); .anyMatch(x -> SUPER_ADMIN.equals(x) || PatternMatchUtils.simpleMatch(x, role));
} }

@ -1,14 +1,5 @@
package com.ruoyi.common.security.service; package com.ruoyi.common.security.service;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import jakarta.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.constant.CacheConstants;
import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.utils.JwtUtils; import com.ruoyi.common.core.utils.JwtUtils;
@ -19,6 +10,15 @@ import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.model.LoginUser; import com.ruoyi.system.api.model.LoginUser;
import jakarta.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/** /**
* token * token
@ -56,13 +56,13 @@ public class TokenService {
refreshToken(loginUser); refreshToken(loginUser);
// Jwt存储信息 // Jwt存储信息
Map<String, Object> claimsMap = new HashMap<String, Object>(); Map<String, Object> claimsMap = new HashMap<>();
claimsMap.put(SecurityConstants.USER_KEY, token); claimsMap.put(SecurityConstants.USER_KEY, token);
claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId); claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId);
claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName); claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName);
// 接口返回信息 // 接口返回信息
Map<String, Object> rspMap = new HashMap<String, Object>(); Map<String, Object> rspMap = new HashMap<>();
rspMap.put("access_token", JwtUtils.createToken(claimsMap)); rspMap.put("access_token", JwtUtils.createToken(claimsMap));
rspMap.put("expires_in", expireTime); rspMap.put("expires_in", expireTime);
return rspMap; return rspMap;
@ -97,8 +97,8 @@ public class TokenService {
LoginUser user = null; LoginUser user = null;
try { try {
if (StringUtils.isNotEmpty(token)) { if (StringUtils.isNotEmpty(token)) {
String userkey = JwtUtils.getUserKey(token); String userKey = JwtUtils.getUserKey(token);
user = redisService.getCacheObject(getTokenKey(userkey)); user = redisService.getCacheObject(getTokenKey(userKey));
return user; return user;
} }
} catch (Exception e) { } catch (Exception e) {

@ -8,21 +8,21 @@
<version>3.6.3</version> <version>3.6.3</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>ruoyi-modules-system</artifactId> <artifactId>ruoyi-modules-system</artifactId>
<description> <description>
ruoyi-modules-system系统模块 ruoyi-modules-system系统模块
</description> </description>
<dependencies> <dependencies>
<!-- SpringCloud Alibaba Nacos --> <!-- SpringCloud Alibaba Nacos -->
<dependency> <dependency>
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency> </dependency>
<!-- SpringCloud Alibaba Nacos Config --> <!-- SpringCloud Alibaba Nacos Config -->
<dependency> <dependency>
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
@ -34,14 +34,14 @@
<artifactId>nacos-client</artifactId> <artifactId>nacos-client</artifactId>
<version>${nacos-client.version}</version> <version>${nacos-client.version}</version>
</dependency> </dependency>
<!-- SpringCloud Alibaba Sentinel --> <!-- SpringCloud Alibaba Sentinel -->
<dependency> <dependency>
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency> </dependency>
<!-- SpringBoot Actuator --> <!-- SpringBoot Actuator -->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId> <artifactId>spring-boot-starter-actuator</artifactId>
@ -63,31 +63,38 @@
<groupId>com.mysql</groupId> <groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId> <artifactId>mysql-connector-j</artifactId>
</dependency> </dependency>
<!-- RuoYi Common DataSource --> <!-- RuoYi Common DataSource -->
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-datasource</artifactId> <artifactId>ruoyi-common-datasource</artifactId>
</dependency> </dependency>
<!-- RuoYi Common DataScope --> <!-- RuoYi Common DataScope -->
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-datascope</artifactId> <artifactId>ruoyi-common-datascope</artifactId>
</dependency> </dependency>
<!-- RuoYi Common Log --> <!-- RuoYi Common Log -->
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-log</artifactId> <artifactId>ruoyi-common-log</artifactId>
</dependency> </dependency>
<!-- RuoYi Common Swagger --> <!-- RuoYi Common Swagger -->
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-swagger</artifactId> <artifactId>ruoyi-common-swagger</artifactId>
</dependency> </dependency>
<!-- Mybatis Generator -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<scope>test</scope>
</dependency>
<!-- =============================================================================== --> <!-- =============================================================================== -->
<!-- 可选部署:合并鉴权模块 --> <!-- 可选部署:合并鉴权模块 -->
@ -124,5 +131,5 @@
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
</project> </project>

@ -1,11 +1,6 @@
package com.ruoyi; package com.ruoyi;
import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure;
import com.ruoyi.common.security.annotation.EnableCustomConfig;
import com.ruoyi.common.security.annotation.EnableRyFeignClients;
import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/** /**
* all-in-one * all-in-one
@ -19,6 +14,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
//@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class}) //@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class})
public class SystemAllApplication { public class SystemAllApplication {
public static void main(String[] args) { public static void main(String[] args) {
System.setProperty("pagehelper.banner", "false"); //关闭pagehelper的banner
SpringApplication.run(SystemAllApplication.class, args); SpringApplication.run(SystemAllApplication.class, args);
System.out.println("(♥◠‿◠)ノ゙ 系统模块(All-in-one模式)启动成功 ლ(´ڡ`ლ)゙"); System.out.println("(♥◠‿◠)ノ゙ 系统模块(All-in-one模式)启动成功 ლ(´ڡ`ლ)゙");
} }

@ -18,6 +18,7 @@ import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2;
@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class}) @SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class})
public class RuoYiSystemApplication { public class RuoYiSystemApplication {
public static void main(String[] args) { public static void main(String[] args) {
System.setProperty("pagehelper.banner", "false"); //关闭pagehelper的banner
SpringApplication.run(RuoYiSystemApplication.class, args); SpringApplication.run(RuoYiSystemApplication.class, args);
System.out.println("(♥◠‿◠)ノ゙ 系统模块(常规模式)启动成功 ლ(´ڡ`ლ)゙"); System.out.println("(♥◠‿◠)ノ゙ 系统模块(常规模式)启动成功 ლ(´ڡ`ლ)゙");
} }

@ -1,23 +1,5 @@
package com.ruoyi.system.controller; package com.ruoyi.system.controller;
import java.io.IOException;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.poi.ExcelUtil; import com.ruoyi.common.core.utils.poi.ExcelUtil;
@ -33,12 +15,17 @@ import com.ruoyi.system.api.domain.SysDept;
import com.ruoyi.system.api.domain.SysRole; import com.ruoyi.system.api.domain.SysRole;
import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.model.LoginUser; import com.ruoyi.system.api.model.LoginUser;
import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.*;
import com.ruoyi.system.service.ISysDeptService; import jakarta.servlet.http.HttpServletResponse;
import com.ruoyi.system.service.ISysPermissionService; import org.apache.commons.lang3.ArrayUtils;
import com.ruoyi.system.service.ISysPostService; import org.springframework.beans.factory.annotation.Autowired;
import com.ruoyi.system.service.ISysRoleService; import org.springframework.validation.annotation.Validated;
import com.ruoyi.system.service.ISysUserService; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/** /**
* *

@ -1,15 +1,5 @@
package com.ruoyi.system.controller; package com.ruoyi.system.controller;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.constant.CacheConstants;
import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.controller.BaseController;
@ -22,16 +12,22 @@ import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.system.api.model.LoginUser; import com.ruoyi.system.api.model.LoginUser;
import com.ruoyi.system.domain.SysUserOnline; import com.ruoyi.system.domain.SysUserOnline;
import com.ruoyi.system.service.ISysUserOnlineService; import com.ruoyi.system.service.ISysUserOnlineService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/** /**
* 线 * 线
* *
* @author ruoyi * @author ruoyi
*/ */
@RestController @RestController
@RequestMapping("/online") @RequestMapping("/online")
public class SysUserOnlineController extends BaseController public class SysUserOnlineController extends BaseController {
{
@Autowired @Autowired
private ISysUserOnlineService userOnlineService; private ISysUserOnlineService userOnlineService;
@ -40,27 +36,18 @@ public class SysUserOnlineController extends BaseController
@RequiresPermissions("monitor:online:list") @RequiresPermissions("monitor:online:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo list(String ipaddr, String userName) public TableDataInfo list(String ipaddr, String userName) {
{
Collection<String> keys = redisService.keys(CacheConstants.LOGIN_TOKEN_KEY + "*"); Collection<String> keys = redisService.keys(CacheConstants.LOGIN_TOKEN_KEY + "*");
List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>(); List<SysUserOnline> userOnlineList = new ArrayList<>();
for (String key : keys) for (String key : keys) {
{
LoginUser user = redisService.getCacheObject(key); LoginUser user = redisService.getCacheObject(key);
if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) {
{
userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user)); userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user));
} } else if (StringUtils.isNotEmpty(ipaddr)) {
else if (StringUtils.isNotEmpty(ipaddr))
{
userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user)); userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user));
} } else if (StringUtils.isNotEmpty(userName)) {
else if (StringUtils.isNotEmpty(userName))
{
userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user)); userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user));
} } else {
else
{
userOnlineList.add(userOnlineService.loginUserToUserOnline(user)); userOnlineList.add(userOnlineService.loginUserToUserOnline(user));
} }
} }
@ -75,8 +62,7 @@ public class SysUserOnlineController extends BaseController
@RequiresPermissions("monitor:online:forceLogout") @RequiresPermissions("monitor:online:forceLogout")
@Log(title = "在线用户", businessType = BusinessType.FORCE) @Log(title = "在线用户", businessType = BusinessType.FORCE)
@DeleteMapping("/{tokenId}") @DeleteMapping("/{tokenId}")
public AjaxResult forceLogout(@PathVariable String tokenId) public AjaxResult forceLogout(@PathVariable String tokenId) {
{
redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId); redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId);
return success(); return success();
} }

@ -16,7 +16,7 @@ public class TestController extends BaseController {
@GetMapping("/showInfo") @GetMapping("/showInfo")
public AjaxResult showInfo() { public AjaxResult showInfo() {
return success("Hello World!"); return success("Hello World! This is system module.");
} }
} }

@ -0,0 +1,21 @@
package ryas.gen;
import com.ruoyi.common.datasource.mybatis.gen.MyBatisGenerationHelper;
/**
* MyBatis
*
* @author Alan Scipio
* created on 2024/2/1
*/
public class GenSystem {
public static void main(String[] args) {
try {
MyBatisGenerationHelper.generate();
} catch (Exception e) {
e.printStackTrace();
}
}
}

@ -0,0 +1,16 @@
package ryas.test;
import org.junit.jupiter.api.Test;
/**
* @author Alan Scipio
* created on 2024/2/1
*/
public class Common1Test {
@Test
public void test0() {
System.out.println("abc");
}
}

@ -0,0 +1,40 @@
<!DOCTYPE generatorConfiguration PUBLIC
"-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- MyBatis3 动态SQL生成 -->
<context id="mbg" targetRuntime="MyBatis3DynamicSql">
<commentGenerator>
<property name="suppressAllComments" value="false"/>
<property name="suppressDate" value="true"/>
<property name="addRemarkComments" value="true"/>
</commentGenerator>
<!-- 数据库连接 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true%26characterEncoding=utf8%26zeroDateTimeBehavior=convertToNull%26useSSL=true%26serverTimezone=GMT%2B8"
userId="root"
password="password"/>
<!-- Java 模型 -->
<javaModelGenerator targetPackage="com.ruoyi.system.domain" targetProject="ruoyi-modules/ruoyi-system/src/main/java">
<property name="rootClass" value="com.ruoyi.common.core.web.domain.BaseEntity"/>
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- Mapper.xml (对于MyBatis动态SQL特性来说不再需要) -->
<sqlMapGenerator targetPackage="mappers" targetProject="ruoyi-modules/ruoyi-system/src/main/resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- Mapper.java -->
<javaClientGenerator targetPackage="com.ruoyi.system.mapper" targetProject="ruoyi-modules/ruoyi-system/src/main/java" type="XMLMAPPER">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 要生成的表 -->
<table tableName="sys_common" domainObjectName="SysCommon"/>
</context>
</generatorConfiguration>
Loading…
Cancel
Save