springMVC-Day06(项目)

springMVC-Day06(项目)

  1. 千万注意 这里是ref (ref="dataResource"></property>)

        <!--1、加载jdbc.properties-->
         <context:property-placeholder location="classpath:jdbc.properties"/>
    ​
    <!--2、配置数据源对象-->
    <bean id="dataResource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    ​
    <!--配置jdbcTempe对象-->
    <bean id="jdbcTemplate"  class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataResource"></property>
    </bean>
  2. 这是用来for循环的

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

Role功能代码

首先分析Role 有哪些功能

  1. Role 可以同时是多个人的身份,而且每个人也可以是什么身份都没有,一个人也可以具有多重身份

    • 我们需要实现的功能有

      • 一:查找所有的数据,并且将他排列在role客户页面

      • 二:增加role,然后跳转到role客户页面

      • 三:删除role,然后跳转到role客户页面

    • 我们需要建立的包有

      • RoleDao,RoleService,RoleController 以及他们的实现类

    • 采用,controller类用注解方式获取上下文,其余用<Bean来注入,配置的方式来获取

    • 第一步,导入坐标

    • 第二步,配置appilicationContext.xl (注册驱动,配置jdbcteample,数据库的数据源对象,获取数据库资源等)

    • 第三步:配置web.xml, (前端控制器, 多滤器,全局初始化参数,监听器)

  2. 第一步: 先创建两个对象Role 和User 并且给出 dddd

  3. 第二步:在Rolecontroller类中,开始查询

    p@RequestMapping("/role")
    @Controller
    public class RoleController {
          //要调用service方法,首先要注入service
        @Resource
        private RoleService roleService;
          //查询role
           @RequestMapping("/list")
        public ModelAndView roleList(){
             ModelAndView modelAndView = new ModelAndView();
              //这里调用service方法
    ​
            List<Role> roleList = roleService.roleList();
            //模型数据保存
            modelAndView.addObject("roleList",roleList);
            //定义视图名字(跳转页面的名字)
            modelAndView.setViewName("role-list");
             return modelAndView;
         }
    ​
         //增加role
         @RequestMapping("/save")
         public String roleSave(Role role){
              //还是调用service层
                 roleService.roleSave(role);
              return "redirect:/role/list"; //重定向回到/role/list
         }
    ​
         @RequestMapping("/delete")
         //删除role
        public String roleDelete(long id){
               roleService.deleteById(id);
    ​
           return "redirect:/role/list";
        }
    ​
    }
    ​
  4. 第三步:RoleService层

    public class RoleServiceImpl implements RoleService {
    ​
        //注入Dao层
        private RoleDao roleDao;
    ​
        public void setRoleDao(RoleDao roleDao) {
            this.roleDao = roleDao;
        }
    ​
        @Override
        public List<Role> roleList() {
            //这里要调用Dao层
            List<Role>  roleList =  roleDao.FindAll();
            return roleList;
        }
    ​
        @Override
           public void roleSave(Role role) {
            //还是调用Dao层
             roleDao.saveForOne(role);
        }
    ​
        @Override
        public void deleteById(long id) {
             roleDao.deleteById(id);
        }
    ​
    }
  5. 第四步:RoleDao层

    public class RoleDaoImpl implements RoleDao {
         private JdbcTemplate jdbcTemplate;
    ​
        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }
    ​
        @Override
        public List<Role> FindAll() {
            List<Role> query = jdbcTemplate.query("select * from sys_role", new BeanPropertyRowMapper<Role>(Role.class));
    ​
            return query;
        }
    ​
        @Override
        public void saveForOne(Role role) {
             jdbcTemplate.update("insert into sys_role(roleName,roleDesc)values(?,?)",role.getRoleName(),role.getRoleDesc());
        }
    ​
        @Override
        public void deleteById(long id) {
            jdbcTemplate.update("delete from sys_role where id=?",id);
        }
    ​
        @Override
        public List<Role> queryRolesById(Long id) {
            List<Role> roleList = jdbcTemplate.query("  select * from sys_user_role ur join sys_role r where ur.roleId=r.id and ur.userId=?"
                    , new BeanPropertyRowMapper<Role>(Role.class), id);
            return roleList;
        }
    }

User功能的实现

  1. 和Role功能差不多,唯一的区别是 User功能需要有role的参与,且一个人可以有多个role, 于是我们在user类中将List《Role》作为属性,并且给出set get方法 ,增加, 查询,代码差不多 但是注意Role的引入,因为我们user表没有Role 所以,需要通过role表来查

    public class UserServiceImpl implements UserService {
         //需要Role
        private RoleDao roleDao;
    ​
        public void setRoleDao(RoleDao roleDao) {
            this.roleDao = roleDao;
        }
    ​
        //这里要调用Dao层
        private UserDao userDao;
    ​
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }
    ​
        @Override
        public List<User> userList() {
           List<User> userList = userDao.findAll();
             //roles是集合类型,所以我们先遍历集合 得到id来找
            for (User user : userList) {
                Long id = user.getId();
    ​
                //这里传到客户端的userRole属性是没有值的,因为我们查找的表里面就没有role
                //所以我们这里要调用role对象来帮助我们找
                List<Role> userRoles = roleDao.queryRolesById(id);
                //这里将得到的role集合封装给user
                   user.setRoleList(userRoles);
            }
    ​
            return userList;
        }
    }

    这里千万,注意 我们是在UserService层,引入了RoleDao层的包,然后开展的

  2. 添加用户的使用,我们会给用户添加role 这时候role可以是多个,所以我们将role封装到一个数组里面

    • UserController层代码

      @RequestMapping("/save")
      public String save(User user,Long[] roleIds){
            //这里注意要有两个东西,一个是user对象,一个属role 数组, 因为一个人可以有多个role
               userService.save(user,roleIds);
           return "redirect:/user/list";
      }
    • UserService层代码(千万注意这里的id是没有值的

      @Override
      public void save(User user, Long[] roleIds) {
            //这里注意,我们这里传过去的user是没有id的,所以后面会有一大堆代码
            long getUserId = userDao.save(user);
              //在来一个方法,保存role
             //sys_user_role这张表需要两个数据
            userDao.saveRoleRlx(getUserId,roleIds);
      }
    • Dao层代码(这里需要将数据库自动生成的id值返回给UserService层,为什么id没有值呢,目前这个技术不支持自动返回,mybatis之后就不用写着一堆代码了

      @Override
      public long save(User user) {
              //创建preparedStatementCreator
          PreparedStatementCreator creator = new PreparedStatementCreator() {
              @Override
              public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
                     //使用原始的jdbc
                    PreparedStatement preparedStatement =connection.prepareStatement("insert into sys_user values(?,?,?,?,?)",PreparedStatement.RETURN_GENERATED_KEYS);
                     preparedStatement.setObject(1,null);
                     preparedStatement.setString(2,user.getUsername());
                     preparedStatement.setString(3,user.getEmail());
                     preparedStatement.setString(4,user.getPassword());
                     preparedStatement.setString(5,user.getPhoneNum());
      ​
                  return preparedStatement;
              }
          };
          GeneratedKeyHolder keyHolder = new GeneratedKeyHolder();
               jdbcTemplate.update(creator,keyHolder);
          long userId = keyHolder.getKey().longValue();
          return userId;
      }
      ​
      @Override
      public void saveRoleRlx(long userId,Long[] roleIds) {
            //这里我们得到的是一个数组,所以我们要先遍历数组,每遍历一下 就加入数据库一下
          for (Long roleId : roleIds) {
              jdbcTemplate.update("insert into sys_user_role values(?,?)",userId,roleId);
          }
      }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值