sssp-springmvc+spring+spring-data-jpa增删改查
环境:IDE:eclipse、jdk1.7、mysql5.7、maven
项目地址:https://gitee.com/smfx1314/sssp
项目结构图
上面目录结构你可以自己创建
搭建框架
首先加入maven依赖包以及相关插件
<dependencies>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<!-- hibernate相关 -->
<dependency>
<groupId>antlr</groupId>
<artifactId>antlr</artifactId>
<version>2.7.7</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.0.6.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.common</groupId>
<artifactId>hibernate-commons-annotations</artifactId>
<version>5.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.jboss</groupId>
<artifactId>jandex</artifactId>
<version>2.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.1-GA</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.3.0.Final</version>
</dependency>
<!-- jpa相关 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.0.6.Final</version>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency> <!-- ehcache缓存 -->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>5.0.6.Final</version>
</dependency>
<!-- springdata -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>1.6.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.4.2.RELEASE</version>
</dependency>
<!-- common相关 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
</dependency> <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
<scope>test</scope>
</dependency>
<!-- MySQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>5.0.6.Final</version>
</dependency> <!-- servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency> <dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.2.1</version>
<scope>provided</scope>
</dependency> <dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!-- 分页插件 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.45</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<!-- <source>1.8</source> -->
<encoding>utf-8</encoding>
</configuration>
</plugin> <plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
注意:1.上面的spring-data-commons和spring-data-jpa版本问题,不然会出现莫名其妙的错误。请参考我这里的对应版本。
2.我这里使用的是tomcat7-maven-plugin插件
jar包引入完之后,下边我们开始从web.xml配置
web.xml
<!-- 配置spring监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 加载application配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 配置字符编码过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 解决懒加载问题 -->
<filter>
<filter-name>openEntityManagerInViewFilter</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openEntityManagerInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置restfull风格 -->
<filter>
<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 加载配置springmvc配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
注意:上面的配置就多一个懒加载,这个是为了解决spring-data-jpa懒加载异常的。
接下来开始配置springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 扫描注解的包 -->
<context:component-scan base-package="com.jiangfx.controller"/>
<!-- 开启注解 -->
<mvc:annotation-driven/>
<!--静态资源访问-->
<mvc:default-servlet-handler/> <!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
然后配置applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 扫描注解的包 -->
<context:component-scan base-package="com.jiangfx.service"/>
<!-- 配置数据库 -->
<!-- 加载配置文件 -->
<context:property-placeholder location="classpath*:db.properties" />
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${db.driverClassName}" />
<property name="jdbcUrl" value="${db.url}" />
<property name="user" value="${db.username}" />
<property name="password" value="${db.password}" />
</bean>
<!-- 2.配置jpa的entityManagerFactory -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- 指定Entity实体类包路径 -->
<property name="packagesToScan" value="com.jiangfx.entity"></property>
<!-- 指定Jpa持久化实现厂商类 -->
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>
</property>
<!-- jpa属性 -->
<property name="jpaProperties">
<props>
<prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<!-- 二级缓存 -->
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<!-- <prop key="hibernate.cache.use_query_cache">true</prop> -->
</props>
</property>
<!-- <property name="sharedCacheMode" value="ENABLE_SELETIVE"></property> -->
</bean> <!-- 3.配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/> <!-- 配置springdata -->
<jpa:repositories base-package="com.jiangfx.repository" entity-manager-factory-ref="entityManagerFactory"></jpa:repositories> </beans>
注意:上面要引入jpa的命名空间
上面数据库配置文件db.properties
db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/springdatajpa?charcterEncoding=utf-8
db.username=root
db.password=
现在框架搭建完成,下面开始着手完成增删改查功能。
controller
EmpController
package com.jiangfx.controller; import java.util.Date;
import java.util.List; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import com.jiangfx.entity.Dept;
import com.jiangfx.entity.Emp;
import com.jiangfx.service.DeptService;
import com.jiangfx.service.EmpService;
import com.jiangfx.service.impl.EmpServiceImpl; @Controller
public class EmpController { //注入empservice
@Autowired
private EmpService empService;
//注入deptService
@Autowired
private DeptService deptService; /**
* 查询:直接使用分页查询,这都是接口定义好的方法。不需要我们在写,方便。
*/
@RequestMapping(value="/list",method=RequestMethod.GET)
public String list(ModelMap map,@RequestParam(defaultValue="1",required=false,value="pageNo") Integer pageNo){
Page<Emp> page = empService.getPage(pageNo, 3);
map.put("page", page);
return "emp";
} /**
* 跳转到添加页面
*/
@RequestMapping(value="saveEmpPage",method=RequestMethod.GET)
public String savePage(ModelMap map){
List<Dept> depts = deptService.getListDepts();
map.addAttribute("depts", depts);
return "saveEmpPage";
} /**
* 添加:ajax异步校验用户名是否存在
*/
@RequestMapping(value="/checkName",method=RequestMethod.POST)
@ResponseBody
public String checkName(String ename){
Emp emp = empService.getByName(ename);
System.out.println(emp);
if(emp != null){
return "1";
}else{
return "0";
}
} /**
* 添加
*/
@RequestMapping(value="/saveEmp",method=RequestMethod.POST)
public String save(Emp emp){
emp.setTime(new Date());
empService.save(emp);
return "redirect:/list";
}
/**
* 根据id查询
*/
@RequestMapping(value="/getById",method=RequestMethod.GET)
public void getById(Integer eid){
Emp emp = empService.getById(eid);
}
/**
* 跳转到修改页面
*/
@RequestMapping("/updatePage")
public String updatePage(Integer eid,ModelMap map){
//先查询
Emp emp = empService.getById(eid);
map.addAttribute("emp", emp);
return "updatePage";
}
/**
* 修改
*/
@RequestMapping(value="/update",method=RequestMethod.POST)
public String update(Emp emp,ModelMap map){
empService.update(emp);
/*List<Dept> depts = deptService.getListDepts();
map.addAttribute("depts", depts);*/
return "redirect:/list";
}
/**
* 删除
*/
@RequestMapping(value="/deleteEmp",method=RequestMethod.GET)
public String deleteEmp(Integer eid){
empService.deleteEmp(eid);
return "redirect:/list";
}
}
serviceImpl(service接口我这里就写了,你们自己加上。)
EmpServiceImpl
package com.jiangfx.controller; import java.util.Date;
import java.util.List; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import com.jiangfx.entity.Dept;
import com.jiangfx.entity.Emp;
import com.jiangfx.service.DeptService;
import com.jiangfx.service.EmpService;
import com.jiangfx.service.impl.EmpServiceImpl; @Controller
public class EmpController { //注入empservice
@Autowired
private EmpService empService;
//注入deptService
@Autowired
private DeptService deptService; /**
* 查询:直接使用分页查询,这都是接口定义好的方法。不需要我们在写,方便。
*/
@RequestMapping(value="/list",method=RequestMethod.GET)
public String list(ModelMap map,@RequestParam(defaultValue="1",required=false,value="pageNo") Integer pageNo){
Page<Emp> page = empService.getPage(pageNo, 3);
map.put("page", page);
return "emp";
} /**
* 跳转到添加页面
*/
@RequestMapping(value="saveEmpPage",method=RequestMethod.GET)
public String savePage(ModelMap map){
List<Dept> depts = deptService.getListDepts();
map.addAttribute("depts", depts);
return "saveEmpPage";
} /**
* 添加:ajax异步校验用户名是否存在
*/
@RequestMapping(value="/checkName",method=RequestMethod.POST)
@ResponseBody
public String checkName(String ename){
Emp emp = empService.getByName(ename);
System.out.println(emp);
if(emp != null){
return "1";
}else{
return "0";
}
} /**
* 添加
*/
@RequestMapping(value="/saveEmp",method=RequestMethod.POST)
public String save(Emp emp){
emp.setTime(new Date());
empService.save(emp);
return "redirect:/list";
}
/**
* 根据id查询
*/
@RequestMapping(value="/getById",method=RequestMethod.GET)
public void getById(Integer eid){
Emp emp = empService.getById(eid);
}
/**
* 跳转到修改页面
*/
@RequestMapping("/updatePage")
public String updatePage(Integer eid,ModelMap map){
//先查询
Emp emp = empService.getById(eid);
map.addAttribute("emp", emp);
return "updatePage";
}
/**
* 修改
*/
@RequestMapping(value="/update",method=RequestMethod.POST)
public String update(Emp emp,ModelMap map){
empService.update(emp);
/*List<Dept> depts = deptService.getListDepts();
map.addAttribute("depts", depts);*/
return "redirect:/list";
}
/**
* 删除
*/
@RequestMapping(value="/deleteEmp",method=RequestMethod.GET)
public String deleteEmp(Integer eid){
empService.deleteEmp(eid);
return "redirect:/list";
}
}
repository
package com.jiangfx.repository; import org.hibernate.annotations.UpdateTimestamp;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import com.jiangfx.entity.Emp; public interface EmpRepository extends JpaRepository<Emp, Integer> { /**
* 根据用户名查询
* @param ename
* @return
*/
@Query("from Emp where ename= :ename")
Emp getname(@Param("ename") String ename); /**
* 分页查询,添加,修改:不需要定义方法,直接调用父接口中的save()方法
*/ /**
* 删除:也可以不定义方法,和上面一样,可以直接电涌父接口中的方法
* @return
*/
/*@Modifying
@Query("delete from Emp where eid= :eid")
void delete(@Param("eid") Integer eid);*/ }
实体类entity
package com.jiangfx.entity; import java.io.Serializable;
import java.util.Date; import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType; import org.hibernate.annotations.UpdateTimestamp;
import org.springframework.format.annotation.DateTimeFormat; @Table(name="emp")
@Entity
public class Emp implements Serializable { private static final long serialVersionUID = 1L;
private Integer eid;
private String ename;
private String eage;
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date time;
private Dept dept; @GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
public Integer getEid() {
return eid;
}
public void setEid(Integer eid) {
this.eid = eid;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getEage() {
return eage;
}
public void setEage(String eage) {
this.eage = eage;
}
@Temporal(TemporalType.TIMESTAMP)
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
} @JoinColumn(name="did")
@ManyToOne(fetch=FetchType.LAZY)
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
@Override
public String toString() {
return "Emp [eid=" + eid + ", ename=" + ename + ", eage=" + eage + ", time=" + time + ", dept=" + dept + "]";
}
}
下面是一些jsp页面
emp.jsp显示分页查询员工列表
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="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">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"/>
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js" ></script>
<title>员工</title>
</head>
<body>
<div class="container">
<table class="table table-hover table-bordered">
<tr>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
<th>创建时间</th>
<th>部门</th>
<th colspan="3">操作</th>
</tr>
<c:forEach items="${page.content}" var="emp">
<tr>
<td>${emp.eid}</td>
<td>${emp.ename}</td>
<td>${emp.eage}</td>
<td>
<fmt:formatDate value="${emp.time}" pattern="yyyy-MM-dd"/>
</td>
<td>${emp.dept.dname}</td>
<td>
<a href="${pageContext.request.contextPath }/saveEmpPage">添加</a>
</td>
<td><a href="${pageContext.request.contextPath }/deleteEmp?eid=${emp.eid}">删除</a> </td>
<td><a href="${pageContext.request.contextPath }/updatePage?eid=${emp.eid}">修改</a> </td>
</tr>
</c:forEach>
</table>
<p>共${page.totalPages}页</p>
<p>当前第${page.number+1}页</p>
<a href="list?pageNo=${page.number+1}">上一页</a>
<a href="list?pageNo=${page.number+1-1}">上一页</a>
<a href="list?pageNo=${page.number+1+1}">下一页</a>
</div>
<!-- 模态框(Modal) -->
<%-- <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="myModalLabel">模态框(Modal)标题</h4>
</div>
<div class="modal-body">
<form>
<div class="form-group">
<label for="exampleInputEmail1">姓名</label>
<input type="text" name="ename" class="form-control" id="exampleInputEmail1" placeholder="姓名">
</div>
<div class="form-group">
<label for="exampleInputPassword1">年龄</label>
<input type="text" name="eage" class="form-control" id="exampleInputPassword1" placeholder="年龄">
</div>
<label for="exampleInputEmail1">部门</label>
<select class="form-control" name="dept.did">
<c:forEach items="${depts }" var="dept">
<option value="${dept.did }">${dept.dname }</option>
</c:forEach>
</select>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary">提交更改</button>
</div>
</div>
</div>
</div>--%>
</body>
</html>
添加员工信息页面
saveEmpPage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!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>添加员工页面</title>
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$("#name").change(function(){
var name = $("this").val();
var args = {"ename":name,"date":new Date()};
$.ajax({
url:"${pageContext.request.contextPath}/checkName",
type:"post",
data:args,
success:function(result){
if(result=="0"){
alert("用户名可用")
}else {
alert("用户名不可用")
}
}
});
});
});
</script>
</head>
<body>
<form action="${pageContext.request.contextPath }/saveEmp" method="post">
姓名<input type="text" id="name" name="ename">
年龄<input type="text" name="eage">
部门<select class="form-control" name="dept.did">
<c:forEach items="${depts }" var="dept">
<option value="${dept.did }">${dept.dname }</option>
</c:forEach>
</select>
<input type="submit" value="提交">
</form>
</body>
</html>
修改员工信息页面(这里的部门信息有问题)
updatePage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!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>修改页面</title>
</head>
<body>
<form action="${pageContext.request.contextPath }/update" method="post">
<input type="hidden" name="eid" value="${emp.eid }">
姓名<input type="text" name="ename" value="${emp.ename }">
年龄<input type="text" name="eage" value="${emp.eage }">
部门<%-- <select class="form-control" name="dept.did">
<c:forEach items="${depts }" var="dept">
<option value="${dept.did }">${dept.dname }</option>
</c:forEach>
</select> --%>
<input type="submit" value="提交">
</form>
</body>
</html>
首页index.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">
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<title>Insert title here</title>
</head>
<body>
<a href="${pageContext.request.contextPath }/list">员工查询</a>
<a href="${pageContext.request.contextPath }/getlist">部门查询</a>
</body>
</html>
最后附上数据库信息
-- ----------------------------
-- Table structure for dept
-- ----------------------------
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
`did` int(11) NOT NULL,
`dname` varchar(255) DEFAULT NULL,
PRIMARY KEY (`did`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of dept
-- ----------------------------
INSERT INTO `dept` VALUES ('', '研发');
INSERT INTO `dept` VALUES ('', '测试');
INSERT INTO `dept` VALUES ('', '销售'); -- ----------------------------
-- Table structure for emp
-- ----------------------------
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
`eid` int(11) NOT NULL AUTO_INCREMENT,
`ename` varchar(255) DEFAULT NULL,
`eage` varchar(255) DEFAULT NULL,
`time` datetime DEFAULT NULL,
`did` int(11) DEFAULT NULL,
PRIMARY KEY (`eid`),
KEY `FKjq3nwkl52kinwb7t6l8f9ljtv` (`did`),
CONSTRAINT `FKjq3nwkl52kinwb7t6l8f9ljtv` FOREIGN KEY (`did`) REFERENCES `dept` (`did`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of emp
-- ----------------------------
INSERT INTO `emp` VALUES ('', '钱七', '', '2018-04-23 22:57:07', '');
INSERT INTO `emp` VALUES ('', '曹操', '', '2018-04-23 22:57:23', '');
INSERT INTO `emp` VALUES ('', '张三', '', '2018-04-24 16:06:59', '');
INSERT INTO `emp` VALUES ('', '李四', '', '2018-04-25 10:49:24', '');
INSERT INTO `emp` VALUES ('', '王五', '', '2018-04-25 10:49:39', '');
INSERT INTO `emp` VALUES ('', '赵六', '', '2018-04-25 10:50:15', '');
有问题可以联系我,源码请见码云:https://gitee.com/smfx1314/sssp
sssp-springmvc+spring+spring-data-jpa增删改查的更多相关文章
- spring boot(十五)spring boot+thymeleaf+jpa增删改查示例
快速上手 配置文件 pom包配置 pom包里面添加jpa和thymeleaf的相关包引用 <dependency> <groupId>org.springframework.b ...
- ztree使用系列三(ztree与springmvc+spring+mybatis整合实现增删改查)
在springmvc+spring+mybatis里整合ztree实现增删改查,上一篇已经写了demo,以下就仅仅贴出各层实现功能的代码: Jsp页面实现功能的js代码例如以下: <script ...
- Spring Data CrudRepository增删改查方法(八)
CrudRepository 的主要方法 long count(); boolean exists(Integer arg0); <S extends StudentPO> S sav ...
- EasyUI + Spring MVC + hibernate实现增删改查导入导出
(这是一个故事--) 前言 作为一个JAVA开发工程师,我觉得最基本是需要懂前端.后台以及数据库. 练习的内容很基础,包括:基本增删改查.模糊查询.分页查询.树菜单.上传下载.tab页 主管发我一个已 ...
- spring学习(四)spring的jdbcTemplate(增删改查封装)
Spring的jdbcTemplate操作 1.Spring框架一站式框架 (1)针对javaee三层,每一层都有解决技术 (2)到dao 层,使用 jdbcTemplate 2.Spring对不同的 ...
- SpringMVC框架下数据的增删改查,数据类型转换,数据格式化,数据校验,错误输入的消息回显
在eclipse中javaEE环境下: 这儿并没有连接数据库,而是将数据存放在map集合中: 将各种架包导入lib下... web.xml文件配置为 <?xml version="1. ...
- idea+spring4+springmvc+mybatis+maven实现简单增删改查CRUD
在学习spring4+springmvc+mybatis的ssm框架,idea整合简单实现增删改查功能,在这里记录一下. 原文在这里:https://my.oschina.net/finchxu/bl ...
- 三、JPA增删改查常用方法
前言:创建EntityManager对象,需要先创建创建EntityManagerFactory对象 方式一:直接通过persistenceUnitName创建 String persistenceU ...
- Spring MVC实例(增删改查)
数据库配置文件application-context-jdbc.xml <?xml version="1.0" encoding="UTF-8"?> ...
- spring boot+mybatis+mysql增删改查分页
server: port: servlet: context-path: /springBootMybatis spring: datasource: name: test url: jdbc:mys ...
随机推荐
- Asp.net容器化
注意:本文只用于探讨asp.net容器化,不建议生产环境下使用(docker 镜像太大!!!!) 安装docker 准备一个台windwos server 2016 ,在PowerShell 里执行以 ...
- 集智robot微信公众号开发笔记
开发流程 公众号基本配置(首先得有公众平台账号) 在开发菜单的基本配置中填写好基本配置项 首先配置服务器地址.Token.和消息加密密钥(地址为开发者为微信验证留的接口.token可以随便填写,只要在 ...
- 对JVM虚拟机中方法区的理解
因为jdk8的jvm已经取消了方法区,所以这边先主要介绍jdk8以下版本中方法区相关内容. 1.虚拟机规范中方法区的概念: 原文链接:http://docs.oracle.com/javase/spe ...
- WKWebView使用
WKWebView比之之前使用的UIWebView更加具有优势,UIWebView更加的笨重,UIWebView占用更多的内存,且内存的峰值更加的夸张,WKWebView加载的速度也更快,而且其更多的 ...
- 一种dubbo逻辑路由方案(服务化隔离环境)
背景介绍 现在很多的公司都在用dubbo.springcloud做为服务化/微服务的开发框架,服务化之后应用越来越多,链路越来越长,服务环境的治理变的很困难.比如:研发团队的人很多的,同时有几个分支在 ...
- Linux OpenGL 实践篇-1 OpenGL环境搭建
本次实践所使用环境为CentOS 7. 参考:http://www.xuebuyuan.com/1472808.html OpenGL开发环境搭建: 1.opengl库安装 opengl库使用mesa ...
- 机器学习:scipy和sklearn中普通最小二乘法与多项式回归的使用对
相关内容连接: 机器学习:Python中如何使用最小二乘法(以下简称文一) 机器学习:形如抛物线的散点图在python和R中的非线性回归拟合方法(以下简称文二) 有些内容已经在上面两篇博文中提到了,所 ...
- iOS masonry 不规则tagView布局 并自适应高度
在搜索页面经常会有不规则的tag出现,这种tagView要有点击事件,单个tagView可以设置文字颜色,宽度不固定根据内容自适应,高度固定,数量不固定.总高度就不固定.最近对于masonry的使用又 ...
- c++模板使用及实现模板声明定义的分离
c++模板是编译器构造具体实例类型的模型,使类型参数化,是泛型编程的基础,泛型就是独立于特定类型. 一.模板分为函数模板和类模板两种. 函数模板:template <class 形参名,clas ...
- 如何设计一款APP,才能吸引用户眼球
有APP分析机构研究表明,人们每天耗费在手机和平板上的平均时长为158分钟,其中127分钟是耗费在各类APP中,而仅有31分钟是花费在浏览网页上.随着人们对互联网的依赖性越来越强,移动APP发展迅速已 ...