文章目录
前言:
准备工作:
- 安装并且配置jdk8运行环境
- 数据库配置安装mysql
- 安装并且配置tomcat8.5.xx
- maven
- 安装idea2020
最终项目的目录结构:
源码
一、使用idea创建web app项目
二、导包
,由于我们创建的是maven的webapp项目,所以现在只需配置下pomxml这个配置文件,系统会自动到maven的中央仓库去下载相应的包。
本人的pom.xml配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.oyzk</groupId>
<artifactId>sshDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<!-- 本人将配置包的版本信息都统一放入此处,方便以后管理-->
<properties>
<springVersion>5.0.12.RELEASE</springVersion>
<hibernateVersion>5.4.8.Final</hibernateVersion>
<jstlVersion>1.2</jstlVersion>
<taglibVersion>1.1.2</taglibVersion>
<servletVersion>3.0-alpha-1</servletVersion>
<jsonVersion>1.9.13</jsonVersion>
<jacksonVersion>2.9.0</jacksonVersion>
<mysqlVersion>5.1.47</mysqlVersion>
<c3p0Version>0.9.1.2</c3p0Version>
<log4jVersion>1.2.17</log4jVersion>
<fileuploadVersion>1.3.1</fileuploadVersion>
<lombokVersion>1.18.10</lombokVersion>
</properties>
<dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${springVersion}</version>
</dependency>
<!-- spring web + spring MVC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springVersion}</version>
</dependency>
<!-- hibernate配置-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernateVersion}</version>
</dependency>
<!-- hibernate 缓存, 视情况添加-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>${hibernateVersion}</version>
</dependency>
<!-- jsp页面使用的jstl支持-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstlVersion}</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>${taglibVersion}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servletVersion}</version>
<scope>provided</scope>
</dependency>
<!-- DataBase数据库连接 mysql包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysqlVersion}</version>
</dependency>
<!-- 数据库连接池-->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>${c3p0Version}</version>
</dependency>
<!-- json数据 使springMVC可以返回json值 ,视情况添加-->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>${jsonVersion}</version>
</dependency>
<!-- Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jacksonVersion}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jacksonVersion}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jacksonVersion}</version>
</dependency>
<!-- log4j配置, 视情况添加-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4jVersion}</version>
</dependency>
<!--文件 上传-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${fileuploadVersion}</version>
</dependency>
<!-- lombok插件导包-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombokVersion}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<build>
<finalName>sshDemo</finalName>
</build>
</project>
OK,配置后运行下maven,就会自动向中央仓库下载相应的包(这个就不多说了)。
三、SpringMVC配置
第一步:配置spring-mvc.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:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--.配置spring开启注解mvc 的支持-->
<mvc:annotation-driven></mvc:annotation-driven>
<!--扫描控制层-->
<context:component-scan base-package="com.oyzk.controller"></context:component-scan>
<!--4.视图解析器 对模型视图名称的解析,在请求时模型视图名称添加前后缀-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
<!--这里是对静态资源的映射-->
<mvc:resources mapping="/js/**" location="/js/" />
<mvc:resources mapping="/css/**" location="/css/" />
<mvc:resources mapping="/img/**" location="/img/" />
</beans>
第二步:配置 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!-- 地址为http://localhost:8080/ 显示的默认网页-->
<welcome-file-list>
<welcome-file>/index.jsp</welcome-file>
</welcome-file-list>
<!-- spring MVC config start-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<!--通过java的反射机制加载-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 此处指向的的是SpringMVC的配置文件 -->
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!--让我们springmvc DispatcherServlet优先被加载-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--客户端发送所有请求 都会达到我们的 DdispatcherServlet 静态资源 控制器中,请求-->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- spring MVC config end-->
</web-app>
第三步:测试
在controller层新建一个TestController
package com.oyzk.controller;
import com.oyzk.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @author Kingkang
* @title TestController
* @create 2022/11/27
**/
@Controller
public class TestController {
@Autowired
private PersonService personService;
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String test(){
// 实际返回的是views/test.jsp ,spring-mvc.xml中配置过前后缀
return "test";
}
}
第四步在views新建test.jsp
<%--
Created by IntelliJ IDEA.
User: Kingkang
Date: 2022/11/27
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>测试Controller</title>
</head>
<body>
hello
</body>
</html>
第五步:启动tomcat并且访问
访问路径:http://localhost:8080/test
如果看到这个界面,恭喜你SpringMVC就应该好,接下来整合Spring
四、SpringMVC+Spring整合
第一步:建并且配置applicationContext.xml
这个就比较简单简单了, 创建并且配置applicationContext.xml这个Spring的配置文件如下:
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
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/util http://www.springframework.org/schema/util/spring-util.xsd">
<!--********************************************配置Spring******** start*******************************-->
<!-- 自动扫描 -->
<context:component-scan base-package="com.oyzk">
<!-- 扫描时跳过 @Controller 注解的JAVA类(控制器) -->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--********************************************配置Spring******** end*******************************-->
</beans>
第二步:在web.xml中新增spring配置
新增如下配置
<!--加载Spring的配置文件到上下文中去-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value> classpath:applicationContext.xml </param-value>
</context-param>
<!-- Spring监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 字符集过滤 -->
<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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
web.xml配置文件中更改了三处:引入Spring配置文件 Spring的监听器 以及 字符集过滤
第三步:测试
第一步
在service写一个TestServiceImpl实现TestService接口并实现其test()方法
package com.oyzk.service;
/**
* @author Kingkang
* @title TestService
* @create 2022/11/27
**/
public interface TestService {
String test();
}
package com.oyzk.service.impl;
import com.oyzk.service.TestService;
import org.springframework.stereotype.Service;
/**
* @author Kingkang
* @title TestServiceImpl
* @create 2022/11/27
**/
@Service
public class TestServiceImpl implements TestService {
public String test() {
return "测试spring";
}
}
**注意:**这里注意写@Service注解
第二步:TestController控制器更改如下:
package com.oyzk.controller;
import com.oyzk.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @author Kingkang
* @title TestController
* @create 2022/11/27
**/
@Controller
public class TestController {
@Autowired
private PersonService personService;
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String test(){
// 实际返回的是views/test.jsp ,spring-mvc.xml中配置过前后缀
return "test";
}
@RequestMapping(value = "/springtest", method = RequestMethod.GET)
@ResponseBody
public String springTest(){
return personService.test();
}
}
控制器这里我们运用了Spring的依赖注入自动装配。
在浏览器中输入地址http://localhost/springtest调用springtest方法
成功返回的话,恭喜你,spring+springMVC已经整合成功
五、Spring+SpringMVC+Hibernate整合
第一步:创建config.properties
用来存放的是hibernate的一些配置
#database connection config
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/frame?useUnicode=true&characterEncoding=utf-8
jdbc.username = root
jdbc.password = root
#hibernate config
#数据库方言
hibernate.dialect = org.hibernate.dialect.MySQLDialect
#打印sql
hibernate.show_sql = true
#格式化sql
hibernate.format_sql = true
#自动生成sql
hibernate.hbm2ddl.auto = update
第二步 配置Hibernate
这里为方便就直接写进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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
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/util http://www.springframework.org/schema/util/spring-util.xsd">
<!--********************************************配置Spring******** start*******************************-->
<!-- 自动扫描 -->
<context:component-scan base-package="com.oyzk">
<!-- 扫描时跳过 @Controller 注解的JAVA类(控制器) -->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--********************************************配置Spring******** end*******************************-->
<!--********************************************配置hibernate********************************************-->
<!--引入外部文件-->
<context:property-placeholder location="classpath:config.properties"></context:property-placeholder>
<!--配置数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driver}" /> <!--数据库连接驱动-->
<property name="jdbcUrl" value="${jdbc.url}" /> <!--数据库地址-->
<property name="user" value="${jdbc.username}" /> <!--用户名-->
<property name="password" value="${jdbc.password}" /> <!--密码-->
<property name="maxPoolSize" value="40" /> <!--最大连接数-->
<property name="minPoolSize" value="1" /> <!--最小连接数-->
<property name="initialPoolSize" value="10" /> <!--初始化连接池内的数据库连接-->
<property name="maxIdleTime" value="20" /> <!--最大空闲时间-->
</bean>
<!--配置session工厂-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com.oyzk.entity" />
<property name="hibernateProperties">
<props>
<!--hibernate根据实体自动生成数据库表-->
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
<!--指定数据库方言-->
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<!--在控制台显示执行的数据库操作语句-->
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<!--在控制台显示执行的数据哭操作语句(格式)-->
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
</props>
</property>
</bean>
<!-- 事物管理器配置 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!--********************************************配置hibernate*******end**********************************-->
</beans>
到这一步,配置已经已经结束了,这时候进入测试阶段
六、整体测试
第一步、创建实体类(entity)
package com.oyzk.entity;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
/**
* @author Kingkang
* @title Person
* @create 2022/11/27
**/
//setter 和getter 等同于 @Data
@Setter
@Getter
//是指这个类映射有数据库表
@Entity
//和数据库表对应
@Table(name = "Person")
public class Person {
//主键标识
@Id
//主键自增策略
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
//数据库字段名与属性值名进行对应
@Column(name = "username")
private String username;
@Column(name = "address")
private String address;
@Column(name = "phone")
private String phone;
}
第二步、数据库访问层(dao)
package com.oyzk.dao;
import com.oyzk.entity.Person;
import java.util.List;
/**
* @author Kingkang
* @title PersonDao
* @create 2022/11/27
**/
public interface PersonDao{
/**
* 查询所有数据
* @return
*/
List<Person> findAll();
/**
* 通过id查询数据
* @param id
* @return
*/
Person get(int id);
/**
* 保存数据
* @param person
* @return
*/
int save(Person person);
/**
* 新增数据
* @param person
*/
void updatePerson(Person person);
/**
* 删除数据
* @param id
*/
void deletePerson(int id);
}
package com.oyzk.dao.impl;
import com.oyzk.dao.PersonDao;
import com.oyzk.entity.Person;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.io.Serializable;
import java.util.List;
/**
* @author Kingkang
* @title PersonDao
* @create 2022/11/27
**/
@Repository
public class PersonDaoImpl implements PersonDao {
@Autowired
private SessionFactory sessionFactory;
private Session getCurrentSession() {
return this.sessionFactory.openSession();
}
public List<Person> findAll() {
return null;
}
public Person get(int id) {
return (Person)getCurrentSession().get(Person.class,id);
}
public int save(Person person) {
Serializable save = getCurrentSession().save(person);
if(save!=null){
return 1;
}else{
return -1;
}
}
public void updatePerson(Person person) {
}
public void deletePerson(int id) {
Person person = new Person();
getCurrentSession().delete(person);
}
}
第三步:服务层(service)
package com.oyzk.service;
import com.oyzk.entity.Person;
import java.util.List;
/**
* @author Kingkang
* @title PersonService
* @create 2022/11/27
**/
public interface PersonService {
String test();
/**
* 查询所有数据
* @return
*/
List<Person> findAll();
/**
* 通过id查询数据
* @param id
* @return
*/
Person get(int id);
/**
* 保存数据
* @param person
* @return
*/
int save(Person person);
/**
* 新增数据
* @param person
*/
void updatePerson(Person person);
/**
* 删除数据
* @param id
*/
void deletePerson(int id);
}
package com.oyzk.service.impl;
import com.oyzk.dao.PersonDao;
import com.oyzk.entity.Person;
import com.oyzk.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author Kingkang
* @title PersonServiceImpl
* @create 2022/11/27
**/
@Service
public class PersonServiceImpl implements PersonService {
@Autowired
private PersonDao personDao;
public String test() {
return "spring 测试";
}
public List<Person> findAll() {
return null;
}
public Person get(int id) {
return personDao.get(1);
}
public int save(Person person) {
person.setUsername("张三");
person.setPhone("1111");
person.setAddress("郴州");
return personDao.save(person);
}
public void updatePerson(Person person) {
}
public void deletePerson(int id) {
}
}
第三步:控制层(controller)
package com.oyzk.controller;
import com.oyzk.entity.Person;
import com.oyzk.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @author Kingkang
* @title PersonController
* @create 2022/11/27
**/
@Controller
public class PersonController {
@Autowired
private PersonService personService;
@RequestMapping(value = "/savePerson", method = RequestMethod.GET)
@ResponseBody
public String savePerson(){
personService.save(new Person());
return "success!";
}
}
第四步:测试
我们重启下服务器然后测试:
在去看看数据库数据已经新增进去
说明spring+springmvc+hibernate已经整合成功,剩下的就是写crud
七、Spring+SpringMVC+Hibernate+bootstrap整合
目标:实现增删改查操作
第一步、实现后台功能:
1、dao
package com.oyzk.dao;
import com.oyzk.entity.Person;
import java.util.List;
/**
* @author Kingkang
* @title PersonDao
* @create 2022/11/28
**/
public interface PersonDao {
/**
* 查询全部的数据
* @return
*/
List<Person> getPersonAll();
/**
* 通过名字进行查询
* @param id
* @return
*/
Person getPersonById(int id);
/**
* 新增数据
* @param person
* @return
*/
int addPerson(Person person);
/**
* 修改
* @param person
* @return
*/
int updatePerson(Person person);
/**
* 删除
* @param id
* @return
*/
int deletePerson(int id);
}
package com.oyzk.dao.impl;
import com.oyzk.dao.PersonDao;
import com.oyzk.entity.Person;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.io.Serializable;
import java.util.List;
/**
* @author Kingkang
* @title PersonDaoImpl
* @create 2022/11/28
**/
@Repository
public class PersonDaoImpl implements PersonDao {
@Autowired
private SessionFactory sessionFactory;
private Session getOpenSession(){
return sessionFactory.openSession();
}
/**
* 查询全部数据
* @return
*/
public List<Person> getPersonAll() {
String hql=" from Person";
Query query = getOpenSession().createQuery(hql);
List<Person> list = query.list();
return list;
}
/**
* 通过id去查询数据
* @param id
* @return
*/
public Person getPersonById(int id) {
//Person person = getOpenSession().get(Person.class, id);
return getOpenSession().get(Person.class, id);
}
public int addPerson(Person person) {
/* person.setUsername("张三");
person.setAddress("上海");
person.setPhone("111");
Serializable save = getOpenSession().save(person);*/
Session openSession = getOpenSession();
//新增
Serializable save = openSession.save(person);
if(save!=null){
closeTrancation(openSession);
return 1;
}else{
closeTrancation(openSession);
return -1;
}
}
public int updatePerson(Person person) {
Session openSession = getOpenSession();
openSession.update(person);
closeTrancation(openSession);
return 1;
}
public int deletePerson(int id) {
Session openSession = getOpenSession();
Person person=new Person();
person.setId(id);
openSession.delete(person);
closeTrancation(openSession);
return 1;
}
public void closeTrancation( Session openSession){
openSession.beginTransaction().commit();
openSession.close();
}
}
注意:PersonDaoImpl 上面有一个@Repository注解,千万要记得写,交给spring容器进行管理
2、service
package com.oyzk.service;
import com.oyzk.entity.Person;
import java.util.List;
/**
* @author Kingkang
* @title PersonService
* @create 2022/11/28
**/
public interface PersonService {
/**
* 查询全部的数据
* @return
*/
List<Person> getPersonAll();
/**
* 通过名字进行查询
* @param id
* @return
*/
Person getPersonById(int id);
/**
* 新增数据
* @param person
* @return
*/
int addPerson(Person person);
/**
* 修改
* @param person
* @return
*/
int updatePerson(Person person);
/**
* 删除
* @param id
* @return
*/
int deletePerson(int id);
}
package com.oyzk.service.impl;
import com.oyzk.dao.PersonDao;
import com.oyzk.entity.Person;
import com.oyzk.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List;
/**
* @author Kingkang
* @title PersonServiceImpl
* @create 2022/11/28
**/
@Service
public class PersonServiceImpl implements PersonService {
@Autowired
private PersonDao personDao;
public List<Person> getPersonAll() {
return personDao.getPersonAll();
}
public Person getPersonById(int id) {
return personDao.getPersonById(id);
}
public int addPerson(Person person) {
if(StringUtils.isEmpty(person)){
return -1;
}
return personDao.addPerson(person);
}
public int updatePerson(Person person) {
return personDao.updatePerson(person);
}
public int deletePerson(int id) {
return personDao.deletePerson(id);
}
}
**注意:**PersonServiceImpl类上面有一个@Service注解千万要记得写
3、controller
package com.oyzk.controller;
import com.oyzk.entity.Person;
import com.oyzk.service.PersonService;
import com.oyzk.service.impl.PersonServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import java.sql.Array;
import java.util.ArrayList;
import java.util.List;
/**
* @author Kingkang
* @title PersonController
* @create 2022/11/28
**/
@Controller
@RequestMapping("/person")
public class PersonController {
@Autowired
private PersonService personService;
/**
* 查詢所有数据
* @param model
* @return
*/
@GetMapping("/findAll")
public String findAll(Model model){
List<Person> personAll = personService.getPersonAll();
model.addAttribute("personList",personAll);
return "homePage";
}
@GetMapping("/findById")
public String findById(int id,Model model){
Person person = personService.getPersonById(id);
List<Person> personAll=new ArrayList<Person>();
personAll.add(person);
model.addAttribute("personList",personAll);
return "homePage";
}
/**
* 新增数据
* @param person
* @return
*/
@RequestMapping("/savePerson")
public ModelAndView savePerson(Person person){
ModelAndView modelAndView=new ModelAndView();
int i = personService.addPerson(person);
if(i>0){
modelAndView.addObject("flageMsg","新增成功");
}else {
modelAndView.addObject("flageMsg","新增失败");
}
modelAndView.setViewName("redirect:/person/findAll");
return modelAndView;
}
/**
* 跳转新增页面请求
* @param
* @return
*/
@RequestMapping("/savePersonPage")
public String savePersonPage(){
return "addPerson";
}
@GetMapping("/deletePerson")
public String deletePerson(int id,Model model){
int i = personService.deletePerson(id);
if(i>0){
model.addAttribute("flageMsg","删除成功");
return "homePage";
}else {
model.addAttribute("flageMsg","删除删除失败");
return "homePage";
}
}
/**
* 修改数据
* @param person
* @return
*/
@PostMapping("/updatePerson")
public String updatePerson(Person person,Model model){
int i = personService.updatePerson(person);
if(i>0){
model.addAttribute("flageMsg","修改成功");
}else {
model.addAttribute("flageMsg","修改失败");
}
return "redirect:/person/findAll";
}
/**
* 修改跳转页面请求
* @param id
* @param model
* @return
toUpdatePerson*/
@RequestMapping("/updatePersonPage")
public String updatePersonPage(int id,Model model){
Person person = personService.getPersonById(id);
model.addAttribute("person",person);
return "updatePerson";
}
}
第二步、实现前端功能:
1、创建homePage.jsp (首页显示信息)
<%--
Created by IntelliJ IDEA.
User: Kingkang
Date: 2022/11/28
Time: 16:19
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>信息展示页面</title>
<link type="text/css" rel="stylesheet" href="../../css/bootstrap.css">
<script type="text/javascript" src="../../js/jquery.min.js"></script>
<script type="text/javascript" src="../../js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<div class="row clearfix">
<div class="col-md-12 column">
<div class="page-headr">
<h1>
<small>信息列表 ———————— 显示所有人员信息</small>
</h1>
<span style="color:#FAF520 ;font-weight: bold">${flageMsg}</span>
</div>
</div>
<div class="col-md-4 column">
<a class="btn btn-primary" href="${pageContext.request.contextPath}/person/savePersonPage">新增</a>
<a class="btn btn-primary" href="${pageContext.request.contextPath}/person/findAll">显示全部信息</a>
</div>
<div class="col-md-4"></div>
<div class="col-md-4">
<form class="form-inline" action="${pageContext.request.contextPath}/person/findById" method="get" style="float:right">
<span style="color:#FAF520 ;font-weight: bold">${error}</span>
<input type="text" name="id" class="form-control" placeholder="请输入要查询的人员id">
<input type="submit" value="查询" class="btn btn-primary">
</form>
</div>
</div>
<div class="row clearfix">
<div class="col-md-12 column">
<table class="table table-hover table-striped">
<thead>
<tr>
<th>人员id</th>
<th>人员名字</th>
<th>人员电话</th>
<th>人员地址</th>
<th>操作</th>
</tr>
</thead>
<%-- 人员从数据库中查询出来--%>
<tbody>
<c:forEach items="${personList}" var="person">
<tr>
<td>${person.id}</td>
<td>${person.username}</td>
<td>${person.phone}</td>
<td>${person.address}</td>
<td>
<a href="${pageContext.request.contextPath}/person/updatePersonPage?id=${person.id}">修改</a>
||
<a href="${pageContext.request.contextPath}/person/deletePerson?id=${person.id}">刪除</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>
2、创建addPerson.jsp
<%--
Created by IntelliJ IDEA.
User: Kingkang
Date: 2022/11/28
Time: 16:56
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>新增人员信息页面</title>
<link type="text/css" rel="stylesheet" href="../../css/bootstrap.css">
<script type="text/javascript" src="../../js/jquery.min.js"></script>
<script type="text/javascript" src="../../js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<div class="row clearfix">
<div class="col-md-12 column">
<div class="page-headr">
<h1>
<samll>新增人员</samll>
</h1>
</div>
</div>
</div>
<form action="${pageContext.request.contextPath}/person/savePerson" method="post">
<div class="form-group">
<table>人员名称</table>
<input type="text" name="username" class="form-control" required>
</div>
<div class="form-group">
<table>人员电话</table>
<input type="text" name="phone" class="form-control" required>
</div>
<div class="form-group">
<table>人员地址</table>
<input type="text" name="address" class="form-control" required>
</div>
<div class="form-group">
<input type="submit" class="form-control" value="添加">
</div>
</form>
</div>
</body>
</html>
3、创建updatePerson.jsp
<%--
Created by IntelliJ IDEA.
User: Kingkang
Date: 2022/11/27
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>修改人员信息页面</title>
<link type="text/css" rel="stylesheet" href="../../css/bootstrap.css">
<script type="text/javascript" src="../../js/jquery.min.js"></script>
<script type="text/javascript" src="../../js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<div class="row clearfix">
<div class="col-md-12 column">
<div class="page-headr">
<h1>
<samll>修改人员</samll>
</h1>
</div>
</div>
</div>
<form action="${pageContext.request.contextPath}/person/updatePerson" method="post">
<input type="hidden" name="id" value="${person.id}">
<div class="form-group">
<table>人员名字</table>
<input type="text" name="username" class="form-control" value="${person.username}" required>
</div>
<div class="form-group">
<table>人员电话</table>
<input type="text" name="phone" class="form-control" value="${person.phone}" required>
</div>
<div class="form-group">
<table>人员地址</table>
<input type="text" name="address" class="form-control" value="${person.address}" required>
</div>
<div class="form-group">
<input type="submit" class="form-control" value="修改">
</div>
</form>
</div>
</body>
</html>
4、创建 index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首页</title>
<style>
a{
text-decoration: none;
color: black;
font-size: 18px;
}
h3{
width: 180px;
height: 50px;
margin: 100px auto;
text-align: center;
line-height:50px;
background:#FAF520;
border-radius: 5px;
}
</style>
</head>
<body>
<h3>
<a href="${pageContext.request.contextPath}/person/findAll">进入到人员信息页面</a>
</h3>
</body>
</html>
最终的效果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/6c94e32b39a340609982d4f980ee0bf3.png
八、Spring+SpringMVC+Hibernate+JSP整合
ssh和sjp进行整合,其实和bootstrap是一样的,无非就是前端页面修改一下,这里为了分得清,重新创建一个UserController,所以目录结构是这样的,
第一步:创建新的UserController
package com.oyzk.controller;
import com.oyzk.entity.Person;
import com.oyzk.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
/**
* @author Kingkang
* @title UserController
* @create 2022/11/29
**/
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private PersonService personService;
@GetMapping("/userList")
public String findAll(Model model){
List<Person> personAll = personService.getPersonAll();
model.addAttribute("userList",personAll);
return "userList";
}
/**
* 跳转修改页面请求
* @param id
* @param model
* @return
*/
@RequestMapping("/updateUserByIdPage")
public String updateUserByIdPage(int id,Model model){
Person person = personService.getPersonById(id);
model.addAttribute("user",person);
return "updateUser";
}
/**
* 修改数据
* @param person
* @return
*/
@PostMapping("/updateUser")
public String updateUser(Person person,Model model){
int i = personService.updatePerson(person);
if(i>0){
model.addAttribute("flageMsg","修改成功");
}else {
model.addAttribute("flageMsg","修改失败");
}
return "redirect:/user/userList";
}
/**
* 删除
* @param id
* @param model
* @return
*/
@GetMapping("/deleteUser")
public String deleteUser(int id,Model model){
int i = personService.deletePerson(id);
if(i>0){
model.addAttribute("flageMsg","删除成功");
return "redirect:/user/userList";
}else {
model.addAttribute("flageMsg","删除删除失败");
return "redirect:/user/userList";
}
}
/**
* 新增数据
* @param person
* @return
*/
@RequestMapping("/saveUser")
public ModelAndView saveUser(Person person){
ModelAndView modelAndView=new ModelAndView();
int i = personService.addPerson(person);
if(i>0){
modelAndView.addObject("flageMsg","新增成功");
}else {
modelAndView.addObject("flageMsg","新增失败");
}
//重新去请求数据
modelAndView.setViewName("redirect:/user/userList");
return modelAndView;
}
@RequestMapping("/addUserPage")
public String addUserPage(){
return "addUser";
}
}
第二步:创建userList.jsp
<%--
Created by IntelliJ IDEA.
User: Kingkang
Date: 2022/11/29
Time: 14:33
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.oyzk.entity.Person" %>
<%@ page import="java.util.List" %>
<html>
<head>
<title>用户列表</title>
</head>
<body>
<a href="addUserPage">添加用户</a>
<table class="table-hover table-bordered">
<tr>
<th>人员id</th>
<th>人员名字</th>
<th>人员电话</th>
<th>人员地址</th>
<th>操作</th>
</tr>
<%
if (request.getAttribute("userList") != null) {
%>
<%for (Person u : (List<Person>) request.getAttribute("userList")) {%>
<tr>
<td><%=u.getId()%>
</td>
<td><%=u.getUsername()%>
</td>
<td><%=u.getPhone()%>
</td>
<td><%=u.getAddress()%>
</td>
<td>
<a href="updateUserByIdPage?id=<%=u.getId()%>">修改</a>
<a href="deleteUser?id=<%=u.getId()%>">删除</a>
</td>
</tr>
<%}%>
<%}%>
</table>
</body>
</html>
第三步:创建addUser.jsp
<%--
Created by IntelliJ IDEA.
User: Kingkang
Date: 2022/11/29
Time: 14:42
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>添加用户</title>
</head>
<body>
<form method="post" action="/user/saveUser">
<p>用户名:<input name="username"></p>
<p>地址:<input name="address"></p>
<p>电话:<input name="phone"></p>
<p>
<button type="submit">添加</button>
</p>
<a href="/user/userList">用户列表</a>
</form>
</body>
</html>
第四步:创建updateUser.jsp
<%@ page import="com.oyzk.entity.Person" %><%--
Created by IntelliJ IDEA.
User: Kingkang
Date: 2022/11/29
Time: 14:46
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>修改用户</title>
</head>
<body>
<%
Person u = (Person)request.getAttribute("user");
%>
<form method="post" action="/user/updateUser">
<p>用户Id:<input name="id" value="<%=u.getId()%>" readonly></p>
<p>用户名:<input name="username" value="<%=u.getUsername()%>"></p>
<p>地址:<input name="address" value="<%=u.getAddress()%>"></p>
<p>电话:<input name="phone" value="<%=u.getPhone()%>"></p>
<p>
<button type="submit">确认修改</button>
</p>
<a href="/user/userList">用户列表</a>
</form>
</body>
</html>
第五步:页面效果
可以自己修改一下表格样式,这里修改了