| # 持久层接口 |
| public interface SysUserMapper extends BaseMapper<SysUser> { |
| |
| /** |
| * 分页查询 |
| * @param page |
| * @param sysUser |
| * @return |
| */ |
| IPage<SysUser> selectPage(Page<SysUser> page, @Param("u") SysUser sysUser); |
| |
| } |
| |
| # 持久层映射 |
| <!DOCTYPE mapper |
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" |
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| <mapper namespace="com.ychen.security.mapper.SysUserMapper"> |
| |
| <select id="selectPage" resultType="SysUser"> |
| SELECT |
| `id`, |
| `username`, |
| `password`, |
| `is_account_non_expired`, |
| `is_account_non_locked`, |
| `is_credentials_non_expired`, |
| `is_enabled`, |
| `nick_name`, |
| `mobile`, |
| `email`, |
| `create_date`, |
| `update_date` |
| FROM |
| sys_user |
| WHERE `is_enabled` = 1 |
| <if test="u.username != null and u.username !=''"> |
| AND username LIKE CONCAT('%', #{u.username}, '%') |
| </if> |
| |
| <if test="u.mobile != null and u.mobile !=''"> |
| AND mobile = ${u.mobile} |
| </if> |
| </select> |
| |
| </mapper> |
| |
| # 业务层接口 |
| public interface SysUserService extends IService<SysUser> { |
| |
| /** |
| * 分页查询用户信息 |
| * @param page 分页对象 |
| * @param sysUser 查询条件 |
| * @return |
| */ |
| IPage<SysUser> selectPage(Page<SysUser> page, SysUser sysUser); |
| |
| } |
| |
| # 业务层实现 |
| @Service |
| public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService { |
| |
| @Override |
| public IPage<SysUser> selectPage(Page<SysUser> page, SysUser sysUser) { |
| return baseMapper.selectPage(page, sysUser); |
| } |
| |
| } |
| |
| # 控制层接口 |
| @Controller |
| @RequestMapping("/user") |
| public class SysUserController { |
| |
| @Autowired |
| private SysUserService sysUserService; |
| |
| /** |
| * 分页查询用户列表 |
| * @param page 分页对象: size, current |
| * @param sysUser 查询条件 : username, mobile |
| * @return |
| */ |
| @PreAuthorize("hasAuthority('sys:user:list')") |
| @GetMapping("/page") |
| @ResponseBody |
| public MengxueguResult page(Page<SysUser> page, SysUser sysUser) { |
| return MengxueguResult.ok(sysUserService.selectPage(page, sysUser)); |
| } |
| |
| } |
| # 控制层接口 |
| @Autowired |
| private SysRoleService sysRoleService; |
| |
| @PreAuthorize("hasAnyAuthority('sys:user:add', 'sys:user:edit')") |
| @GetMapping(value={"/form", "/form/{id}"}) |
| public String form(@PathVariable(required = false) Long id, Model model) { |
| |
| SysUser user = sysUserService.findById(id); |
| model.addAttribute("user", user); |
| |
| List<SysRole> roleList = sysRoleService.list(); |
| model.addAttribute("roleList", roleList); |
| return HTML_PREFIX + "user-form"; |
| } |
| |
| # 业务层接口 |
| |
| |
| |
| |
| |
| |
| SysUser findById(Long id); |
| |
| # 业务层实现 |
| @Autowired |
| SysRoleMapper sysRoleMapper; |
| |
| |
| |
| |
| |
| |
| |
| @Override |
| public SysUser findById(Long id) { |
| if(id == null) { |
| return new SysUser(); |
| } |
| |
| SysUser sysUser = baseMapper.selectById(id); |
| |
| List<SysRole> roleList = sysRoleMapper.findByUserId(id); |
| sysUser.setRoleList(roleList); |
| return sysUser; |
| } |
| |
| # 角色持久层接口 |
| |
| |
| |
| |
| |
| List<SysRole> findByUserId(@Param("userId")Long userId); |
| |
| # 角色持久层映射 |
| <select id="findByUserId" resultType="SysRole"> |
| SELECT |
| r.* |
| FROM |
| sys_role r |
| JOIN sys_user_role ur ON r.id = ur.role_id |
| JOIN sys_user u ON ur.user_id = u.id |
| WHERE |
| u.id = #{userId} |
| </select> |
| # 持久层接口 |
| |
| |
| |
| |
| |
| boolean deleteUserRoleByUserId(@Param("userId") Long userId); |
| |
| |
| |
| |
| |
| |
| |
| boolean saveUserRole(@Param("userId") Long userId,@Param("roleIds") List<Long> roleIds); |
| |
| # 持久层映射 |
| <!--通过用户id删除用户角色关系表数据--> |
| <delete id="deleteUserRoleByUserId"> |
| DELETE FROM sys_user_role where user_id = #{userId} |
| </delete> |
| |
| <insert id="saveUserRole"> |
| INSERT INTO sys_user_role(user_id, role_id) VALUES |
| <foreach collection="roleIds" item="item" index="index" separator=","> |
| (#{userId}, #{item}) |
| </foreach> |
| </insert> |
| |
| # 业务层实现,重写saveOrUpdate方法 |
| @Transactional |
| @Override |
| public boolean saveOrUpdate(SysUser entity) { |
| if(entity != null && entity.getId() == null) { |
| |
| entity.setPassword(PASSWORD_DEFAULT); |
| } |
| entity.setUpdateDate(new Date()); |
| |
| boolean flag = super.saveOrUpdate(entity); |
| if(flag) { |
| |
| baseMapper.deleteUserRoleByUserId(entity.getId()); |
| |
| if(CollectionUtils.isNotEmpty(entity.getRoleIds())) { |
| baseMapper.saveUserRole(entity.getId(), entity.getRoleIds()); |
| } |
| } |
| return true; |
| } |
| |
| # 控制层接口 |
| @PreAuthorize("hasAnyAuthority('sys:user:add', 'sys:user:edit')") |
| @RequestMapping(method = {RequestMethod.POST, RequestMethod.PUT}, value = "") |
| public String saveOrUpdate(SysUser sysUser) { |
| |
| sysUserService.saveOrUpdate(sysUser); |
| return "redirect:/user"; |
| } |
| # 业务层接口 |
| boolean deleteById(Long id); |
| |
| # 业务层实现 |
| @Override |
| public boolean deleteById(Long id) { |
| |
| SysUser sysUser = baseMapper.selectById(id); |
| |
| sysUser.setEnabled(false); |
| sysUser.setUpdateDate(new Date()); |
| baseMapper.updateById(sysUser); |
| return true; |
| } |
| |
| # 控制层接口 |
| @PreAuthorize("hasAuthority('sys:user:delete')") |
| @DeleteMapping("/{id}") |
| public MengxueguResult deleteById(@PathVariable Long id) { |
| |
| sysUserService.deleteById(id); |
| return MengxueguResult.ok(); |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?