SSM6.3【Spring:练习-用户列表展示、用户添加和删除操作】
用户列表展示
用户添加
用户删除
代码实现
1 package com.haifei.domain; 2 3 import java.util.List; 4 5 public class User { 6 7 private Long id; 8 private String username; 9 private String email; 10 private String password; 11 private String phoneNum; 12 13 private List<Role> roles; //当前用户具备哪些角色 14 public List<Role> getRoles() { 15 return roles; 16 } 17 public void setRoles(List<Role> roles) { 18 this.roles = roles; 19 } 20 21 @Override 22 public String toString() { 23 return "User{" + 24 "id=" + id + 25 ", username='" + username + '\'' + 26 ", email='" + email + '\'' + 27 ", password='" + password + '\'' + 28 ", phoneNum='" + phoneNum + '\'' + 29 '}'; 30 } 31 32 public Long getId() { 33 return id; 34 } 35 36 public void setId(Long id) { 37 this.id = id; 38 } 39 40 public String getUsername() { 41 return username; 42 } 43 44 public void setUsername(String username) { 45 this.username = username; 46 } 47 48 public String getEmail() { 49 return email; 50 } 51 52 public void setEmail(String email) { 53 this.email = email; 54 } 55 56 public String getPassword() { 57 return password; 58 } 59 60 public void setPassword(String password) { 61 this.password = password; 62 } 63 64 public String getPhoneNum() { 65 return phoneNum; 66 } 67 68 public void setPhoneNum(String phoneNum) { 69 this.phoneNum = phoneNum; 70 } 71 }
1 pom.xml 2 3 + 4 5 <!--配置UserDao--> 6 <bean id="userDao" class="com.haifei.dao.impl.UserDaoImpl"> 7 <property name="template" ref="jdbcTemplate"/> 8 </bean> 9 10 <!--配置UserService--> 11 <bean id="userService" class="com.haifei.service.impl.UserServiceImpl"> 12 <property name="userDao" ref="userDao"/> 13 <property name="roleDao" ref="roleDao"/> 14 </bean>
1 package com.haifei.controller; 2 3 import com.haifei.dao.UserDao; 4 import com.haifei.domain.Role; 5 import com.haifei.domain.User; 6 import com.haifei.service.RoleService; 7 import com.haifei.service.UserService; 8 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.stereotype.Controller; 10 import org.springframework.web.bind.annotation.PathVariable; 11 import org.springframework.web.bind.annotation.RequestMapping; 12 import org.springframework.web.servlet.ModelAndView; 13 14 import java.util.List; 15 16 @RequestMapping("/user") 17 @Controller 18 public class UserController { 19 20 @Autowired 21 private UserService userService; 22 23 @Autowired 24 private RoleService roleService; 25 26 @RequestMapping("/list") 27 public ModelAndView list(){ 28 ModelAndView modelAndView = new ModelAndView(); 29 List<User> userList = userService.list(); 30 modelAndView.addObject("userList", userList); 31 modelAndView.setViewName("user-list"); 32 return modelAndView; 33 } 34 35 @RequestMapping("/add") //saveUI 36 public ModelAndView add(){ 37 ModelAndView modelAndView = new ModelAndView(); 38 List<Role> roleList = roleService.list(); 39 modelAndView.addObject("roleList", roleList); 40 modelAndView.setViewName("user-add"); 41 return modelAndView; 42 } 43 44 @RequestMapping("/save") //save.do 45 public String save(User user, Long[] roleIds){ 46 userService.save(user, roleIds); 47 return "redirect:/user/list"; 48 } 49 50 @RequestMapping("/del/{userId}") //restful风格传参,参数占位 51 public String del(@PathVariable("userId") Long userId){ 52 userService.del(userId); 53 return "redirect:/user/list"; 54 } 55 56 }
1 package com.haifei.service; 2 3 import com.haifei.domain.User; 4 5 import java.util.List; 6 7 public interface UserService { 8 9 List<User> list(); 10 11 void save(User user, Long[] roleIds); 12 13 void del(Long userId); 14 }
1 package com.haifei.service.impl; 2 3 import com.haifei.dao.RoleDao; 4 import com.haifei.dao.UserDao; 5 import com.haifei.domain.Role; 6 import com.haifei.domain.User; 7 import com.haifei.service.UserService; 8 9 import java.util.List; 10 11 public class UserServiceImpl implements UserService { 12 13 private UserDao userDao; 14 public void setUserDao(UserDao userDao) { 15 this.userDao = userDao; 16 } 17 18 private RoleDao roleDao; 19 public void setRoleDao(RoleDao roleDao) { 20 this.roleDao = roleDao; 21 } 22 23 @Override 24 public List<User> list() { 25 // return userDao.findAll(); 26 27 List<User> userList = userDao.findAll(); 28 //封装userList中每一个User对象user的roles信息 29 for (User user : userList) { 30 //获取user的id 31 Long id = user.getId(); 32 //将id作为参数,查询当前UserId对应的Role集合数据 33 List<Role> roles = roleDao.findRoleByUserId(id); 34 user.setRoles(roles); 35 } 36 return userList; 37 } 38 39 @Override 40 public void save(User user, Long[] roleIds) { 41 /*//1 向sys_user表中存储数据 42 userDao.save(user); 43 //2 向sys_user_role关系表中存储多条数据 44 userDao.saveUserRoleRelation(user.getId(), roleIds); //user.getId()为空,报错空指针异常*/ 45 46 //1 向sys_user表中存储数据 47 Long userId = userDao.save(user); 48 //2 向sys_user_role关系表中存储多条数据 49 userDao.saveUserRoleRelation(userId, roleIds); 50 51 //后面待学习的声明性事务锁可应用于此处 52 } 53 54 @Override 55 public void del(Long userId) { //先删除user会报错,因为user的id是外键,即关系表的主键之一 56 //1 删除sys_user_role关系表中userId对应的数据 57 userDao.delUserRoleRelation(userId); 58 //2 删除sys_user表中user信息 59 userDao.del(userId); 60 61 //后面待学习的声明性事务锁可应用于此处 62 } 63 }
1 package com.haifei.dao; 2 3 import com.haifei.domain.User; 4 5 import java.util.List; 6 7 public interface UserDao { 8 9 List<User> findAll(); 10 11 Long save(User user); 12 13 void saveUserRoleRelation(Long id, Long[] roleIds); 14 15 void delUserRoleRelation(Long userId); 16 17 void del(Long userId); 18 }
1 package com.haifei.dao.impl; 2 3 import com.haifei.dao.UserDao; 4 import com.haifei.domain.User; 5 import org.springframework.jdbc.core.BeanPropertyRowMapper; 6 import org.springframework.jdbc.core.JdbcTemplate; 7 import org.springframework.jdbc.core.PreparedStatementCreator; 8 import org.springframework.jdbc.support.GeneratedKeyHolder; 9 10 import java.sql.Connection; 11 import java.sql.PreparedStatement; 12 import java.sql.SQLException; 13 import java.util.List; 14 15 public class UserDaoImpl implements UserDao { 16 17 private JdbcTemplate template; 18 public void setTemplate(JdbcTemplate template) { 19 this.template = template; 20 } 21 22 @Override 23 public List<User> findAll() { 24 String sql = "select * from sys_user;"; 25 List<User> userList = template.query(sql, new BeanPropertyRowMapper<User>(User.class)); 26 return userList; 27 } 28 29 /*@Override 30 public void save(User user) { 31 String sql = "insert into sys_user values (?,?,?,?,?)"; 32 template.update(sql, null,user.getUsername(), user.getEmail(), user.getPassword(), user.getPhoneNum()); 33 }*/ 34 @Override 35 public Long save(User user) { 36 //1 创建PreparedStatementCreator 37 PreparedStatementCreator creator = new PreparedStatementCreator() { //匿名内部类 实现PreparedStatementCreator接口 38 @Override 39 public PreparedStatement createPreparedStatement(Connection connection) throws SQLException { 40 //使用原始jdbc完成有个PreparedStatement的组建 41 String sql = "insert into sys_user values (?,?,?,?,?)"; 42 PreparedStatement preparedStatement = connection.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS); 43 preparedStatement.setObject(1, null); 44 preparedStatement.setString(2, user.getUsername()); 45 preparedStatement.setString(3, user.getEmail()); 46 preparedStatement.setString(4, user.getPassword()); 47 preparedStatement.setString(5, user.getPhoneNum()); 48 return preparedStatement; 49 } 50 }; 51 52 //2 创建keyHolder 53 GeneratedKeyHolder keyHolder = new GeneratedKeyHolder(); 54 55 template.update(creator, keyHolder); //int update(PreparedStatementCreator var1, KeyHolder var2) 56 57 //3 获得生成的主键 58 long userId = keyHolder.getKey().longValue(); 59 60 return userId; //返回当前保存用户的id 该id是数据库自动生成的 61 } 62 63 @Override 64 public void saveUserRoleRelation(Long userId, Long[] roleIds) { 65 String sql = "insert into sys_user_role values (?,?)"; 66 for (Long roleId : roleIds) { 67 template.update(sql, userId, roleId); 68 } 69 } 70 71 @Override 72 public void delUserRoleRelation(Long userId) { 73 String sql = "delete from sys_user_role where userId=?"; 74 template.update(sql, userId); 75 } 76 77 @Override 78 public void del(Long userId) { 79 String sql = "delete from sys_user where id=?"; 80 template.update(sql, userId); 81 } 82 83 }
1 RoleDao 2 3 + 4 5 List<Role> findRoleByUserId(Long id);
1 RoleDaoImpl 2 3 + 4 5 @Override 6 public List<Role> findRoleByUserId(Long id) { 7 String sql = "select * from sys_user_role ur,sys_role r where ur.roleId=r.id and ur.userId=?"; 8 List<Role> roles = template.query(sql, new BeanPropertyRowMapper<Role>(Role.class), id); 9 return roles; 10 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!