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     }
复制代码

 

posted @   yub4by  阅读(258)  评论(0编辑  收藏  举报
编辑推荐:
· 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 让容器管理更轻松!
点击右上角即可分享
微信分享提示