springMVC-Day06(项目)
-
千万注意 这里是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>
-
这是用来for循环的
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Role功能代码
首先分析Role 有哪些功能
-
Role 可以同时是多个人的身份,而且每个人也可以是什么身份都没有,一个人也可以具有多重身份
-
我们需要实现的功能有
-
一:查找所有的数据,并且将他排列在role客户页面
-
二:增加role,然后跳转到role客户页面
-
三:删除role,然后跳转到role客户页面
-
-
我们需要建立的包有
-
RoleDao,RoleService,RoleController 以及他们的实现类
-
-
采用,controller类用注解方式获取上下文,其余用<Bean来注入,配置的方式来获取
-
第一步,导入坐标
-
第二步,配置appilicationContext.xl (注册驱动,配置jdbcteample,数据库的数据源对象,获取数据库资源等)
-
第三步:配置web.xml, (前端控制器, 多滤器,全局初始化参数,监听器)
-
-
第一步: 先创建两个对象Role 和User 并且给出 dddd
-
第二步:在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"; } }
-
第三步: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); } }
-
第四步: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功能的实现
-
和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层的包,然后开展的
-
添加用户的使用,我们会给用户添加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); } }
-