Commit acf2a0e1 by yw

项目初始化

parent 0f777461
...@@ -18,12 +18,10 @@ import org.springframework.cloud.openfeign.EnableFeignClients; ...@@ -18,12 +18,10 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
@EnableDataRedis @EnableDataRedis
@EnableFeignClients @EnableFeignClients
@SpringBootApplication @SpringBootApplication
//@SpringBootApplication(scanBasePackages = {"cn.datax"}) public class DataxAuthApplication {
//@EnableFeignClients(basePackages = {"cn.datax"})
public class DataAuthApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(DataAuthApplication.class, args); SpringApplication.run(DataxAuthApplication.class, args);
} }
} }
...@@ -24,10 +24,22 @@ public class DataWebResponseExceptionTranslator implements WebResponseExceptionT ...@@ -24,10 +24,22 @@ public class DataWebResponseExceptionTranslator implements WebResponseExceptionT
return status.body(R.error(message)); return status.body(R.error(message));
} }
if (e instanceof InvalidGrantException) { if (e instanceof InvalidGrantException) {
if (StringUtils.containsIgnoreCase(e.getMessage(), "Bad client credentials")) {
message = "认证失败";
return status.body(R.error(message));
}
if (StringUtils.containsIgnoreCase(e.getMessage(), "Invalid refresh token")) { if (StringUtils.containsIgnoreCase(e.getMessage(), "Invalid refresh token")) {
message = "refresh token无效"; message = "refresh token无效";
return status.body(R.error(message)); return status.body(R.error(message));
} }
if (StringUtils.containsIgnoreCase(e.getMessage(), "Invalid access token")) {
message = "Token验证失败";
return status.body(R.error(message));
}
if (StringUtils.containsIgnoreCase(e.getMessage(), "Access token expired")) {
message = "Token过期";
return status.body(R.error(message));
}
if (StringUtils.containsIgnoreCase(e.getMessage(), "locked")) { if (StringUtils.containsIgnoreCase(e.getMessage(), "locked")) {
message = "用户已被锁定,请联系管理员"; message = "用户已被锁定,请联系管理员";
return status.body(R.error(message)); return status.body(R.error(message));
......
package cn.datax.common.utils;
public class SecurityUtil {
}
package cn.datax.common.mybatis.config; package cn.datax.common.mybatis.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
/** /**
...@@ -9,4 +10,9 @@ import org.springframework.context.annotation.ComponentScan; ...@@ -9,4 +10,9 @@ import org.springframework.context.annotation.ComponentScan;
*/ */
@ComponentScan({"cn.datax.common.mybatis"}) @ComponentScan({"cn.datax.common.mybatis"})
public class AutoConfiguration { public class AutoConfiguration {
@Bean
public DataBatisPlusConfig dataBatisPlusConfig() {
return new DataBatisPlusConfig();
}
} }
...@@ -3,11 +3,9 @@ package cn.datax.common.mybatis.config; ...@@ -3,11 +3,9 @@ package cn.datax.common.mybatis.config;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@MapperScan("cn.datax.service.**.mapper") @MapperScan("cn.datax.service.**.mapper")
@EnableTransactionManagement @EnableTransactionManagement
@Import({DataMetaObjectHandler.class}) @Import({DataMetaObjectHandler.class})
......
package cn.datax.common.redis.config; package cn.datax.common.redis.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
/** /**
...@@ -9,4 +10,9 @@ import org.springframework.context.annotation.ComponentScan; ...@@ -9,4 +10,9 @@ import org.springframework.context.annotation.ComponentScan;
*/ */
@ComponentScan({"cn.datax.common.redis"}) @ComponentScan({"cn.datax.common.redis"})
public class AutoConfiguration { public class AutoConfiguration {
@Bean
public RedisConfig redisConfig() {
return new RedisConfig();
}
} }
...@@ -7,7 +7,6 @@ import org.springframework.cache.annotation.CachingConfigurerSupport; ...@@ -7,7 +7,6 @@ import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration; import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.RedisConnectionFactory;
...@@ -24,7 +23,6 @@ import java.util.HashSet; ...@@ -24,7 +23,6 @@ import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@Configuration
@EnableCaching @EnableCaching
public class RedisConfig extends CachingConfigurerSupport { public class RedisConfig extends CachingConfigurerSupport {
......
package cn.datax.common.security.config; package cn.datax.common.security.config;
import cn.datax.common.security.feign.DataFeignRequestInterceptor; import cn.datax.common.security.feign.DataFeignRequestInterceptor;
import cn.datax.common.security.handler.DataAccessDeniedHandler;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
......
package cn.datax.common.security.config; package cn.datax.common.security.config;
import cn.datax.common.security.interceptor.DataServerProtectInterceptor; import cn.datax.common.security.interceptor.DataServerProtectInterceptor;
import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Import;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
...@@ -15,23 +16,21 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; ...@@ -15,23 +16,21 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
* *
* @author yuwei * @author yuwei
*/ */
@Slf4j @ComponentScan({"cn.datax.common.security.interceptor"})
@Import({DataServerProtectInterceptor.class})
public class DataServerProtectConfiguration implements WebMvcConfigurer { public class DataServerProtectConfiguration implements WebMvcConfigurer {
@Autowired
private DataServerProtectInterceptor dataServerProtectInterceptor;
@Bean @Bean
@ConditionalOnMissingBean(value = PasswordEncoder.class) @ConditionalOnMissingBean(value = PasswordEncoder.class)
public PasswordEncoder passwordEncoder() { public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(); return new BCryptPasswordEncoder();
} }
@Bean
public HandlerInterceptor dataServerProtectInterceptor() {
log.debug("开启dataServerProtectInterceptor解析");
return new DataServerProtectInterceptor();
}
@Override @Override
public void addInterceptors(InterceptorRegistry registry) { public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(dataServerProtectInterceptor()); registry.addInterceptor(dataServerProtectInterceptor);
} }
} }
...@@ -6,10 +6,10 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient; ...@@ -6,10 +6,10 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient @EnableDiscoveryClient
@SpringBootApplication @SpringBootApplication
public class DataGatewayApplication { public class DataxGatewayApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(DataGatewayApplication.class, args); SpringApplication.run(DataxGatewayApplication.class, args);
} }
} }
package cn.datax.system.api.dto; package cn.datax.service.system.api.dto;
import cn.datax.common.validate.ValidateGroupForSave; import cn.datax.common.validate.ValidateGroupForSave;
import cn.datax.common.validate.ValidateGroupForUpdate; import cn.datax.common.validate.ValidateGroupForUpdate;
......
package cn.datax.system.api.dto; package cn.datax.service.system.api.dto;
import cn.datax.common.validate.ValidateGroupForSave; import cn.datax.common.validate.ValidateGroupForSave;
import cn.datax.common.validate.ValidateGroupForUpdate; import cn.datax.common.validate.ValidateGroupForUpdate;
......
package cn.datax.system.api.dto; package cn.datax.service.system.api.dto;
import cn.datax.common.validate.ValidateGroupForSave; import cn.datax.common.validate.ValidateGroupForSave;
import cn.datax.common.validate.ValidateGroupForUpdate; import cn.datax.common.validate.ValidateGroupForUpdate;
......
package cn.datax.system.api.dto; package cn.datax.service.system.api.dto;
import cn.datax.common.validate.ValidateGroupForSave; import cn.datax.common.validate.ValidateGroupForSave;
import cn.datax.common.validate.ValidateGroupForUpdate; import cn.datax.common.validate.ValidateGroupForUpdate;
......
package cn.datax.system.api.dto; package cn.datax.service.system.api.dto;
import cn.datax.common.validate.ValidateGroupForSave; import cn.datax.common.validate.ValidateGroupForSave;
import cn.datax.common.validate.ValidateGroupForUpdate; import cn.datax.common.validate.ValidateGroupForUpdate;
......
package cn.datax.system.api.entity; package cn.datax.service.system.api.entity;
import cn.datax.common.base.BaseEntity; import cn.datax.common.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
......
package cn.datax.system.api.entity; package cn.datax.service.system.api.entity;
import cn.datax.common.base.BaseEntity; import cn.datax.common.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
......
package cn.datax.system.api.entity; package cn.datax.service.system.api.entity;
import cn.datax.common.base.BaseEntity; import cn.datax.common.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
......
package cn.datax.system.api.entity; package cn.datax.service.system.api.entity;
import cn.datax.common.base.BaseEntity; import cn.datax.common.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
......
package cn.datax.system.api.entity; package cn.datax.service.system.api.entity;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
......
package cn.datax.system.api.entity; package cn.datax.service.system.api.entity;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
......
package cn.datax.system.api.entity; package cn.datax.service.system.api.entity;
import cn.datax.common.base.BaseEntity; import cn.datax.common.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
......
package cn.datax.system.api.entity; package cn.datax.service.system.api.entity;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
......
package cn.datax.system.api.entity; package cn.datax.service.system.api.entity;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
......
package cn.datax.service.system.api.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class DeptVo implements Serializable {
private static final long serialVersionUID=1L;
private String id;
private Integer status;
private String parentId;
private String deptName;
}
package cn.datax.service.system.api.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class MenuVo implements Serializable {
private static final long serialVersionUID=1L;
private String id;
private Integer status;
private String parentId;
private String menuName;
private String menuPath;
private String menuComponent;
private String menuPerms;
private String menuIcon;
private Integer menuType;
private Integer menuSort;
}
package cn.datax.service.system.api.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class PostVo implements Serializable {
private static final long serialVersionUID=1L;
private String id;
private Integer status;
private String postName;
}
package cn.datax.service.system.api.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class RoleVo implements Serializable {
private static final long serialVersionUID=1L;
private String id;
private Integer status;
private String roleName;
private String roleCode;
}
package cn.datax.service.system.api.vo;
import cn.datax.service.system.api.entity.DeptEntity;
import cn.datax.service.system.api.entity.PostEntity;
import cn.datax.service.system.api.entity.RoleEntity;
import cn.datax.service.system.api.entity.UserEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.List;
@Data
public class UserVo implements Serializable {
private static final long serialVersionUID=1L;
private String id;
private Integer status;
private String username;
private String nickname;
private String email;
private String phone;
private LocalDate birthday;
private List<DeptVo> depts;
private List<PostVo> posts;
private List<RoleVo> roles;
}
package cn.datax.system.api.vo;
import cn.datax.system.api.entity.DeptEntity;
import cn.datax.system.api.entity.PostEntity;
import cn.datax.system.api.entity.RoleEntity;
import cn.datax.system.api.entity.UserEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = true)
public class UserVo extends UserEntity {
private List<DeptEntity> depts;
private List<PostEntity> posts;
private List<RoleEntity> roles;
}
package cn.datax.service.system;
import cn.datax.common.mybatis.annotation.EnableDataMybatis;
import cn.datax.common.redis.annotation.EnableDataRedis;
import cn.datax.common.security.annotation.EnableDataAuthExceptionHandler;
import cn.datax.common.security.annotation.EnableDataServerProtect;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@EnableDiscoveryClient
@EnableCircuitBreaker
@EnableDataAuthExceptionHandler
@EnableDataServerProtect
@EnableDataMybatis
@EnableDataRedis
@EnableFeignClients
@SpringBootApplication
public class DataxSystemApplication {
public static void main(String[] args) {
SpringApplication.run(DataxSystemApplication.class);
}
}
package cn.datax.system.config; package cn.datax.service.system.config;
import cn.datax.common.security.handler.DataAccessDeniedHandler;
import cn.datax.common.security.handler.DataAuthExceptionEntryPoint;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
...@@ -18,6 +20,12 @@ import org.springframework.security.oauth2.provider.token.store.redis.RedisToken ...@@ -18,6 +20,12 @@ import org.springframework.security.oauth2.provider.token.store.redis.RedisToken
public class ResourceServerConfig extends ResourceServerConfigurerAdapter { public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Autowired @Autowired
private DataAccessDeniedHandler accessDeniedHandler;
@Autowired
private DataAuthExceptionEntryPoint exceptionEntryPoint;
@Autowired
private RedisConnectionFactory redisConnectionFactory; private RedisConnectionFactory redisConnectionFactory;
@Autowired @Autowired
...@@ -32,6 +40,8 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter { ...@@ -32,6 +40,8 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
public void configure(ResourceServerSecurityConfigurer resources) throws Exception { public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
resources resources
.tokenStore(redisTokenStore()) .tokenStore(redisTokenStore())
.tokenServices(tokenService); .tokenServices(tokenService)
.authenticationEntryPoint(exceptionEntryPoint)
.accessDeniedHandler(accessDeniedHandler);
} }
} }
package cn.datax.service.system.controller;
import cn.datax.common.core.R;
import cn.datax.common.validate.ValidateGroupForSave;
import cn.datax.common.validate.ValidateGroupForUpdate;
import cn.datax.service.system.api.dto.DeptDto;
import cn.datax.service.system.service.DeptService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import cn.datax.common.base.BaseController;
/**
* <p>
* 前端控制器
* </p>
*
* @author yuwei
* @since 2019-09-04
*/
@RestController
@RequestMapping("/dept")
public class DeptController extends BaseController {
@Autowired
private DeptService deptService;
@GetMapping("/{id}")
public R getDeptById(@PathVariable String id) {
return R.ok().setData(deptService.getById(id));
}
@GetMapping("/list")
public R getDeptList() {
return R.ok().setData(deptService.list(Wrappers.emptyWrapper()));
}
@PostMapping()
public R saveDept(@RequestBody @Validated({ValidateGroupForSave.class}) DeptDto dept) {
deptService.saveDept(dept);
return R.ok();
}
@PutMapping()
public R updateDept(@RequestBody @Validated({ValidateGroupForUpdate.class}) DeptDto dept) {
deptService.updateDept(dept);
return R.ok();
}
@DeleteMapping("/{id}")
public R deleteDept(@PathVariable String id) {
deptService.deleteDeptById(id);
return R.ok();
}
}
package cn.datax.service.system.controller;
import cn.datax.common.core.R;
import cn.datax.common.validate.ValidateGroupForSave;
import cn.datax.common.validate.ValidateGroupForUpdate;
import cn.datax.service.system.api.dto.MenuDto;
import cn.datax.service.system.service.MenuService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import cn.datax.common.base.BaseController;
/**
* <p>
* 前端控制器
* </p>
*
* @author yuwei
* @since 2019-09-11
*/
@RestController
@RequestMapping("/menu")
public class MenuController extends BaseController {
@Autowired
private MenuService menuService;
@GetMapping("/{id}")
public R getMenuById(@PathVariable String id) {
return R.ok().setData(menuService.getById(id));
}
@GetMapping("/list")
public R getMenuList() {
return R.ok().setData(menuService.list(Wrappers.emptyWrapper()));
}
@PostMapping()
public R saveMenu(@RequestBody @Validated({ValidateGroupForSave.class}) MenuDto menu) {
menuService.saveMenu(menu);
return R.ok();
}
@PutMapping()
public R updateMenu(@RequestBody @Validated({ValidateGroupForUpdate.class}) MenuDto menu) {
menuService.updateMenu(menu);
return R.ok();
}
@DeleteMapping("/{id}")
public R deleteMenu(@PathVariable String id) {
menuService.deleteMenuById(id);
return R.ok();
}
}
package cn.datax.service.system.controller;
import cn.datax.common.core.R;
import cn.datax.common.validate.ValidateGroupForSave;
import cn.datax.common.validate.ValidateGroupForUpdate;
import cn.datax.service.system.api.dto.PostDto;
import cn.datax.service.system.api.entity.PostEntity;
import cn.datax.service.system.service.PostService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import cn.datax.common.base.BaseController;
/**
* <p>
* 前端控制器
* </p>
*
* @author yuwei
* @since 2019-09-11
*/
@RestController
@RequestMapping("/post")
public class PostController extends BaseController {
@Autowired
private PostService postService;
@GetMapping("/{id}")
public R getPostById(@PathVariable String id) {
return R.ok().setData(postService.getById(id));
}
@GetMapping("/page")
public R getPostPage(Page page, PostEntity post) {
return R.ok().setData(postService.page(page, Wrappers.query(post)));
}
@PostMapping()
public R savePost(@RequestBody @Validated({ValidateGroupForSave.class}) PostDto post) {
postService.savePost(post);
return R.ok();
}
@PutMapping()
public R updatePost(@RequestBody @Validated({ValidateGroupForUpdate.class}) PostDto post) {
postService.updatePost(post);
return R.ok();
}
@DeleteMapping("/{id}")
public R deletePost(@PathVariable String id) {
postService.deletePostById(id);
return R.ok();
}
}
package cn.datax.service.system.controller;
import cn.datax.common.core.R;
import cn.datax.common.validate.ValidateGroupForSave;
import cn.datax.common.validate.ValidateGroupForUpdate;
import cn.datax.service.system.api.dto.RoleDto;
import cn.datax.service.system.api.entity.RoleEntity;
import cn.datax.service.system.service.RoleService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import cn.datax.common.base.BaseController;
/**
* <p>
* 前端控制器
* </p>
*
* @author yuwei
* @since 2019-09-04
*/
@RestController
@RequestMapping("/role")
public class RoleController extends BaseController {
@Autowired
private RoleService roleService;
/**
* 通过ID查询角色信息
* @param id
* @return
*/
@GetMapping("/{id}")
public R getRoleById(@PathVariable String id) {
return R.ok().setData(roleService.getById(id));
}
/**
*分页查询角色信息
* @param page current=1&size=20
* @param role
* @return
*/
@GetMapping("/page")
public R getRolePage(Page page, RoleEntity role) {
return R.ok().setData(roleService.page(page, Wrappers.query(role)));
}
/**
* 添加角色
* @param role
* @return
*/
@PostMapping()
public R saveRole(@RequestBody @Validated({ValidateGroupForSave.class}) RoleDto role) {
roleService.saveRole(role);
return R.ok();
}
/**
* 修改角色
* @param role
* @return
*/
@PutMapping()
public R updateRole(@RequestBody @Validated({ValidateGroupForUpdate.class}) RoleDto role) {
roleService.updateRole(role);
return R.ok();
}
/**
* 删除角色
* @param id
* @return
*/
@DeleteMapping("/{id}")
public R deleteRole(@PathVariable String id) {
roleService.deleteRoleById(id);
return R.ok();
}
}
package cn.datax.service.system.controller;
import cn.datax.common.core.R;
import cn.datax.common.validate.ValidateGroupForSave;
import cn.datax.common.validate.ValidateGroupForUpdate;
import cn.datax.service.system.api.dto.UserDto;
import cn.datax.service.system.api.entity.UserEntity;
import cn.datax.service.system.service.UserService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import cn.datax.common.base.BaseController;
import java.security.Principal;
/**
* <p>
* 前端控制器
* </p>
*
* @author yuwei
* @since 2019-09-04
*/
@RestController
@RequestMapping("/user")
public class UserController extends BaseController {
@Autowired
private UserService userService;
@GetMapping("/token")
public Principal tokenUser() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
return authentication;
}
@GetMapping("/{id}")
public R getUserById(@PathVariable String id) {
return R.ok().setData(userService.getById(id));
}
@GetMapping("/page")
public R getUserPage(Page page, UserEntity user) {
return R.ok().setData(userService.page(page, Wrappers.query(user)));
}
@PostMapping()
public R saveUser(@RequestBody @Validated({ValidateGroupForSave.class}) UserDto user) {
userService.saveUser(user);
return R.ok();
}
@PutMapping()
public R updateUser(@RequestBody @Validated({ValidateGroupForUpdate.class}) UserDto user) {
userService.updateUser(user);
return R.ok();
}
@DeleteMapping("/{id}")
public R deleteUser(@PathVariable String id) {
userService.deleteUserById(id);
return R.ok();
}
}
package cn.datax.service.system.mapper;
import cn.datax.common.base.BaseDao;
import cn.datax.service.system.api.entity.DeptEntity;
/**
* <p>
* Mapper 接口
* </p>
*
* @author yuwei
* @since 2019-09-04
*/
public interface DeptMapper extends BaseDao<DeptEntity> {
}
package cn.datax.service.system.mapper;
import cn.datax.service.system.api.entity.MenuEntity;
import cn.datax.common.base.BaseDao;
/**
* <p>
* Mapper 接口
* </p>
*
* @author yuwei
* @since 2019-09-11
*/
public interface MenuMapper extends BaseDao<MenuEntity> {
}
package cn.datax.service.system.mapper;
import cn.datax.service.system.api.entity.PostEntity;
import cn.datax.common.base.BaseDao;
/**
* <p>
* Mapper 接口
* </p>
*
* @author yuwei
* @since 2019-09-11
*/
public interface PostMapper extends BaseDao<PostEntity> {
}
package cn.datax.service.system.mapper;
import cn.datax.common.base.BaseDao;
import cn.datax.service.system.api.entity.RoleEntity;
/**
* <p>
* Mapper 接口
* </p>
*
* @author yuwei
* @since 2019-09-04
*/
public interface RoleMapper extends BaseDao<RoleEntity> {
}
package cn.datax.service.system.mapper;
import cn.datax.service.system.api.entity.RoleMenuEntity;
import cn.datax.common.base.BaseDao;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author yuwei
* @since 2019-09-11
*/
public interface RoleMenuMapper extends BaseDao<RoleMenuEntity> {
void insertBatch(List<RoleMenuEntity> list);
}
package cn.datax.service.system.mapper;
import cn.datax.service.system.api.entity.UserDeptEntity;
import cn.datax.common.base.BaseDao;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author yuwei
* @since 2019-09-11
*/
public interface UserDeptMapper extends BaseDao<UserDeptEntity> {
void insertBatch(List<UserDeptEntity> list);
}
package cn.datax.service.system.mapper;
import cn.datax.common.base.BaseDao;
import cn.datax.service.system.api.entity.UserEntity;
/**
* <p>
* Mapper 接口
* </p>
*
* @author yuwei
* @since 2019-09-04
*/
public interface UserMapper extends BaseDao<UserEntity> {
}
package cn.datax.service.system.mapper;
import cn.datax.service.system.api.entity.UserPostEntity;
import cn.datax.common.base.BaseDao;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author yuwei
* @since 2019-09-11
*/
public interface UserPostMapper extends BaseDao<UserPostEntity> {
void insertBatch(List<UserPostEntity> list);
}
package cn.datax.service.system.mapper;
import cn.datax.common.base.BaseDao;
import cn.datax.service.system.api.entity.UserRoleEntity;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author yuwei
* @since 2019-09-04
*/
public interface UserRoleMapper extends BaseDao<UserRoleEntity> {
void insertBatch(List<UserRoleEntity> list);
}
package cn.datax.service.system.service;
import cn.datax.common.base.BaseService;
import cn.datax.service.system.api.dto.DeptDto;
import cn.datax.service.system.api.entity.DeptEntity;
/**
* <p>
* 服务类
* </p>
*
* @author yuwei
* @since 2019-09-04
*/
public interface DeptService extends BaseService<DeptEntity> {
void saveDept(DeptDto dept);
void updateDept(DeptDto dept);
void deleteDeptById(String id);
}
package cn.datax.service.system.service;
import cn.datax.service.system.api.dto.MenuDto;
import cn.datax.service.system.api.entity.MenuEntity;
import cn.datax.common.base.BaseService;
/**
* <p>
* 服务类
* </p>
*
* @author yuwei
* @since 2019-09-11
*/
public interface MenuService extends BaseService<MenuEntity> {
void saveMenu(MenuDto menu);
void updateMenu(MenuDto menu);
void deleteMenuById(String id);
}
package cn.datax.service.system.service;
import cn.datax.service.system.api.dto.PostDto;
import cn.datax.service.system.api.entity.PostEntity;
import cn.datax.common.base.BaseService;
/**
* <p>
* 服务类
* </p>
*
* @author yuwei
* @since 2019-09-11
*/
public interface PostService extends BaseService<PostEntity> {
void savePost(PostDto post);
void updatePost(PostDto post);
void deletePostById(String id);
}
package cn.datax.service.system.service;
import cn.datax.common.base.BaseService;
import cn.datax.service.system.api.dto.RoleDto;
import cn.datax.service.system.api.entity.RoleEntity;
/**
* <p>
* 服务类
* </p>
*
* @author yuwei
* @since 2019-09-04
*/
public interface RoleService extends BaseService<RoleEntity> {
void saveRole(RoleDto role);
void updateRole(RoleDto role);
void deleteRoleById(String id);
}
package cn.datax.service.system.service;
import cn.datax.common.base.BaseService;
import cn.datax.service.system.api.dto.UserDto;
import cn.datax.service.system.api.entity.UserEntity;
/**
* <p>
* 服务类
* </p>
*
* @author yuwei
* @since 2019-09-04
*/
public interface UserService extends BaseService<UserEntity> {
void saveUser(UserDto user);
void updateUser(UserDto user);
void deleteUserById(String id);
}
package cn.datax.service.system.service.impl;
import cn.datax.service.system.api.dto.DeptDto;
import cn.datax.service.system.api.entity.DeptEntity;
import cn.datax.service.system.mapper.DeptMapper;
import cn.datax.service.system.service.DeptService;
import cn.datax.common.base.BaseServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
* <p>
* 服务实现类
* </p>
*
* @author yuwei
* @since 2019-09-04
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptEntity> implements DeptService {
@Override
@Transactional(rollbackFor = Exception.class)
public void saveDept(DeptDto deptDto) {
DeptEntity dept = new DeptEntity();
BeanUtils.copyProperties(deptDto, dept);
baseMapper.insert(dept);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateDept(DeptDto deptDto) {
DeptEntity dept = new DeptEntity();
BeanUtils.copyProperties(deptDto, dept);
baseMapper.updateById(dept);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteDeptById(String id) {
baseMapper.deleteById(id);
}
}
package cn.datax.service.system.service.impl;
import cn.datax.service.system.api.dto.MenuDto;
import cn.datax.service.system.api.entity.MenuEntity;
import cn.datax.service.system.mapper.MenuMapper;
import cn.datax.service.system.service.MenuService;
import cn.datax.common.base.BaseServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
* <p>
* 服务实现类
* </p>
*
* @author yuwei
* @since 2019-09-11
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class MenuServiceImpl extends BaseServiceImpl<MenuMapper, MenuEntity> implements MenuService {
@Override
@Transactional(rollbackFor = Exception.class)
public void saveMenu(MenuDto menuDto) {
MenuEntity menu = new MenuEntity();
BeanUtils.copyProperties(menuDto, menu);
baseMapper.insert(menu);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateMenu(MenuDto menuDto) {
MenuEntity menu = new MenuEntity();
BeanUtils.copyProperties(menuDto, menu);
baseMapper.updateById(menu);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteMenuById(String id) {
baseMapper.deleteById(id);
}
}
package cn.datax.service.system.service.impl;
import cn.datax.service.system.api.dto.PostDto;
import cn.datax.service.system.api.entity.PostEntity;
import cn.datax.service.system.mapper.PostMapper;
import cn.datax.service.system.service.PostService;
import cn.datax.common.base.BaseServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
* <p>
* 服务实现类
* </p>
*
* @author yuwei
* @since 2019-09-11
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class PostServiceImpl extends BaseServiceImpl<PostMapper, PostEntity> implements PostService {
@Override
@Transactional(rollbackFor = Exception.class)
public void savePost(PostDto postDto) {
PostEntity post = new PostEntity();
BeanUtils.copyProperties(postDto, post);
baseMapper.insert(post);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updatePost(PostDto postDto) {
PostEntity post = new PostEntity();
BeanUtils.copyProperties(postDto, post);
baseMapper.updateById(post);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deletePostById(String id) {
baseMapper.deleteById(id);
}
}
package cn.datax.service.system.service.impl;
import cn.datax.service.system.api.dto.RoleDto;
import cn.datax.service.system.api.entity.RoleEntity;
import cn.datax.service.system.mapper.RoleMapper;
import cn.datax.service.system.service.RoleService;
import cn.datax.common.base.BaseServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
* <p>
* 服务实现类
* </p>
*
* @author yuwei
* @since 2019-09-04
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleEntity> implements RoleService {
@Override
@Transactional(rollbackFor = Exception.class)
public void saveRole(RoleDto roleDto) {
RoleEntity role = new RoleEntity();
BeanUtils.copyProperties(roleDto, role);
baseMapper.insert(role);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateRole(RoleDto roleDto) {
RoleEntity role = new RoleEntity();
BeanUtils.copyProperties(roleDto, role);
baseMapper.updateById(role);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteRoleById(String id) {
baseMapper.deleteById(id);
}
}
package cn.datax.service.system.service.impl;
import cn.datax.service.system.api.dto.UserDto;
import cn.datax.service.system.api.entity.UserDeptEntity;
import cn.datax.service.system.api.entity.UserEntity;
import cn.datax.service.system.api.entity.UserPostEntity;
import cn.datax.service.system.api.entity.UserRoleEntity;
import cn.datax.service.system.mapper.UserDeptMapper;
import cn.datax.service.system.mapper.UserMapper;
import cn.datax.service.system.mapper.UserPostMapper;
import cn.datax.service.system.mapper.UserRoleMapper;
import cn.datax.service.system.service.UserService;
import cn.datax.common.base.BaseServiceImpl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 服务实现类
* </p>
*
* @author yuwei
* @since 2019-09-04
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserEntity> implements UserService {
@Autowired
private UserDeptMapper userDeptMapper;
@Autowired
private UserPostMapper userPostMapper;
@Autowired
private UserRoleMapper userRoleMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public void saveUser(UserDto userDto) {
UserEntity user = new UserEntity();
BeanUtils.copyProperties(userDto, user);
baseMapper.insert(user);
insertBatchRole(userDto, user);
insertBatchDept(userDto, user);
insertBatchPost(userDto, user);
}
private void insertBatchPost(UserDto userDto, UserEntity user) {
List<UserPostEntity> userPostList = userDto.getPosts()
.stream().map(postId -> {
UserPostEntity userPost = new UserPostEntity();
userPost.setUserId(user.getId());
userPost.setPostId(postId);
return userPost;
}).collect(Collectors.toList());
userPostMapper.insertBatch(userPostList);
}
private void insertBatchDept(UserDto userDto, UserEntity user) {
List<UserDeptEntity> userDeptList = userDto.getDepts()
.stream().map(deptId -> {
UserDeptEntity userDept = new UserDeptEntity();
userDept.setUserId(user.getId());
userDept.setDeptId(deptId);
return userDept;
}).collect(Collectors.toList());
userDeptMapper.insertBatch(userDeptList);
}
private void insertBatchRole(UserDto userDto, UserEntity user) {
List<UserRoleEntity> userRoleList = userDto.getRoles()
.stream().map(roleId -> {
UserRoleEntity userRole = new UserRoleEntity();
userRole.setUserId(user.getId());
userRole.setRoleId(roleId);
return userRole;
}).collect(Collectors.toList());
userRoleMapper.insertBatch(userRoleList);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateUser(UserDto userDto) {
UserEntity user = new UserEntity();
BeanUtils.copyProperties(userDto, user);
baseMapper.updateById(user);
userRoleMapper.delete(Wrappers.<UserRoleEntity>lambdaQuery()
.eq(UserRoleEntity::getUserId, userDto.getId()));
insertBatchRole(userDto, user);
userDeptMapper.delete(Wrappers.<UserDeptEntity>lambdaQuery()
.eq(UserDeptEntity::getUserId, userDto.getId()));
insertBatchDept(userDto, user);
userPostMapper.delete(Wrappers.<UserPostEntity>lambdaQuery()
.eq(UserPostEntity::getUserId, userDto.getId()));
insertBatchPost(userDto, user);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteUserById(String id) {
baseMapper.deleteById(id);
}
}
package cn.datax.system.controller;
import cn.datax.common.base.BaseController;
import org.springframework.web.bind.annotation.*;
import java.security.Principal;
/**
* <p>
* 前端控制器
* </p>
*
* @author yuwei
* @since 2019-09-04
*/
@RestController
@RequestMapping("/user")
public class UserController extends BaseController {
@GetMapping("/token")
public Principal currentUser(Principal principal) {
return principal;
}
}
<?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="cn.datax.service.system.mapper.DeptMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.datax.service.system.api.entity.DeptEntity">
<result column="id" property="id" />
<result column="deleted" property="deleted" />
<result column="create_by" property="createBy" />
<result column="create_time" property="createTime" />
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="parent_id" property="parentId" />
<result column="dept_name" property="deptName" />
<result column="status" property="status" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id,
deleted,
create_by,
create_time,
update_by,
update_time,
parent_id, dept_name, status
</sql>
</mapper>
<?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="cn.datax.service.system.mapper.MenuMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.datax.service.system.api.entity.MenuEntity">
<result column="id" property="id" />
<result column="deleted" property="deleted" />
<result column="create_by" property="createBy" />
<result column="create_time" property="createTime" />
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="parent_id" property="parentId" />
<result column="menu_name" property="menuName" />
<result column="menu_path" property="menuPath" />
<result column="menu_component" property="menuComponent" />
<result column="menu_perms" property="menuPerms" />
<result column="menu_icon" property="menuIcon" />
<result column="menu_type" property="menuType" />
<result column="menu_sort" property="menuSort" />
<result column="status" property="status" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id,
deleted,
create_by,
create_time,
update_by,
update_time,
parent_id, menu_name, menu_path, menu_component, menu_perms, menu_icon, menu_type, menu_sort, status
</sql>
</mapper>
<?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="cn.datax.service.system.mapper.PostMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.datax.service.system.api.entity.PostEntity">
<result column="id" property="id" />
<result column="deleted" property="deleted" />
<result column="create_by" property="createBy" />
<result column="create_time" property="createTime" />
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="post_name" property="postName" />
<result column="status" property="status" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id,
deleted,
create_by,
create_time,
update_by,
update_time,
post_name, status
</sql>
</mapper>
<?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="cn.datax.service.system.mapper.RoleMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.datax.service.system.api.entity.RoleEntity">
<result column="id" property="id" />
<result column="deleted" property="deleted" />
<result column="create_by" property="createBy" />
<result column="create_time" property="createTime" />
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="role_name" property="roleName" />
<result column="role_code" property="roleCode" />
<result column="status" property="status" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id,
deleted,
create_by,
create_time,
update_by,
update_time,
role_name, role_code, status
</sql>
</mapper>
<?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="cn.datax.service.system.mapper.RoleMenuMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.datax.service.system.api.entity.RoleMenuEntity">
<result column="id" property="id" />
<result column="role_id" property="roleId" />
<result column="menu_id" property="menuId" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id,
role_id, menu_id
</sql>
<insert id="insertBatch" parameterType="java.util.List">
INSERT INTO sys_role_menu
(id, role_id, menu_id)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.id}, #{item.roleId}, #{item.menuId})
</foreach>
</insert>
</mapper>
<?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="cn.datax.service.system.mapper.UserDeptMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.datax.service.system.api.entity.UserDeptEntity">
<result column="id" property="id" />
<result column="user_id" property="userId" />
<result column="dept_id" property="deptId" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id,
user_id, dept_id
</sql>
<insert id="insertBatch" parameterType="java.util.List">
INSERT INTO sys_user_dept
(id, user_id, dept_id)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.id}, #{item.userId}, #{item.deptId})
</foreach>
</insert>
</mapper>
<?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="cn.datax.service.system.mapper.UserMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.datax.service.system.api.entity.UserEntity">
<result column="id" property="id" />
<result column="deleted" property="deleted" />
<result column="create_by" property="createBy" />
<result column="create_time" property="createTime" />
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="username" property="username" />
<result column="nickname" property="nickname" />
<result column="password" property="password" />
<result column="email" property="email" />
<result column="phone" property="phone" />
<result column="birthday" property="birthday" />
<result column="status" property="status" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id,
deleted,
create_by,
create_time,
update_by,
update_time,
username, nickname, password, email, phone, birthday, status
</sql>
</mapper>
<?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="cn.datax.service.system.mapper.UserPostMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.datax.service.system.api.entity.UserPostEntity">
<result column="id" property="id" />
<result column="user_id" property="userId" />
<result column="post_id" property="postId" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id,
user_id, post_id
</sql>
<insert id="insertBatch" parameterType="java.util.List">
INSERT INTO sys_user_post
(id, user_id, post_id)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.id}, #{item.userId}, #{item.postId})
</foreach>
</insert>
</mapper>
<?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="cn.datax.service.system.mapper.UserRoleMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.datax.service.system.api.entity.UserRoleEntity">
<result column="id" property="id" />
<result column="user_id" property="userId" />
<result column="role_id" property="roleId" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id,
user_id, role_id
</sql>
<insert id="insertBatch" parameterType="java.util.List">
INSERT INTO sys_user_role
(id, user_id, role_id)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.id}, #{item.userId}, #{item.roleId})
</foreach>
</insert>
</mapper>
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>datax-tools</artifactId>
<groupId>cn.datax</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>datax-tool-codegen</artifactId>
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>${velocity.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package cn.datax.service.codegen;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DataxCodeGenApplication {
public static void main(String[] args) {
SpringApplication.run(DataxCodeGenApplication.class);
}
}
package cn.datax.service.codegen.utils;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import java.util.ArrayList;
import java.util.List;
public class CodeGenerator {
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = "F://code";
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("yuwei");
// 是否打开输出目录
gc.setOpen(true);
// 是否覆盖已有文件
gc.setFileOverride(true);
// 开启 ActiveRecord 模式
gc.setActiveRecord(false);
// 开启 BaseResultMap
gc.setBaseResultMap(true);
// 开启 baseColumnList
gc.setBaseColumnList(true);
gc.setEntityName("%sEntity");
gc.setMapperName("%sMapper");
gc.setXmlName("%sMapper");
gc.setServiceName("%sService");
gc.setServiceImplName("%sServiceImpl");
gc.setControllerName("%sController");
// 实体属性 Swagger2 注解
gc.setSwagger2(false);
// 指定生成的主键的ID类型
gc.setIdType(IdType.ID_WORKER_STR);
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/data_cloud?useUnicode=true&useSSL=false&characterEncoding=utf8");
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("1234@abcd");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("cn.datax.service");
// 父包模块名
pc.setModuleName("system");
mpg.setPackageInfo(pc);
// 自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
// 如果模板引擎是 velocity
String templatePath = "/templates/mapper.xml.vm";
// 自定义输出配置
List<FileOutConfig> focList = new ArrayList<>();
// 自定义配置会被优先输出
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
/*
cfg.setFileCreate(new IFileCreate() {
@Override
public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
// 判断自定义文件夹是否需要创建
checkDir("调用默认方法创建的目录");
return false;
}
});
*/
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
// 配置自定义输出模板
//指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
templateConfig.setEntity("templates/entity.java");
templateConfig.setController("templates/controller.java");
templateConfig.setService("templates/service.java");
templateConfig.setServiceImpl("templates/serviceImpl.java");
templateConfig.setMapper("templates/mapper.java");
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setSuperEntityClass("cn.datax.common.base.BaseEntity");
// 写于父类中的公共字段
strategy.setSuperEntityColumns(new String[]{"id", "create_time", "create_by", "update_time", "update_by", "status", "deleted"});
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
// 公共父类
strategy.setSuperControllerClass("cn.datax.common.base.BaseController");
strategy.setSuperServiceClass("cn.datax.common.base.BaseService");
strategy.setSuperServiceImplClass("cn.datax.common.base.BaseServiceImpl");
strategy.setSuperMapperClass("cn.datax.common.base.BaseDao");
strategy.setControllerMappingHyphenStyle(true);
strategy.setTablePrefix("sys_");
strategy.setInclude(new String[]{"sys_user", "sys_role", "sys_dept", "sys_menu", "sys_post", "sys_user_role", "sys_user_dept", "sys_user_post", "sys_role_menu"});
// strategy.setInclude(new String[]{"tbl_file"});
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new VelocityTemplateEngine());
mpg.execute();
}
}
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>datax-cloud</artifactId>
<groupId>cn.datax</groupId>
<version>1.0.0</version>
</parent>
<packaging>pom</packaging>
<modelVersion>4.0.0</modelVersion>
<artifactId>datax-tools</artifactId>
<modules>
<module>datax-tool-codegen</module>
</modules>
</project>
\ No newline at end of file
...@@ -45,6 +45,7 @@ ...@@ -45,6 +45,7 @@
<module>datax-gateway</module> <module>datax-gateway</module>
<module>datax-auth</module> <module>datax-auth</module>
<module>datax-modules</module> <module>datax-modules</module>
<module>datax-tools</module>
</modules> </modules>
<dependencies> <dependencies>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment