
package edu.friday.model.vo;import com.fasterxml.jackson.annotation.JsonFormat;import com.fasterxml.jackson.annotation.JsonProperty;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import javax.validation.constraints.Email;import javax.validation.constraints.NotBlank;import javax.validation.constraints.Size;import java.io.Serializable;import java.util.Date;@Data@NoArgsConstructor@AllArgsConstructorpublic class SysUserVo implements Serializable {//作用是序列化时保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。private static final long serialVersionUID = 1L;private Long userId;@NotBlank(message = "用户账号不能为空")@Size(min = 0,max = 30,message = "用户账号长度不能超过30个字符")private String userName;@Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")private String nickName;@Email(message = "邮箱格式不正确")@Size(min = 0,max = 50,message = "邮箱长度不能超过50个字符")private String email;@Size(min = 0,max = 11,message = "手机号码长度不能超过11个字符")private String phonenumber;private String sex;private String userType;private String avatar;@JsonPropertyprivate String password;private String salt;private String status;private String delFlag;private String loginIp;private Date loginDate;private String createBy;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date createTime;private String updateBy;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date updateTime;private String remark;public SysUserVo(Long userId) {this.userId = userId;}public boolean isAdmin(){return isAdmin(this.userId);}public static boolean isAdmin(Long userId){return userId != null && userId == 1L;}}
<!-- 数据验证所需 --><dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>2.0.1.Final</version></dependency>

/*** 用户列表(模糊查询username,phonenumber/分页)* */@GetMapping("/listPage")public TableDataInfo list2(SysUserVo user, Pageable page){int pageNum = page.getPageNumber() - 1;pageNum = Math.max(0, pageNum);page = PageRequest.of(pageNum,page.getPageSize());return sysUserService.selectUserList2(user, page);}

/*** 用户表 业务层接口* */public interface SysUserService {List<SysUser> selectUserList();TableDataInfo selectUserList2(SysUserVo user, Pageable page);}
/*** 用户表 业务层* */@Servicepublic class SysUserServiceImpl implements SysUserService {@AutowiredSysUserRepository sysUserRepository;/*** 显示所有用户列表* */@Overridepublic List<SysUser> selectUserList() {return sysUserRepository.findAll();}/*** 用户列表(模糊查询 + 分页)* */@Overridepublic TableDataInfo selectUserList2(SysUserVo user, Pageable page) {SysUser sysUser = new SysUser();BeanUtils.copyPropertiesIgnoreEmpty(user, sysUser);// sysUser.setDelFlag("0");ExampleMatcher exampleMatcher = ExampleMatcher.matching().withMatcher("userName",ExampleMatcher.GenericPropertyMatchers.contains()).withMatcher("phonenumber",ExampleMatcher.GenericPropertyMatchers.contains()).withMatcher("status",ExampleMatcher.GenericPropertyMatchers.contains());Example<SysUser> example = Example.of(sysUser,exampleMatcher);Page<SysUser> rs = sysUserRepository.findAll(example,page);return TableDataInfo.success(rs.toList(),rs.getTotalElements());}}






/*** 新增用户* */@PostMappingpublic RestResult add(@RequestBody SysUserVo user){if(UserConstants.NOT_UNIQUE.equals(sysUserService.checkUserNameUnique(user.getUserName()))){return RestResult.error("新增用户'"+user.getUserName()+"'失败,登录账号已存在");} else if(UserConstants.NOT_UNIQUE.equals(sysUserService.checkPhoneUnique(user))){return RestResult.error("新增用户'"+user.getUserName()+"'失败,手机号码已存在");} else if(UserConstants.NOT_UNIQUE.equals(sysUserService.checkEmailUnique(user))){return RestResult.error("新增用户'"+user.getUserName()+"'失败,邮箱账号已存在");}user.setCreateBy("system");boolean flag = sysUserService.insertUser(user);return toAjax(flag?1:0);//extends BaseController}

/*** 用户表 业务层接口* */public interface SysUserService {List<SysUser> selectUserList();TableDataInfo selectUserList2(SysUserVo user, Pageable page);String checkUserNameUnique(String userName);String checkPhoneUnique(SysUserVo userInfo);String checkEmailUnique(SysUserVo userInfo);boolean insertUser(SysUserVo user);}
/*** 用户表 业务层* */@Servicepublic class SysUserServiceImpl implements SysUserService {@Overridepublic String checkUserNameUnique(String userName) {SysUser sysUser = new SysUser();sysUser.setUserName(userName);return count(sysUser);}@Overridepublic String checkPhoneUnique(SysUserVo userInfo) {SysUser user = new SysUser();// BeanUtils.copyProperties(userInfo,user);user.setUserId(userInfo.getUserId());user.setPhonenumber(userInfo.getPhonenumber());return checkUnique(user);}@Overridepublic String checkEmailUnique(SysUserVo userInfo) {SysUser user = new SysUser();// BeanUtils.copyProperties(userInfo,user);user.setUserId(userInfo.getUserId());user.setEmail(userInfo.getEmail());return checkUnique(user);}public String count(SysUser sysUser){Example<SysUser> example = Example.of(sysUser);long count = sysUserRepository.count(example);if(count > 0){return UserConstants.NOT_UNIQUE;}return UserConstants.UNIQUE;}public String checkUnique(SysUser user){Long userId = StringUtils.isNull(user.getUserId())?-1L:user.getUserId();Example<SysUser> example = Example.of(user);SysUser info = findOne(example);System.out.println(info);if(StringUtils.isNotNull(info) &&info.getUserId().longValue() != userId.longValue()){return UserConstants.NOT_UNIQUE;}return UserConstants.UNIQUE;}public SysUser findOne(Example<SysUser> example){List<SysUser> list = sysUserRepository.findAll(example,PageRequest.of(0,1)).toList();if(list.isEmpty()){return null;}return list.get(0);}}

/*** @Transactional 注解相信大家并不陌生,平时开发中很常用的一个注解,它能保证方法内多个数据库操作要么同时成功、要么同时失败。* */@Override@Transactionalpublic boolean insertUser(SysUserVo user) {SysUser sysUser = new SysUser();BeanUtils.copyProperties(user,sysUser);sysUser.setDelFlag("0");// 新增用户信息sysUserRepository.save(sysUser);user.setUserId(sysUser.getUserId());// 新增用户与角色管理insertUserRole(user);return null != sysUser.getUserId();}/*** 新增用户角色信息** @param user 用户信息* */public int insertUserRole(SysUserVo user){Long[] roles = user.getRoleIds();if(StringUtils.isNull(roles) || roles.length == 0){return 0;}Long[] userIds = new Long[roles.length];Arrays.fill(userIds,user.getUserId());return sysUserRepository.batchInsertUserRole(userIds,roles);}

public class SysUserCustomRepositoryImpl implements SysUserCustomRepository {// 用于与持久性上下文(数据库)进行交互。// 更为特定于JPA,通常在JPA或Hibernate等ORM框架的应用中使用。@PersistenceContextprivate EntityManager entityManager;@Overridepublic int batchInsertUserRole(Long[] userIds, Long[] roles) {int length = Math.min(userIds.length,roles.length);StringBuffer sql = new StringBuffer();sql.append(" insert into sys_user_role(user_id, role_id) values ");sql.append(SqlUtil.getBatchInsertSqlStr(length,2));Query query = entityManager.createNativeQuery(sql.toString());int paramIndex = 1;for (int i = 0; i < length; i++) {query.setParameter(paramIndex++,userIds[i]);query.setParameter(paramIndex++,roles[i]);}return query.executeUpdate();}}
(1)账号已存在
(2)手机号已存在
(3)邮箱已存在
(4)添加成功
数据表生成对应数据



Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号