项目简介
- (1)项目的经典模块-CRUD功能
- (2)什么是CRUD
CRUD:Create( 创 建 ) Retrieve(查询) Update(更新) Delete(删除) - (3)使用什么技术
ssm:Spring+SpringMVC+MyBatis - (4)版本
V1 : ssm
V2 : ssm+Ajax
V3 : ssm+Ajax+bootstrap
sql
create database crud;
use crud;
create table department(
did int primary key auto_increment,
dname varchar(20)
)
insert into department values(null,'java');
insert into department values(null,'测试');
insert into department values(null,'需求');
create table employee(
eid int primary key auto_increment,
ename varchar(20),
gender varchar(20),
did int
)
insert into employee values(null,'jack','1',1);
insert into employee values(null,'rose','1',1);
insert into employee values(null,'tony','1',2);
ssm搭建
- 复制搭建好的SSM为ssm02
- 修改pom.xml(ssm02)
<artifactId>ssm02</artifactId>
...
<name>ssm02 Maven Webapp</name>
- 修改pom.xml(springproject)
<modules>
<module>ssm01</module>
<module>ssm02</module>
</modules>
- 执行一下以上两个pom.xml
查询功能后台代码
TestDepartmentService
src\test\java\com\lfy\service\TestDepartmentService.java
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TestDepartmentService {
private static final Logger l= LoggerFactory.getLogger(TestDepartmentService.class);
@Autowired
private IDepartmentService service;
@Test
public void test01(){
List<Department> list=service.findAllDepartments();
l.info("test01() list="+list);
}
}
Department
src\main\java\com\lfy\domain\Department.java
public class Department {
private Integer did;
private String dname;
public Department() {
}
public Department(String dname) {
this.dname = dname;
}
@Override
public String toString() {
return "Department{" +
"did=" + did +
", dname='" + dname + '\'' +
'}';
}
IDepartmentService
src\main\java\com\lfy\service\IDepartmentService.java
public interface IDepartmentService {
List<Department> findAllDepartments();
}
DepartmentServiceImpl
src\main\java\com\lfy\service\impl\DepartmentServiceImpl.java
@Service
public class DepartmentServiceImpl implements IDepartmentService {
@Autowired
private IDepartmentDao dao;
@Override
public List<Department> findAllDepartments() {
List<Department> list=dao.findAll();
return list;
}
}
IDepartmentDao
src\main\java\com\lfy\dao\IDepartmentDao.java
public interface IDepartmentDao {
//select * from department order by did asc;
List<Department> findAll();
}
IDepartmentDao.xml
src\main\resources\com\lfy\dao\IDepartmentDao.xml
<?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.lfy.dao.IDepartmentDao">
<select id="findAll" resultType="department">
select * from department order by did asc;
</select>
</mapper>
查询功能前台代码
DepartmentController
src\main\java\com\lfy\controller\DepartmentController.java
@Controller
@RequestMapping("/dept")
public class DepartmentController {
private static final Logger l = LoggerFactory.getLogger(DepartmentController.class);
@Autowired
private IDepartmentService service;
@RequestMapping(path="/list",method = RequestMethod.GET)
public String list(Model model){
List<Department> list = service.findAllDepartments();
l.info("list() list="+list);
//数据添加到页面
model.addAttribute("list",list);
return "list_depts";
}
}
list_depts.jsp
src\main\webapp\WEB-INF\pages\list_depts.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<a href="">新增</a>
<table border="1px" width="100%">
<tr>
<td>编号</td>
<td>部门名称</td>
<td>管理</td>
</tr>
<c:forEach items="${list}" var="dept">
<tr>
<td>${dept.did}</td>
<td>${dept.dname}</td>
<td><a href="">删除</a><a href="">修改</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
添加功能后台代码
TestDepartmentService
@Test
public void test02(){
Department dept = new Department("UI");
service.saveDepartment(dept);
}
IDepartmentService
void saveDepartment(Department dept);
DepartmentServiceImpl
@Override
public void saveDepartment(Department dept) {
dao.save(dept);
}
IDepartmentDao
//insert into department (did,dname)values(null,'UI');
void save(Department dept);
IDepartmentDao.xml
<insert id="save" parameterType="department">
insert into department (did,dname)values(null,#{dname});
</insert>
添加功能前台代码
list_depts.jsp
<a href="${pageContext.request.contextPath}/save_dept.jsp">新增</a>
save_dept.jsp
src\main\webapp\save_dept.jsp
<form method="post" action="${pageContext.request.contextPath}/dept/save">
<input type="text" name="dname"/><br/>
<input type="submit" value="保存"/><br/>
</form>
DepartmentController
@RequestMapping(path="/save",method = RequestMethod.POST)
public String save(Department dept,Model model){
if(dept.getDname()!=null&&!"".equals(dept.getDname())) {
service.saveDepartment(dept);
l.info("save() dept=" + dept);
return "redirect:/dept/list";
}else {
model.addAttribute("error_msg", "部门名称不能为空");
return "forward:/error.jsp";
}
}
error.jsp
src\main\webapp\error.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
部门名称不能为空
</body>
</html>
删除功能后台代码
TestDepartmentService
@Test
public void test03(){
service.deleteDepartmentById(15);
}
IDepartmentService
void deleteDepartmentById(int id);
DepartmentServiceImpl
@Override
public void deleteDepartmentById(int id) {
dao.deleteById(id);
}
IDepartmentDao
//delete from department where did=15;
void deleteById(int id);
IDepartmentDao.xml
<delete id="deleteById" parameterType="int">
delete from department where did=#{id};
</delete>
删除功能前台代码
list_depts.jsp
<a href="${pageContext.request.contextPath}/dept/delete?did=${dept.did}">删除 | </a>
DepartmentController
@RequestMapping(path="/delete",method = RequestMethod.GET)
public String delete(Integer did){
l.info("delete() did="+did);
service.deleteDepartmentById(did);
return "redirect:/dept/list";
}
修改功能后台代码
- 修改功能,需要在打开页面的同时,查询一下数据,把数据带到页面进行赋值,这操作叫做回显
TestDepartmentService
@Test
public void test04(){
Department dept = service.findAllDepartmentById(13);
dept.setDname("最牛部门");
service.updateDepartmentById(dept);
}
IDepartmentService
Department findAllDepartmentById(int did);
void updateDepartmentById(Department dept);
DepartmentServiceImpl
@Override
public Department findAllDepartmentById(int did) {
return dao.findById(did);
}
@Override
public void updateDepartmentById(Department dept) {
dao.updateById(dept);
}
IDepartmentDao
//select * from department where did=13;
Department findById(int did);
//update department set dname=? where did=13;
void updateById(Department dept);
IDepartmentDao.xml
<select id="findById" parameterType="int" resultType="department">
select * from department where did=#{did};
</select>
<update id="updateById" parameterType="department">
update department set dname=#{dname} where did=#{did};
</update>
修改功能前台代码
list_depts.jsp
<a href="${pageContext.request.contextPath}/dept/updateUI?did=${dept.did}">修改</a>
- form表单 不会将 标记为
disabled="disabled"
作为参数提交到后台 - 所以,必须增加一个
type="hidden"
的input标签
update_dept.jsp
<form method="post" action="${pageContext.request.contextPath}/dept/update">
<input type="hidden" name="did" value="${dept.did}" >
<input type="text" value="${dept.did}" disabled="disabled"/><br/>
<input type="text" name="dname" value="${dept.dname}"/><br/>
<input type="submit" value="保存修改"/><br/>
</form>
DepartmentController
@RequestMapping(path="/updateUI",method = RequestMethod.GET)
public String updateUI(Integer did,Model model){
l.info("updateUI() did="+did);
Department dept = service.findAllDepartmentById(did);
model.addAttribute("dept",dept);
return "update_dept";
}
@RequestMapping(path="/update",method = {RequestMethod.GET,RequestMethod.POST})
public String update(Department dept){
l.info("update() dept="+dept);
service.updateDepartmentById(dept);
return "redirect:/dept/list";
}