ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
1. 准备阶段 - 数据库表结构 ```mysql CREATE DATABASE `sys_rbac` CHARACTER SET 'utf8' COLLATE 'utf8_bin'; USE `sys_rbac`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID', `username` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '用户名', `password` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '密码', `enabled` tinyint(1) NULL DEFAULT 1 COMMENT '启用状态[1:启用][0:未启用]', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `index_user_username`(`username`) USING BTREE COMMENT '用户名唯一索引' ); CREATE TABLE `role` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '角色ID', `name` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '角色名称', `desc` char(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '角色描述', PRIMARY KEY (`id`) USING BTREE ); CREATE TABLE `access` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '权限ID', `name` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '权限名称', `desc` char(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '权限描述', PRIMARY KEY (`id`) USING BTREE ); CREATE TABLE `user_role` ( `user_id` int(11) NOT NULL COMMENT '用户ID', `role_id` int(11) NOT NULL COMMENT '角色ID', INDEX `fk_user_role_role_id`(`role_id`) USING BTREE, INDEX `fk_user_role_user_id`(`user_id`) USING BTREE, CONSTRAINT `fk_user_role_role_id` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `fk_user_role_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE TABLE `role_access` ( `role_id` int(11) NOT NULL COMMENT '角色ID', `access_id` int(11) NOT NULL COMMENT '权限ID', INDEX `fk_role_access_role_id`(`role_id`) USING BTREE, INDEX `fk_role_access_access_id`(`access_id`) USING BTREE, CONSTRAINT `fk_role_access_access_id` FOREIGN KEY (`access_id`) REFERENCES `access` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `fk_role_access_role_id` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ); ``` - 实体类 ```java @Data public class User { private Integer id; private String username; private String password; private Boolean enabled; } @Data public class Role { private Integer id; private String name; private String desc; } @Data public class Access { private Integer id; private String name; private String desc; } @Data public class UserRole { private Integer userId; private Integer roleId; } @Data public class RoleAccess { private Integer roleId; private Integer accessId; } ``` 2. 添加依赖 ```xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.5.RELEASE</version> <relativePath/> </parent> <dependencies> ... </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> ``` > springboot父pom引入 ```xml <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> ``` > 这是mybatis核心依赖以及MySQL连接驱动 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> ``` > 这是web依赖,以及lombok工具依赖。 3. pom配置编译资源 ```xml <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>com/gosuncn/dao/*.xml</include> </includes> </resource> </resources> </build> ``` > 目的就是为了能在`src/main/java`下打包到xml文件。 4. 配置文件application.yml ```yaml server: port: 80 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql:///sys_rbac?serverTimezone=UTC username: root password: root mybatis: mapper-locations: classpath*:/com/gosuncn/dao/*Mapper.xml ``` 5. 扫描mapper接口 - 方式一:[`XxxDao`接口上不加`@Mapper`注解] ```java @SpringBootApplication @MapperScan("com.gosuncn.dao") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` - 方式二:[启动类上不加`@MapperScan`注解] ```java @Mapper public interface UserDao { int userSave(User user); } ``` 6. 编写MapperXml文件`UserDaoMapper.xml` ```xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.gosuncn.dao.UserDao"> <insert id="userSave" parameterType="com.gosuncn.entity.User"> insert into user (username, password) values (#{username}, #{password}) </insert> </mapper> ``` > 个人习惯放在与dao目录同级目录下,方便管理。 接下来就可以通过service调用dao了。