Spring+SpringMvc+Hibernate(SSH)+bootstrap/Jsp整合

3 篇文章 0 订阅
1 篇文章 0 订阅

前言:

准备工作:

  1. 安装并且配置jdk8运行环境
  2. 数据库配置安装mysql
  3. 安装并且配置tomcat8.5.xx
  4. maven
  5. 安装idea2020

最终项目的目录结构:

在这里插入图片描述

源码

ssh源码

一、使用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>
                                    &nbsp; ||&nbsp;
                                    <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>

第五步:页面效果

可以自己修改一下表格样式,这里修改了
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值