文章目录
一、项目部署
1.Eclipse创建一个Dynamic Web Project(2.5)
2.在src里面创建1个Package(com.airui),该包下面有5个子包 (mapper,pojo,service,controller)如图下:
3.mapper里创建一个接口interface和xml(名字最好一致),
pojo里创建两个实体类User、Dept,
service里创建一个接口interface和一个实现接口的类class,
controller里创建一个类class
如图下:
4.创建一个资源文件夹Source Folder与src同级,命名为config,如图下:
最后一步有资源包
- applicationContext-dao.xml路径一致
- applicationContext-service.xml路径一致
- 2.db.properties 需要改一下数据库
- springmvc.xml 作用:加载映射文件 UserMapper.xml
两行蓝色线表示为什么要在lib文件夹下创一个jsp文件夹并且里面必须时jsp文件
红色一行代表路径要一致
- SqlMapConfig.xml路径一致
5.在WEB-INF文件夹下创建一个普通的文件夹,命名为jsp
6.重要的一步部署Tomcat环境,还有在lib文件夹下导入一些jar包,web.xml也需要配置
项目源码+环境+配置+jar包
链接:https://pan.baidu.com/s/13A0BPIh47IOgrsvJe6Qe8Q 提取码:x1lg
7.创建一个数据库,建dept、user两张表,主键与外键关联
注:字段要与pojo里的实体类的字段一致
user:
dept:
两张表关联字段:
二.实现功能图
1.展示界面------show.jsp
访问路径时需在后面添加 /user/show.action
因为1.在UserController添加了 @RequestMapping(“user”) //窄化路径
2.在web.xml有这样的代码:<servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping>
请求是以.action结尾的
2.添加界面------add.jsp
3.更新修改界面(数据回显)------update.jsp
三.Mapper层
1.UserMapper.java
package com.airui.mapper;
import java.util.List;
import com.airui.pojo.User;
public interface UserMapper {
List<User> findAll(User user);
User findByUid(Integer uid);
void update(User user);
void deleteAll(Integer[] ids);
void add(User user);
void delete(Integer uid);
}
2.UserMapper.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.airui.mapper.UserMapper">
<!-- 查查询用户关联部门信息使用resultmap -->
<resultMap type="user" id="qd">
<id column="uid" property="uid"/>
<result column="username" property="username"/>
<result column="sex" property="sex"/>
<result column="age" property="age"/>
<result column="birthday" property="birthday"/>
<result column="did" property="did"/>
<!-- 一对一关联映射 -->
<!--
property:映射数据库列的字段或属性
javaType:完整java类名或别名
-->
<!-- <association property="dept" javaType="dept">
<!-- column:数据库的列名或者列标签别名 property:dept对象中did属性-->
<id column="did" property="did"/>
<result column="dname" property="dname"/>
</association> -->
<!-- 一对多关联映射 -->
<!--
property:映射数据库列的字段或属性
ofType:完整java类名或别名
-->
<collection property="dept" ofType="dept">
<id column="did" property="did"/>
<result column="dname" property="dname"/>
</collection>
</resultMap>
<select id="findAll" parameterType="user" resultMap="qd">
select u.*,d.dname from user u,dept d
<where>
u.did=d.did
<if test="age!=null and age!=''">
and age=#{age}
</if>
<if test="username!=null and username!=''">
and username like '%${username}%'
</if>
</where>
</select>
<!-- 添加 -->
<insert id="add" parameterType="user">
insert into user values(null,#{username},#{sex},#{age},#{birthday},#{did})
</insert>
<!-- 查id -->
<select id="findByUid" parameterType="int" resultType="user">
select * from user where uid=#{uid}
</select>
<!-- 修改 -->
<update id="update" parameterType="user">
update user set username=#{username},sex=#{sex},age=#{age},birthday=#{birthday},did=#{did} where uid=#{uid}
</update>
<!-- 批量删除 -->
<delete id="deleteAll">
delete from user
<where>
<foreach collection="array" item="uid" open="uid in(" close=")" separator=",">
#{uid}
</foreach>
</where>
</delete>
<!-- 单个删除 -->
<delete id="delete">
delete from user where uid=#{uid}
</delete>
</mapper>
四.Pojo层
1.User实体类
package com.airui.pojo;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
public class User {
private Integer uid;
private String username;
private String sex;
private Integer age;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;
private Integer did;
private Dept dept;
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(Integer uid, String username, String sex, Integer age, Date birthday, Integer did, Dept dept) {
super();
this.uid = uid;
this.username = username;
this.sex = sex;
this.age = age;
this.birthday = birthday;
this.did = did;
this.dept = dept;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Integer getDid() {
return did;
}
public void setDid(Integer did) {
this.did = did;
}
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
@Override
public String toString() {
return "User [uid=" + uid + ", username=" + username + ", sex=" + sex + ", age=" + age + ", birthday="
+ birthday + ", did=" + did + ", dept=" + dept + "]";
}
}
2.Dept实体类
package com.airui.pojo;
public class Dept {
private Integer did;
private String dname;
public Integer getDid() {
return did;
}
public void setDid(Integer did) {
this.did = did;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
}
五.Service层
1.UserService
package com.airui.service;
import java.util.List;
import org.springframework.stereotype.Service;
import com.airui.pojo.User;
@Service
public interface UserService {
List<User> findAll(User user);
User findByUid(Integer uid);
void update(User user);
void deleteAll(Integer[] ids);
void add(User user);
void delete(Integer uid);
}
2.UserServiceImpl
package com.airui.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.airui.mapper.UserMapper;
import com.airui.pojo.User;
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper um;
@Override
public List<User> findAll(User user){
return um.findAll(user);
}
@Override
public void add(User user){
um.add(user);
}
@Override
public User findByUid(Integer uid){
return um.findByUid(uid);
}
@Override
public void update(User user){
um.update(user);
}
@Override
public void deleteAll(Integer[] ids){
um.deleteAll(ids);
}
@Override
public void delete(Integer uid) {
um.delete(uid);
}
}
六.Controller层
UserController
package com.airui.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.airui.pojo.User;
import com.airui.service.UserService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
@Controller
@RequestMapping("user") //窄化路径
public class UserController {
@Autowired
private UserService us;
//分页展示,前端表格提交到show.action
@RequestMapping("show")
public String show(@RequestParam(required=true,defaultValue="1")Integer pageNum,Model model,User user) {
//导入PageHelper.jar包,(当前页,有2条数据)
PageHelper.startPage(pageNum, 2);
List<User> ulist=us.findAll(user);
//封装好的PageInfo对象,实现分页
PageInfo<User> page=new PageInfo<User>(ulist);
//向model添加数据'相当于'之前学的request.setAttribute("page", page),是相同的功能
model.addAttribute("page", page);
//去jsp
return "show";
}
//去添加,前端表格提交到goadd.action
@RequestMapping("goadd")
public String goadd() {
return"add";
}
//添加,前端表格提交到add.action
@RequestMapping("add")
public String add(User user) {
us.add(user);
return "redirect:show.action";
}
//去修改,前端表格提交到findByUid.action
@RequestMapping("findByUid")
public String findByUid(Integer uid,Model model) {
User user=us.findByUid(uid);
model.addAttribute("user", user);
return "update";
}
//修改,前端表格提交到update.action
@RequestMapping("update")
public String update(User user) {
us.update(user);
return "redirect:show.action";
}
//批量删除,前端表格提交到deleteAll.action
@RequestMapping("deleteAll")
public String deleteAll(Integer [] ids) {
us.deleteAll(ids);
return "redirect:show.action";
}
//单个删除,前端表格提交到delete.action
@RequestMapping("delete")
public String delete(Integer uid) {
us.delete(uid);
return "redirect:show.action";
}
}
七.Jsp
1.show.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<center>
<a href="${pageContext.request.contextPath }/user/goadd.action">添加</a>
<form action="" id="myForm" method="post">
<table border="1px" cellspacing="0">
<tr>
<td colspan="8">
姓名:<input type="text" name="username" value="${user.username }">
年龄:<input type="text" name="age" value="${user.age }">
<input type="hidden" name="pageNum" id="pn" value="${page.pageNum }">
<input type="button" value="搜索" onclick="search()">
</td>
</tr>
<tr>
<td colspan="8">
<input type="button" value="批量删除" onclick="deleteAll()">
</td>
</tr>
<tr>
<td>
<input type="checkbox" id="ck" onclick="choose()">全选/全不选
</td>
<td>ID</td>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
<td>生日</td>
<td>部门</td>
<td>操作</td>
</tr>
<c:forEach var="u" items="${page.list }">
<tr>
<td>
<input type="checkbox" name="ids" value="${u.uid }">
</td>
<td>${u.uid }</td>
<td>${u.username }</td>
<td>${u.sex }</td>
<td>${u.age }</td>
<td><fmt:formatDate value="${u.birthday }" pattern="yyyy-MM-dd"/></td>
<td>${u.dept.dname }</td>
<td>
<a href="${pageContext.request.contextPath }/user/findByUid.action?uid=${u.uid}">修改</a>
<a href="${pageContext.request.contextPath }/user/delete.action?uid=${u.uid}">删除</a>
</td>
</tr>
</c:forEach>
</table>
第${page.pageNum }页/共${page.pages }页/${page.total }条
<input type="button" value="首页" onclick="jump(${page.firstPage})">
<input type="button" value="上一页" onclick="jump(${page.prePage})">
<input type="button" value="下一页" onclick="jump(${page.nextPage})">
<input type="button" value="尾页" onclick="jump(${page.lastPage})">
</form>
</center>
</body>
<script type="text/javascript">
function search() {
document.getElementById("myForm").action="${pageContext.request.contextPath }/user/show.action";
document.getElementById("myForm").submit();
}
//分页
function jump(obj) {
var i='${page.total}';
var totalpage='${page.pages}';
if (obj>=1 && obj<=totalpage) {
document.getElementById("pn").value=obj;
document.getElementById("myForm").action="${pageContext.request.contextPath }/user/show.action";
document.getElementById("myForm").submit();
}
}
//批量删除
function deleteAll() {
document.getElementById("myForm").action="${pageContext.request.contextPath }/user/deleteAll.action";
document.getElementById("myForm").submit();
}
//全选/全不选
function choose() {
var ck=document.getElementById("ck").checked;
var ids=document.getElementsByName("ids");
for (var i = 0; i < ids.length; i++) {
ids[i].checked=ck;
}
}
</script>
</html>
2.update.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<center>
<form action="${pageContext.request.contextPath }/user/update.action" method="post">
<input type="hidden" name="uid" value="${user.uid }">
姓名:<input type="text" name="username" value="${user.username }"><br>
性别:<input type="radio" name="sex" value="男" <c:if test="${user.sex eq '男' }">checked='checked'</c:if>>男
<input type="radio" name="sex" value="女" <c:if test="${user.sex eq '女' }">checked='checked'</c:if>>女<br>
年龄:<input type="text" name="age" value="${user.age }"><br>
生日:<input type="date" name="birthday" value="<fmt:formatDate value="${user.birthday }" pattern='yyyy-MM-dd'/>">
专业:<select name="did">
<option value="1" <c:if test="${user.did == 1 }">selected='selected'</c:if>>开发部</option>
<option value="2" <c:if test="${user.did == 2 }">selected='selected'</c:if>>测试部</option>
<option value="3" <c:if test="${user.did == 3 }">selected='selected'</c:if>>市场部</option>
</select><br>
<input type="submit" value="修改">
</form>
</center>
</body>
</html>
3.add.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<center>
<form action="${pageContext.request.contextPath }/user/add.action" method="post">
姓名:<input type="text" name="username"><br>
性别:<input type="radio" name="sex" value="男">男
<input type="radio" name="sex" value="女">女<br>
年龄:<input type="text" name="age"><br>
生日:<input type="date" name="birthday"><br>
专业:<select name="did">
<option value="1">开发部</option>
<option value="2">测试部</option>
<option value="3">市场部</option>
</select><br>
<input type="submit" value="添加">
</form>
</center>
</body>
</html>