理论简述
- ssm
- 【spring】 实现控制反转,即控制权的转移,创建对象的任务交给spring容器
- 【springmvc】 类似于servlet,实现跳转
- 【mybatic】持久层框架,本质就是jdbc
实验过程记录
导入界面
将事先准备好的界面导入ssm项目中,放入包webapp之中。
项目目录截图:
界面截图:
界面按区域分有:aside.jsp、header.jsp、main.jsp
具体功能实现
- 在control层添加findAll()的方法,使aside.jsp界面能够响应跳转到control层。
package com.zr.controller;
import com.zr.bean.User;
import com.zr.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
@Controller
@RequestMapping("user")
public class UserController {
@Autowired
private IUserService userService;
@RequestMapping("login.do")
public ModelAndView login(User user){
boolean flag=userService.login(user.getUsername(),user.getPassword());
ModelAndView modelAndView=new ModelAndView();
if(flag){
modelAndView.setViewName("main");
}
else{
modelAndView.setViewName("../failer");
}
return modelAndView;
}
@RequestMapping("findAll.do")
public ModelAndView findAll(){
List<User> users=userService.findAll();
ModelAndView mv=new ModelAndView();
mv.setViewName("user-list"); //成功后跳转到user-list展现页面
mv.addObject("users",users);//把查到的所有对象放入视图解析器
return mv;
}
}
- 此时会显示service层并没有findAll()方法,在service层的接口和具体实现中添加这个方法。
package com.zr.service;
import com.zr.bean.User;
import java.util.List;
public interface IUserService {
boolean login(String username,String password);
List<User> findAll();
}
package com.zr.service.impl;
import com.zr.bean.User;
import com.zr.dao.IUserDao;
import com.zr.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements IUserService {
//容器创建new
@Autowired
private IUserDao userDao;
@Override
public boolean login(String username, String password) {
User user=userDao.findUserByUserName(username);
if(user!=null&&user.getPassword().equals(password)){
return true;
}
return false;
}
@Override
public List<User> findAll() {
return userDao.findAll();
}
}
- 同样需要在dao的接口中添加方法findAll()
package com.zr.dao;
import com.zr.bean.User;
import java.util.List;
public interface IUserDao {
User findUserByUserName(String username);
List<User> findAll();
}
- 再在映射文件mapper中添加实现类
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.zr.dao.IUserDao">
<!--别名user小写-->
<select id="findUserByUserName" parameterType="String" resultType="user">
select * from tb_user where username=#{username}
</select>
<select id="findAll" resultType="user">
select * from tb_user
</select>
</mapper>
- 方法实现后,这个方法最终实现的结果会在user-list.jsp界面的表里,记得修改表显示的内容,是所有用户。
<tbody>
<c:forEach items="${users}" var="user">
<tr>
<td><input id="ids" name="ids" type="checkbox" value="${user.id}"></td>
<td>${user.id}</td>
<td>${user.username}</td>
<td>${user.password}</td>
<td class="text-center">
<a href="/user/toUpdate.do?id=${user.id}" class="btn bg-olive btn-xs">更新</a>
<a href="/user/deleteById.do?id=${user.id}" class="btn bg-olive btn-xs">删除</a>
<a href="" class="btn bg-olive btn-xs">添加角色</a>
</td>
</tr>
</c:forEach>
</tbody>
然后我们也为此页面的增删改都添加了方法名。新建方法我们让它跳转到user-add.jsp,得到用户信息添加入数据库,然后在调用findAll()展示在user-list.jsp中。更新方法我们新建一个toUpdate(int id)方法,根据id找到用户信息,跳转到user-update.jsp页面显示出来,得到修改的信息调用update(User user)方法。每个方法的添加步骤如以上步骤。
- 最终的control层:
package com.zr.controller;
import com.zr.bean.User;
import com.zr.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
@Controller
@RequestMapping("user")
public class UserController {
@Autowired
private IUserService userService;
@RequestMapping("login.do")
public ModelAndView login(User user){
boolean flag=userService.login(user.getUsername(),user.getPassword());
ModelAndView modelAndView=new ModelAndView();
if(flag){
modelAndView.setViewName("main");
}
else{
modelAndView.setViewName("../failer");
}
return modelAndView;
}
@RequestMapping("findAll.do")
public ModelAndView findAll(){
List<User> users=userService.findAll();
ModelAndView mv=new ModelAndView();
mv.setViewName("user-list"); //成功后跳转到user-list展现页面
mv.addObject("users",users);//把查到的所有对象放入视图解析器
return mv;
}
@RequestMapping("deleteById.do")
public String delete(int id){
userService.deleteById(id);
return "redirect:findAll.do";//转发
}
@RequestMapping("add.do")
public String add(User user){
userService.add(user);
return "redirect:findAll.do";
}
@RequestMapping("toUpdate.do")
public ModelAndView toUpdate(int id){
User user=userService.selectUserById(id);
ModelAndView modelAndView=new ModelAndView();
modelAndView.addObject("user",user);
modelAndView.setViewName("user-update");
return modelAndView;
}
@RequestMapping("update.do")
public String update(User user){
userService.update(user);
return "redirect:findAll.do";
}
}
- service层的具体实现类:
package com.zr.service.impl;
import com.zr.bean.User;
import com.zr.dao.IUserDao;
import com.zr.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements IUserService {
//容器创建new
@Autowired
private IUserDao userDao;
@Override
public boolean login(String username, String password) {
User user=userDao.findUserByUserName(username);
if(user!=null&&user.getPassword().equals(password)){
return true;
}
return false;
}
@Override
public List<User> findAll() {
return userDao.findAll();
}
@Override
public void deleteById(int id) {
userDao.deleteById(id);
}
@Override
public void add(User user) {
userDao.add(user);
}
@Override
public User selectUserById(int id) {
User user=userDao.selectUserById(id);
return user;
}
@Override
public void update(User user) {
userDao.update(user);
}
}
- dao层的接口:
package com.zr.dao;
import com.zr.bean.User;
import java.util.List;
public interface IUserDao {
User findUserByUserName(String username);
List<User> findAll();
void deleteById(int id);
void add(User user);
User selectUserById(int id);
void update(User user);
}
- dao的具体实现在mapper:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.zr.dao.IUserDao">
<!--别名user小写-->
<select id="findUserByUserName" parameterType="String" resultType="user">
select * from tb_user where username=#{username}
</select>
<select id="findAll" resultType="user">
select * from tb_user
</select>
<select id="deleteById" resultType="user">
delete from tb_user where id=#{id}
</select>
<select id="add" resultType="user">
insert into tb_user(username,password) values (#{username},#{password})
</select>
<select id="selectUserById" parameterType="int" resultType="user">
select * from tb_user where id=#{id}
</select>
<update id="update" parameterType="user">
update tb_user set username=#{username},password=#{password}
where id=#{id}
</update>
</mapper>
结果展示
原:
新建:
删除:
更新: