郑楚滨
3 months ago
27 changed files with 1016 additions and 0 deletions
@ -0,0 +1,8 @@ |
|||||
|
# Default ignored files |
||||
|
/shelf/ |
||||
|
/workspace.xml |
||||
|
# Editor-based HTTP Client requests |
||||
|
/httpRequests/ |
||||
|
# Datasource local storage ignored files |
||||
|
/dataSources/ |
||||
|
/dataSources.local.xml |
@ -0,0 +1,14 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="CompilerConfiguration"> |
||||
|
<annotationProcessing> |
||||
|
<profile default="true" name="Default" enabled="true" /> |
||||
|
<profile name="Maven default annotation processors profile" enabled="true"> |
||||
|
<sourceOutputDir name="target/generated-sources/annotations" /> |
||||
|
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> |
||||
|
<outputRelativeToContentRoot value="true" /> |
||||
|
<module name="demo" /> |
||||
|
</profile> |
||||
|
</annotationProcessing> |
||||
|
</component> |
||||
|
</project> |
@ -0,0 +1,9 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="Encoding"> |
||||
|
<file url="file://$PROJECT_DIR$/demo/demo/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/demo/demo/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/demo/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/demo/src/main/resources" charset="UTF-8" /> |
||||
|
</component> |
||||
|
</project> |
@ -0,0 +1,9 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<module type="JAVA_MODULE" version="4"> |
||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true"> |
||||
|
<exclude-output /> |
||||
|
<content url="file://$MODULE_DIR$" /> |
||||
|
<orderEntry type="inheritedJdk" /> |
||||
|
<orderEntry type="sourceFolder" forTests="false" /> |
||||
|
</component> |
||||
|
</module> |
@ -0,0 +1,20 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="RemoteRepositoriesConfiguration"> |
||||
|
<remote-repository> |
||||
|
<option name="id" value="central" /> |
||||
|
<option name="name" value="Central Repository" /> |
||||
|
<option name="url" value="http://maven.aliyun.com/nexus/content/repositories/central/" /> |
||||
|
</remote-repository> |
||||
|
<remote-repository> |
||||
|
<option name="id" value="central" /> |
||||
|
<option name="name" value="Maven Central repository" /> |
||||
|
<option name="url" value="https://repo1.maven.org/maven2" /> |
||||
|
</remote-repository> |
||||
|
<remote-repository> |
||||
|
<option name="id" value="jboss.community" /> |
||||
|
<option name="name" value="JBoss Community repository" /> |
||||
|
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" /> |
||||
|
</remote-repository> |
||||
|
</component> |
||||
|
</project> |
@ -0,0 +1,15 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="ExternalStorageConfigurationManager" enabled="true" /> |
||||
|
<component name="MavenProjectsManager"> |
||||
|
<option name="originalFiles"> |
||||
|
<list> |
||||
|
<option value="$PROJECT_DIR$/demo/pom.xml" /> |
||||
|
<option value="$PROJECT_DIR$/demo/demo/pom.xml" /> |
||||
|
</list> |
||||
|
</option> |
||||
|
</component> |
||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> |
||||
|
<output url="file://$PROJECT_DIR$/out" /> |
||||
|
</component> |
||||
|
</project> |
@ -0,0 +1,8 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="ProjectModuleManager"> |
||||
|
<modules> |
||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/excise-demo.iml" filepath="$PROJECT_DIR$/.idea/excise-demo.iml" /> |
||||
|
</modules> |
||||
|
</component> |
||||
|
</project> |
@ -0,0 +1,124 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="Palette2"> |
||||
|
<group name="Swing"> |
||||
|
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" /> |
||||
|
</item> |
||||
|
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" /> |
||||
|
</item> |
||||
|
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" /> |
||||
|
</item> |
||||
|
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true"> |
||||
|
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" /> |
||||
|
</item> |
||||
|
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" /> |
||||
|
<initial-values> |
||||
|
<property name="text" value="Button" /> |
||||
|
</initial-values> |
||||
|
</item> |
||||
|
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> |
||||
|
<initial-values> |
||||
|
<property name="text" value="RadioButton" /> |
||||
|
</initial-values> |
||||
|
</item> |
||||
|
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> |
||||
|
<initial-values> |
||||
|
<property name="text" value="CheckBox" /> |
||||
|
</initial-values> |
||||
|
</item> |
||||
|
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" /> |
||||
|
<initial-values> |
||||
|
<property name="text" value="Label" /> |
||||
|
</initial-values> |
||||
|
</item> |
||||
|
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> |
||||
|
<preferred-size width="150" height="-1" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> |
||||
|
<preferred-size width="150" height="-1" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> |
||||
|
<preferred-size width="150" height="-1" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> |
||||
|
<preferred-size width="150" height="50" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> |
||||
|
<preferred-size width="150" height="50" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> |
||||
|
<preferred-size width="150" height="50" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" /> |
||||
|
</item> |
||||
|
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> |
||||
|
<preferred-size width="150" height="50" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3"> |
||||
|
<preferred-size width="150" height="50" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> |
||||
|
<preferred-size width="150" height="50" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> |
||||
|
<preferred-size width="200" height="200" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> |
||||
|
<preferred-size width="200" height="200" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> |
||||
|
</item> |
||||
|
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> |
||||
|
</item> |
||||
|
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" /> |
||||
|
</item> |
||||
|
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" /> |
||||
|
</item> |
||||
|
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1"> |
||||
|
<preferred-size width="-1" height="20" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" /> |
||||
|
</item> |
||||
|
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" /> |
||||
|
</item> |
||||
|
</group> |
||||
|
</component> |
||||
|
</project> |
@ -0,0 +1,6 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="VcsDirectoryMappings"> |
||||
|
<mapping directory="" vcs="Git" /> |
||||
|
</component> |
||||
|
</project> |
@ -0,0 +1,33 @@ |
|||||
|
HELP.md |
||||
|
target/ |
||||
|
!.mvn/wrapper/maven-wrapper.jar |
||||
|
!**/src/main/**/target/ |
||||
|
!**/src/test/**/target/ |
||||
|
|
||||
|
### STS ### |
||||
|
.apt_generated |
||||
|
.classpath |
||||
|
.factorypath |
||||
|
.project |
||||
|
.settings |
||||
|
.springBeans |
||||
|
.sts4-cache |
||||
|
|
||||
|
### IntelliJ IDEA ### |
||||
|
.idea |
||||
|
*.iws |
||||
|
*.iml |
||||
|
*.ipr |
||||
|
|
||||
|
### NetBeans ### |
||||
|
/nbproject/private/ |
||||
|
/nbbuild/ |
||||
|
/dist/ |
||||
|
/nbdist/ |
||||
|
/.nb-gradle/ |
||||
|
build/ |
||||
|
!**/src/main/**/build/ |
||||
|
!**/src/test/**/build/ |
||||
|
|
||||
|
### VS Code ### |
||||
|
.vscode/ |
@ -0,0 +1,121 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
|
<modelVersion>4.0.0</modelVersion> |
||||
|
<groupId>com.example</groupId> |
||||
|
<artifactId>demo</artifactId> |
||||
|
<version>0.0.1-SNAPSHOT</version> |
||||
|
<name>demo</name> |
||||
|
<description>demo</description> |
||||
|
<properties> |
||||
|
<java.version>1.8</java.version> |
||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
||||
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> |
||||
|
<spring-boot.version>2.6.13</spring-boot.version> |
||||
|
</properties> |
||||
|
<dependencies> |
||||
|
<!-- MyBatis Spring Boot Starter --> |
||||
|
<dependency> |
||||
|
<groupId>org.mybatis.spring.boot</groupId> |
||||
|
<artifactId>mybatis-spring-boot-starter</artifactId> |
||||
|
<version>2.2.2</version> <!-- 请根据实际情况选择合适的版本 --> |
||||
|
</dependency> |
||||
|
|
||||
|
<!-- MyBatis core library --> |
||||
|
<dependency> |
||||
|
<groupId>org.mybatis</groupId> |
||||
|
<artifactId>mybatis</artifactId> |
||||
|
<version>3.5.7</version> <!-- 请根据实际情况选择合适的版本 --> |
||||
|
</dependency> |
||||
|
<dependency> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-starter-web</artifactId> |
||||
|
</dependency> |
||||
|
|
||||
|
<dependency> |
||||
|
<groupId>com.mysql</groupId> |
||||
|
<artifactId>mysql-connector-j</artifactId> |
||||
|
<scope>runtime</scope> |
||||
|
</dependency> |
||||
|
<dependency> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-starter-test</artifactId> |
||||
|
<scope>test</scope> |
||||
|
</dependency> |
||||
|
|
||||
|
<dependency> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-starter-data-jpa</artifactId> |
||||
|
</dependency> |
||||
|
<!-- Lombok --> |
||||
|
<dependency> |
||||
|
<groupId>org.projectlombok</groupId> |
||||
|
<artifactId>lombok</artifactId> |
||||
|
<version>1.18.22</version> <!-- 请根据实际情况选择合适的版本 --> |
||||
|
</dependency> |
||||
|
|
||||
|
<!-- Bean Validation API --> |
||||
|
<dependency> |
||||
|
<groupId>javax.validation</groupId> |
||||
|
<artifactId>validation-api</artifactId> |
||||
|
<version>2.0.1.Final</version> <!-- 请根据实际情况选择合适的版本 --> |
||||
|
</dependency> |
||||
|
|
||||
|
<!-- Hibernate Validator (Bean Validation 实现) --> |
||||
|
<dependency> |
||||
|
<groupId>org.hibernate.validator</groupId> |
||||
|
<artifactId>hibernate-validator</artifactId> |
||||
|
<version>6.2.0.Final</version> <!-- 请根据实际情况选择合适的版本 --> |
||||
|
</dependency> |
||||
|
|
||||
|
<!-- Spring Boot Starter Data Redis --> |
||||
|
<dependency> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-starter-data-redis</artifactId> |
||||
|
</dependency> |
||||
|
</dependencies> |
||||
|
<dependencyManagement> |
||||
|
<dependencies> |
||||
|
<dependency> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-dependencies</artifactId> |
||||
|
<version>${spring-boot.version}</version> |
||||
|
<type>pom</type> |
||||
|
<scope>import</scope> |
||||
|
</dependency> |
||||
|
</dependencies> |
||||
|
</dependencyManagement> |
||||
|
|
||||
|
<build> |
||||
|
<plugins> |
||||
|
<plugin> |
||||
|
<groupId>org.apache.maven.plugins</groupId> |
||||
|
<artifactId>maven-compiler-plugin</artifactId> |
||||
|
<version>3.8.1</version> |
||||
|
<configuration> |
||||
|
<source>1.8</source> |
||||
|
<target>1.8</target> |
||||
|
<encoding>UTF-8</encoding> |
||||
|
</configuration> |
||||
|
</plugin> |
||||
|
<plugin> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-maven-plugin</artifactId> |
||||
|
<version>${spring-boot.version}</version> |
||||
|
<configuration> |
||||
|
<mainClass>demo.DemoApplication</mainClass> |
||||
|
<skip>true</skip> |
||||
|
</configuration> |
||||
|
<executions> |
||||
|
<execution> |
||||
|
<id>repackage</id> |
||||
|
<goals> |
||||
|
<goal>repackage</goal> |
||||
|
</goals> |
||||
|
</execution> |
||||
|
</executions> |
||||
|
</plugin> |
||||
|
</plugins> |
||||
|
</build> |
||||
|
|
||||
|
</project> |
@ -0,0 +1,102 @@ |
|||||
|
package demo.Controller; |
||||
|
|
||||
|
import demo.Entity.*; |
||||
|
import demo.Service.RoleService; |
||||
|
import lombok.Value; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.apache.ibatis.annotations.Delete; |
||||
|
import org.apache.ibatis.annotations.Param; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.validation.annotation.Validated; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
|
||||
|
import javax.validation.Valid; |
||||
|
import java.time.Instant; |
||||
|
import java.time.LocalDateTime; |
||||
|
import java.time.ZoneOffset; |
||||
|
import java.util.Date; |
||||
|
import java.util.List; |
||||
|
|
||||
|
@Slf4j |
||||
|
@RestController |
||||
|
@RequestMapping("/role") |
||||
|
@Validated |
||||
|
public class RoleController { |
||||
|
@Autowired |
||||
|
private RoleService roleService; |
||||
|
|
||||
|
//角色增删改查
|
||||
|
|
||||
|
/** |
||||
|
* @增 |
||||
|
* @param roleVO |
||||
|
* @return |
||||
|
*/ |
||||
|
@PostMapping("/insert") |
||||
|
public Result<String> insertRole(@RequestBody RoleVO roleVO) { |
||||
|
// 查询用户名是否被占用
|
||||
|
Role role = roleService.findByRoleName(roleVO.getRoleName()); |
||||
|
if (role==null){ |
||||
|
// 没有占用,新增
|
||||
|
// 创建一个LocalDateTime对象
|
||||
|
LocalDateTime localDateTime = LocalDateTime.now(); |
||||
|
// 将LocalDateTime转换为Instant
|
||||
|
Instant instant = localDateTime.toInstant(ZoneOffset.UTC); |
||||
|
// 将Instant转换为Date
|
||||
|
Date date = Date.from(instant); |
||||
|
roleService.insert(roleVO.getRoleName(), roleVO.getRoleCode(), date); |
||||
|
return Result.success("添加成功"); |
||||
|
}else { |
||||
|
return Result.error(401, "角色已有"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @删 |
||||
|
* @param roleName |
||||
|
* @return |
||||
|
*/ |
||||
|
@DeleteMapping("/delete") |
||||
|
public Result<String> deleteRole(@Valid String roleName) { |
||||
|
Role role = roleService.findByRoleName(roleName); |
||||
|
if (role==null){ |
||||
|
return Result.error(401, "角色不存在"); |
||||
|
}else { |
||||
|
roleService.deleteByRoleName(roleName); |
||||
|
return Result.success("删除成功"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@PutMapping("/update") |
||||
|
public Result<String> updateRole(@Valid RoleVO roleVO) { |
||||
|
Role role = roleService.findByRoleName(roleVO.getRoleName()); |
||||
|
if (role==null){ |
||||
|
return Result.error(401, "角色不存在"); |
||||
|
}else { |
||||
|
// 创建一个LocalDateTime对象
|
||||
|
LocalDateTime localDateTime = LocalDateTime.now(); |
||||
|
// 将LocalDateTime转换为Instant
|
||||
|
Instant instant = localDateTime.toInstant(ZoneOffset.UTC); |
||||
|
// 将Instant转换为Date
|
||||
|
Date date = Date.from(instant); |
||||
|
roleService.update(roleVO, date); |
||||
|
return Result.success("修改成功"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/query") |
||||
|
public Result<List<Role>> queryRole() { |
||||
|
List<Role> roleList = roleService.findAll(); |
||||
|
log.info("Retrieved roles: {}", roleList); |
||||
|
return Result.success(roleList); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/queryByRoleCode") |
||||
|
public Result<Role> queryByRoleCode(@Valid String roleCode) { |
||||
|
Role role = roleService.findByRoleCode(roleCode); |
||||
|
if (role==null){ |
||||
|
return Result.error(401, "角色不存在"); |
||||
|
} |
||||
|
return Result.success(role); |
||||
|
} |
||||
|
} |
@ -0,0 +1,164 @@ |
|||||
|
package demo.Controller; |
||||
|
|
||||
|
import demo.Entity.*; |
||||
|
import demo.Service.RoleService; |
||||
|
import demo.Service.UserService; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.data.redis.core.StringRedisTemplate; |
||||
|
import org.springframework.scheduling.annotation.Scheduled; |
||||
|
import org.springframework.validation.annotation.Validated; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
|
||||
|
import javax.validation.Valid; |
||||
|
import javax.validation.constraints.Pattern; |
||||
|
import java.time.Duration; |
||||
|
import java.time.Instant; |
||||
|
import java.time.LocalDateTime; |
||||
|
import java.time.ZoneOffset; |
||||
|
import java.util.Date; |
||||
|
import java.util.List; |
||||
|
import java.util.Set; |
||||
|
|
||||
|
@Slf4j |
||||
|
@RestController |
||||
|
@RequestMapping("/user") |
||||
|
@Validated |
||||
|
public class UserController { |
||||
|
|
||||
|
@Autowired |
||||
|
private UserService userService; |
||||
|
|
||||
|
@Autowired |
||||
|
private StringRedisTemplate redisTemplate; |
||||
|
|
||||
|
private final int MAX_FAILED_ATTEMPTS = 5; |
||||
|
private static final Duration LOCK_TIME = Duration.ofMinutes(1); // 锁定时间1分钟
|
||||
|
private String LOGIN_ATTEMPTS_KEY = "login_attempts_"; |
||||
|
private static final String LOCKED_KEY = "locked_"; |
||||
|
|
||||
|
//用户增删改查
|
||||
|
/** |
||||
|
* @增 |
||||
|
* @param userVO |
||||
|
* @return |
||||
|
*/ |
||||
|
@PostMapping("/register") |
||||
|
public Result<String> register(@RequestBody UserVO userVO) { |
||||
|
// 查询用户名是否被占用
|
||||
|
User user = userService.findByUserName(userVO.getLoginName()); |
||||
|
if (user==null){ |
||||
|
// 没有占用,进行注册
|
||||
|
userService.register(userVO.getLoginName(), userVO.getUserChnName(), userVO.getPassword()); |
||||
|
return Result.success("注册成功"); |
||||
|
}else { |
||||
|
return Result.error(401, "用户名已被占用"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @删 |
||||
|
* @param loginName |
||||
|
* @return |
||||
|
*/ |
||||
|
@DeleteMapping("/delete") |
||||
|
public Result<String> delete(@Pattern(regexp = "^\\S{5,16}$") String loginName){ |
||||
|
// 查询用户名是否被占用
|
||||
|
User user = userService.findByUserName(loginName); |
||||
|
if (user!=null){ |
||||
|
// 存在,进行删除
|
||||
|
userService.deleteByUserName(loginName); |
||||
|
return Result.success("删除成功"); |
||||
|
}else { |
||||
|
return Result.error(401, "用户名不存在"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @改 |
||||
|
* @param userVo |
||||
|
* @return |
||||
|
*/ |
||||
|
@PutMapping("/update") |
||||
|
public Result<String> update(@Valid UserVO userVo){ |
||||
|
// 查询用户名是否被占用
|
||||
|
User user = userService.findByUserName(userVo.getLoginName()); |
||||
|
if (user!=null){ |
||||
|
// 存在,进行更新
|
||||
|
// 创建一个LocalDateTime对象
|
||||
|
LocalDateTime localDateTime = LocalDateTime.now(); |
||||
|
// 将LocalDateTime转换为Instant
|
||||
|
Instant instant = localDateTime.toInstant(ZoneOffset.UTC); |
||||
|
// 将Instant转换为Date
|
||||
|
Date date = Date.from(instant); |
||||
|
userService.updateByUserName(userVo.getLoginName(), userVo.getUserChnName(), date, userVo.getPassword()); |
||||
|
return Result.success("更新成功"); |
||||
|
}else { |
||||
|
return Result.error(401, "用户名不存在"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @查 |
||||
|
* @param loginName |
||||
|
* @param password |
||||
|
* @return |
||||
|
*/ |
||||
|
@PostMapping("/login") |
||||
|
public Result<String> login(@Pattern(regexp = "^\\S{5,16}$") String loginName, @Pattern(regexp = "^\\S{5,16}$") String password){ |
||||
|
// 检查用户是否已被锁定
|
||||
|
String lockedKey = LOCKED_KEY + loginName; |
||||
|
if (redisTemplate.hasKey(lockedKey)) { |
||||
|
return Result.error(403, "账户已被锁定,请稍后再试。"); |
||||
|
} |
||||
|
|
||||
|
// 获取当前用户登录尝试次数
|
||||
|
String attemptsKey = LOGIN_ATTEMPTS_KEY + loginName; |
||||
|
String attempts = redisTemplate.opsForValue().get(attemptsKey); |
||||
|
|
||||
|
int currentAttempts = attempts != null ? Integer.parseInt(attempts) : 0; |
||||
|
|
||||
|
// 根据用户名查询用户
|
||||
|
User loginUser = userService.findByUserName(loginName); |
||||
|
// 判断用户是否存在
|
||||
|
if(loginUser == null){ |
||||
|
return Result.error(401,"用户名不存在"); |
||||
|
} |
||||
|
|
||||
|
// 判断密码是否正确
|
||||
|
if (!loginUser.getPassword().equals(password)) { |
||||
|
// 增加登录失败次数
|
||||
|
redisTemplate.opsForValue().increment(attemptsKey, 1); |
||||
|
|
||||
|
// 如果登录失败次数达到上限,则设置锁定状态
|
||||
|
if (currentAttempts + 1 >= MAX_FAILED_ATTEMPTS) { |
||||
|
// 设置锁定状态
|
||||
|
redisTemplate.opsForValue().set(lockedKey, "true"); |
||||
|
// 设置过期时间
|
||||
|
redisTemplate.expire(lockedKey, LOCK_TIME); |
||||
|
// 删除登录失败次数
|
||||
|
redisTemplate.delete(attemptsKey); |
||||
|
} |
||||
|
|
||||
|
return Result.error(401, "密码错误,已尝试 " + (currentAttempts + 1) + " 次,还剩余 " + (MAX_FAILED_ATTEMPTS - 1 - currentAttempts) + " 次。"); |
||||
|
} else { |
||||
|
// 清除登录失败次数
|
||||
|
redisTemplate.delete(attemptsKey); |
||||
|
return Result.success("登录成功"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/query") |
||||
|
public Result<List<User>> query(){ |
||||
|
return Result.success(userService.query()); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/queryByUserName") |
||||
|
public Result<User> queryByUserName(@Valid String loginName){ |
||||
|
User user = userService.queryByUserName(loginName); |
||||
|
if(user==null){ |
||||
|
return Result.error(401, "用户不存在"); |
||||
|
} |
||||
|
return Result.success(userService.queryByUserName(loginName)); |
||||
|
} |
||||
|
} |
@ -0,0 +1,13 @@ |
|||||
|
package demo; |
||||
|
|
||||
|
import org.springframework.boot.SpringApplication; |
||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication; |
||||
|
|
||||
|
@SpringBootApplication |
||||
|
//@MapperScan("demo.Mapper") // 指定扫描的包路径
|
||||
|
public class DemoApplication { |
||||
|
|
||||
|
public static void main(String[] args) { |
||||
|
SpringApplication.run(DemoApplication.class, args); |
||||
|
} |
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
package demo.Entity; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
@Data |
||||
|
public class LoginRequest { |
||||
|
private String loginName; |
||||
|
private String password; |
||||
|
} |
@ -0,0 +1,64 @@ |
|||||
|
package demo.Entity; |
||||
|
|
||||
|
import com.fasterxml.jackson.annotation.JsonInclude; |
||||
|
import lombok.AllArgsConstructor; |
||||
|
import lombok.Builder; |
||||
|
import lombok.Data; |
||||
|
import lombok.NoArgsConstructor; |
||||
|
|
||||
|
import java.io.Serializable; |
||||
|
|
||||
|
@Data |
||||
|
@NoArgsConstructor |
||||
|
@AllArgsConstructor |
||||
|
@Builder |
||||
|
@JsonInclude(JsonInclude.Include.NON_NULL) |
||||
|
public class Result<T> implements Serializable { |
||||
|
|
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
/** |
||||
|
* 结果状态码 |
||||
|
*/ |
||||
|
private Integer code; |
||||
|
|
||||
|
/** |
||||
|
* 结果消息 |
||||
|
*/ |
||||
|
private String message; |
||||
|
|
||||
|
/** |
||||
|
* 返回的数据 |
||||
|
*/ |
||||
|
private T data; |
||||
|
|
||||
|
/** |
||||
|
* 成功的静态工厂方法 |
||||
|
* |
||||
|
* @param data 数据 |
||||
|
* @param <T> 泛型类型 |
||||
|
* @return Result对象 |
||||
|
*/ |
||||
|
public static <T> Result<T> success(T data) { |
||||
|
return Result.<T>builder() |
||||
|
.code(200) |
||||
|
.message("Success") |
||||
|
.data(data) |
||||
|
.build(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 失败的静态工厂方法 |
||||
|
* |
||||
|
* @param code 状态码 |
||||
|
* @param message 错误消息 |
||||
|
* @param <T> 泛型类型 |
||||
|
* @return Result对象 |
||||
|
*/ |
||||
|
public static <T> Result<T> error(Integer code, String message) { |
||||
|
return Result.<T>builder() |
||||
|
.code(code) |
||||
|
.message(message) |
||||
|
.build(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,29 @@ |
|||||
|
package demo.Entity; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import javax.persistence.*; |
||||
|
import java.util.Date; |
||||
|
|
||||
|
@Entity |
||||
|
@Data |
||||
|
@Table(name = "role") |
||||
|
public class Role { |
||||
|
@Id |
||||
|
@Column(length = 32, nullable = false) |
||||
|
private int id; |
||||
|
|
||||
|
@Column(length = 50) |
||||
|
private String roleName; |
||||
|
|
||||
|
@Column(length = 50) |
||||
|
private String roleCode; |
||||
|
|
||||
|
@Temporal(TemporalType.TIMESTAMP) |
||||
|
@Column() |
||||
|
private Date createTime; |
||||
|
|
||||
|
@Temporal(TemporalType.TIMESTAMP) |
||||
|
@Column() |
||||
|
private Date updateTime; |
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
package demo.Entity; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
@Data |
||||
|
public class RoleVO { |
||||
|
private String roleName; |
||||
|
private String roleCode; |
||||
|
} |
@ -0,0 +1,32 @@ |
|||||
|
package demo.Entity; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import javax.persistence.*; |
||||
|
import java.util.Date; |
||||
|
|
||||
|
@Entity |
||||
|
@Data |
||||
|
@Table(name = "user") |
||||
|
public class User { |
||||
|
@Id |
||||
|
@Column(length = 32, nullable = false) |
||||
|
private int id; |
||||
|
|
||||
|
@Column(length = 50) |
||||
|
private String loginName; |
||||
|
|
||||
|
@Column(length = 50) |
||||
|
private String userChnName; |
||||
|
|
||||
|
@Temporal(TemporalType.TIMESTAMP) |
||||
|
@Column() |
||||
|
private Date createTime; |
||||
|
|
||||
|
@Temporal(TemporalType.TIMESTAMP) |
||||
|
@Column() |
||||
|
private Date updateTime; |
||||
|
|
||||
|
@Column(length = 16) |
||||
|
private String password; |
||||
|
} |
@ -0,0 +1,13 @@ |
|||||
|
package demo.Entity; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
@Data |
||||
|
public class UserVO { |
||||
|
|
||||
|
private String loginName; |
||||
|
|
||||
|
private String userChnName; |
||||
|
|
||||
|
private String password; |
||||
|
} |
@ -0,0 +1,31 @@ |
|||||
|
package demo.Mapper; |
||||
|
|
||||
|
import demo.Entity.Role; |
||||
|
import demo.Entity.RoleVO; |
||||
|
import demo.Entity.User; |
||||
|
import org.apache.ibatis.annotations.*; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
import java.util.List; |
||||
|
|
||||
|
@Mapper |
||||
|
public interface RoleMapper { |
||||
|
|
||||
|
@Insert("insert into role(ROLE_NAME, ROLE_CODE, CREATE_TIME, UPDATE_TIME) values(#{roleName}, #{roleCode}, #{date}, #{date})") |
||||
|
void insert(@Param("roleName") String roleName, @Param("roleCode") String roleCode, @Param("date") Date date); |
||||
|
|
||||
|
@Select("select * from role where ROLE_NAME = #{roleName}") |
||||
|
Role findByRoleName(@Param("roleName") String roleName); |
||||
|
|
||||
|
@Delete("delete from role where ROLE_NAME = #{roleName}") |
||||
|
void deleteByRoleName(@Param("roleName") String roleName); |
||||
|
|
||||
|
@Update("update role set ROLE_NAME = #{roleName}, ROLE_CODE = #{roleCode}, UPDATE_TIME = #{date} where ROLE_NAME = #{roleName}") |
||||
|
void update(@Param("roleName") String roleName, @Param("roleCode") String roleCode, @Param("date") Date date); |
||||
|
|
||||
|
@Select("select * from role") |
||||
|
List<Role> findAll(); |
||||
|
|
||||
|
@Select("select * from role where ROLE_CODE = #{roleCode}") |
||||
|
Role findByRoleCode(@Param("roleCode") String roleCode); |
||||
|
} |
@ -0,0 +1,32 @@ |
|||||
|
package demo.Mapper; |
||||
|
|
||||
|
import demo.Entity.User; |
||||
|
import org.apache.ibatis.annotations.*; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
import java.util.List; |
||||
|
|
||||
|
@Mapper |
||||
|
public interface UserMapper { |
||||
|
|
||||
|
@Select("SELECT * FROM user WHERE LOGIN_NAME = #{loginName} and PASSWORD = #{password}") |
||||
|
User findByMessage(String loginName, String password); |
||||
|
|
||||
|
@Insert("INSERT INTO user (ID, LOGIN_NAME, USER_CHN_NAME, CREATE_TIME, UPDATE_TIME, PASSWORD) VALUES (NULL, #{loginName}, #{userChnName}, #{date}, #{date}, #{password})") |
||||
|
void register(@Param("loginName") String loginName, @Param("userChnName") String userChnName, @Param("date") Date date, @Param("password") String password); |
||||
|
|
||||
|
@Select("SELECT * FROM user WHERE LOGIN_NAME = #{loginName}") |
||||
|
User findByUsername(String loginName); |
||||
|
|
||||
|
@Delete("DELETE FROM user WHERE LOGIN_NAME = #{loginName}") |
||||
|
void deleteByUserName(String loginName); |
||||
|
|
||||
|
@Update("UPDATE user SET USER_CHN_NAME = #{userChnName}, UPDATE_TIME = #{updateTime}, PASSWORD = #{password} WHERE LOGIN_NAME = #{loginName}") |
||||
|
void updateByUserName(@Param("loginName") String loginName, @Param("userChnName") String userChnName, @Param("updateTime") Date updateTime, @Param("password") String password); |
||||
|
|
||||
|
@Select("SELECT * FROM user") |
||||
|
List<User> findAll(); |
||||
|
|
||||
|
@Select("SELECT * FROM user WHERE LOGIN_NAME = #{loginName}") |
||||
|
User queryByUserName(@Param("loginName")String loginName); |
||||
|
} |
@ -0,0 +1,45 @@ |
|||||
|
package demo.Service; |
||||
|
|
||||
|
import demo.Entity.Role; |
||||
|
import demo.Entity.RoleVO; |
||||
|
import demo.Entity.User; |
||||
|
import demo.Mapper.RoleMapper; |
||||
|
import demo.Mapper.UserMapper; |
||||
|
import lombok.Data; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
import java.util.List; |
||||
|
|
||||
|
@Slf4j |
||||
|
@Service |
||||
|
public class RoleService { |
||||
|
@Autowired |
||||
|
private RoleMapper roleMapper; |
||||
|
|
||||
|
public void insert(String roleName, String roleCode, Date date){ |
||||
|
roleMapper.insert(roleName, roleCode, date); |
||||
|
} |
||||
|
|
||||
|
public Role findByRoleName(String roleName){ |
||||
|
return roleMapper.findByRoleName(roleName); |
||||
|
} |
||||
|
|
||||
|
public void deleteByRoleName(String roleName){ |
||||
|
roleMapper.deleteByRoleName(roleName); |
||||
|
} |
||||
|
|
||||
|
public void update(RoleVO roleVO, Date date){ |
||||
|
roleMapper.update(roleVO.getRoleName(), roleVO.getRoleCode(), date); |
||||
|
} |
||||
|
|
||||
|
public List<Role> findAll(){ |
||||
|
return roleMapper.findAll(); |
||||
|
} |
||||
|
|
||||
|
public Role findByRoleCode(String roleCode){ |
||||
|
return roleMapper.findByRoleCode(roleCode); |
||||
|
} |
||||
|
} |
@ -0,0 +1,56 @@ |
|||||
|
package demo.Service; |
||||
|
|
||||
|
import demo.Entity.Role; |
||||
|
import demo.Entity.User; |
||||
|
import demo.Mapper.UserMapper; |
||||
|
import lombok.Data; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import java.time.Instant; |
||||
|
import java.time.LocalDateTime; |
||||
|
import java.time.ZoneOffset; |
||||
|
import java.util.Date; |
||||
|
import java.util.List; |
||||
|
|
||||
|
@Slf4j |
||||
|
@Service |
||||
|
public class UserService { |
||||
|
@Autowired |
||||
|
private UserMapper userMapper; |
||||
|
|
||||
|
public User findByMessage(String loginName, String password){ |
||||
|
return userMapper.findByMessage(loginName, password); |
||||
|
} |
||||
|
|
||||
|
public void register(String loginName, String UserChnName, String password){ |
||||
|
// 创建一个LocalDateTime对象
|
||||
|
LocalDateTime localDateTime = LocalDateTime.now(); |
||||
|
// 将LocalDateTime转换为Instant
|
||||
|
Instant instant = localDateTime.toInstant(ZoneOffset.UTC); |
||||
|
// 将Instant转换为Date
|
||||
|
Date date = Date.from(instant); |
||||
|
userMapper.register(loginName, UserChnName, date, password); |
||||
|
} |
||||
|
|
||||
|
public User findByUserName(String loginName){ |
||||
|
return userMapper.findByUsername(loginName); |
||||
|
} |
||||
|
|
||||
|
public void deleteByUserName(String loginName){ |
||||
|
userMapper.deleteByUserName(loginName); |
||||
|
} |
||||
|
|
||||
|
public void updateByUserName(String loginName, String userChnName, Date updateTime, String password){ |
||||
|
userMapper.updateByUserName(loginName, userChnName, updateTime, password); |
||||
|
} |
||||
|
|
||||
|
public List<User> query(){ |
||||
|
return userMapper.findAll(); |
||||
|
} |
||||
|
|
||||
|
public User queryByUserName(String loginName){ |
||||
|
return userMapper.queryByUserName(loginName); |
||||
|
} |
||||
|
} |
@ -0,0 +1,21 @@ |
|||||
|
server: |
||||
|
port: 8080 |
||||
|
spring: |
||||
|
datasource: |
||||
|
username: root |
||||
|
password: 123456 |
||||
|
driver-class-name: com.mysql.cj.jdbc.Driver |
||||
|
url: jdbc:mysql://localhost:3306/test_repo |
||||
|
redis: |
||||
|
host: localhost |
||||
|
port: 6379 |
||||
|
password: 123456 # 如果没有密码,可以省略 |
||||
|
database: 0 # 默认数据库索引 |
||||
|
timeout: 5000ms # 连接超时时间 |
||||
|
|
||||
|
mybatis: |
||||
|
configuration: |
||||
|
#开启驼峰命名转换 |
||||
|
map-underscore-to-camel-case: true |
||||
|
mapper-locations: classpath:mapper/*.xml |
||||
|
type-aliases-package: com.example.demo.entity |
@ -0,0 +1,6 @@ |
|||||
|
<html> |
||||
|
<body> |
||||
|
<h1>hello word!!!</h1> |
||||
|
<p>this is a html page</p> |
||||
|
</body> |
||||
|
</html> |
@ -0,0 +1,23 @@ |
|||||
|
package demo; |
||||
|
|
||||
|
import demo.Mapper.UserMapper; |
||||
|
import org.junit.jupiter.api.Test; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.boot.test.context.SpringBootTest; |
||||
|
|
||||
|
import javax.sql.DataSource; |
||||
|
|
||||
|
@SpringBootTest |
||||
|
class DemoApplicationTests { |
||||
|
@Autowired |
||||
|
private DataSource dataSource; |
||||
|
@Autowired |
||||
|
private UserMapper userMapper; |
||||
|
|
||||
|
@Test |
||||
|
void contextLoads() throws Exception { |
||||
|
|
||||
|
System.out.println(dataSource.getConnection()); |
||||
|
|
||||
|
} |
||||
|
} |
Loading…
Reference in new issue