SSM 整合案例

这篇具有很好参考价值的文章主要介绍了SSM 整合案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Ssm整合

  • 注意事项
  1. Spring mvc+Spring+Mybatis+MySQL
  2. 项目结构,以web项目结构整合(还有maven、gradle)
  3. 整合日志、事务一个项目中
  4. Idea 2019、JDK12、Tomcat9、MySQL 5.5
  • 项目结构  D:\java\Idea\Idea_spacework\SSMhzy:不会就去找项目案例重新学习
  1. web项目为主结构,建立web目录,目录下有index.jsp和WEB-INF目录,WEB-INF目录可以放JSP文件。
  2. 配置文件建立在src目录下,Spring 容器配置文件bean.xml、Spring mvc请求处理配置springmvc-servlet.xml、Mybatis核心配置文件SqlConfig.xml。
  3. 程序代码存放位置,src目录下, 创建不同的包,dao、controller、service、pojo、util包存放不同的Java类
  4. JSP文件存放位置,WEB-INF目录下创建一个jsp目录,此目录下存储。
  5. 静态资源存放位置,在web目录下,和WEB-INF同一级目录创建res目录。

SSM 整合案例

 

  • 引入jar包
  1. Spring、springmvc基础包及其依赖包
  2. Mybatis核心包及其依赖包
  3. 数据库驱动程序包
  4. 采用C标签,需要jstl-1.2.jar
  5. 引入spring框架和mybaits框架结合的jar,mybatis-spring-1.3.0.jar

SSM 整合案例

 

  • 配置Tomcat服务器

SSM 整合案例

 

  • 配置项目结构

SSM 整合案例

SSM 整合案例

 

 

  • 配置文件
  1. web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
<!--    spring mvc 核心控制器配置-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:bean.xml</param-value>
    </context-param>
<!--    spring容器上下文环境-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
<!--        spring mvc 的配置文件,放在当前项目src文件夹下-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
<!--        spring mvc 的配置文件表示启动时优先加载本文件-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
<!--    编码过滤器-->
    <filter>
        <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

  1. bean.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
    <!--    开启Spring注解-->
    <context:component-scan base-package="inter.service"/>
    <!--    初始化数据源-->
    <bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/school"></property>
        <property name="username" value="root"></property>
        <property name="password" value="root"></property>
    </bean>
<!--        配置mybatissqlSessionFactory-->
        <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!--扫描entity下的实体,方便mapper下的xml中使用别名,列如Depth则会找到zr.ssm.entity.Dept-->
            <property name="typeAliasesPackage" value="inter.pojo"/>
            <!--配置数据库连接池-->
            <property name="dataSource" ref="dataSource"/>
            <!--显示控制台SQL语句-->
            <property name="configLocation" value="classpath:sqlConfig.xml"></property>
            <!--自动扫描mapper下的XX.xml 文件-->
            <property name="mapperLocations" value="classpath:inter/dao/*.xml"/>
        </bean>
        <!--DAO接口所在包名,Spring会自动查找其它的类并注入到Spring的容器中-->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="inter.dao"/>
        </bean>
</beans>

  1. Springmvc-servlet.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:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
         https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--    spring 开启注解-->
    <context:component-scan base-package="inter.controller"/>

    <!--    视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--        前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--        后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>
<!--    静态资源处理器-->
    <!--        静态资源访问-->
    <mvc:annotation-driven></mvc:annotation-driven>
    <!--    mapping 用户访问的URL路径;location:文件真实存放的路径-->
    <mvc:resources mapping="/css/**" location="/res/css/"/>
    <mvc:resources mapping="/js/**" location="/res/js/"/>
    <mvc:resources mapping="/img/**" location="/res/img/"/>
</beans>

  1. SqlConfig.xml

   <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--定义在控制台上面输出sql语句-->
<settings>
    <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
    <typeAliases>
        <typeAlias type="inter.pojo.User" alias="User"></typeAlias>
    </typeAliases>
</configuration>

  • 代码

包结构: inter

-->

controller

-->service

-->pojo

-->dao

-->util

Controller层下面的代码

package inter.controller;

import inter.pojo.StuTable;
import inter.pojo.eduCation;
import inter.service.EduService;
import inter.service.StuTableService;
import inter.util.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

@Controller
public class StuTableController {
    @Autowired
    StuTableService stuTableService;
    @Autowired
    EduService eduService;
    //新增数据页面
    @RequestMapping(value = "/insertStuT")
    public ModelAndView insertStuT() {
        ModelAndView mv  = new ModelAndView();
        List<eduCation> eduList = eduService.showAllEdu();
        mv.addObject("eduList",eduList);
        mv.setViewName("insertStuT");
        return mv;
    }

    //保存新增数据
    @RequestMapping(value = "/saveStuT")
    public ModelAndView saveStuT(StuTable stuTable) {
        int num = stuTableService.saveStuT(stuTable);
        ModelAndView mv = new ModelAndView();
        mv.setViewName("redirect:stuList");
        return mv;
    }

    //显示所有记录
    @RequestMapping(value = "/stuList")
    public ModelAndView showAllStu(String pageNow,StuTable stuTable) {
        ModelAndView mv = new ModelAndView();
        try {
            //获取总行数
            int totalCount = stuTableService.stuCount();
            Page page = null;

            if (pageNow!=null){
                page = new Page(totalCount,Integer.parseInt(pageNow));
            }else {
                page = new Page(totalCount,1);
            }
            StuTable stu = new StuTable();
            stu.setPageSize(page.getPageSize());
            stu.setStart(page.getStartPos());
            if (stuTable.getTel()!=null){
                stu.setTel(stuTable.getTel());
            }
            if (stuTable.getSname()!=null){
                stu.setTel(stuTable.getSname());
            }
            List<StuTable> list = stuTableService.showAllStu(stu);
            List<eduCation> eduList = eduService.showAllEdu();
            mv.addObject("eduList",eduList);
            mv.addObject("list", list);
            mv.addObject("page",page);
            mv.setViewName("stuList");
        }catch (Exception e){
            e.printStackTrace();
        }
        return mv;
    }

    //删除记录
    @RequestMapping(value = "/delStut")
    public ModelAndView delStu(int bh) {
        int sta = stuTableService.delStu(bh);
        ModelAndView mv = new ModelAndView();
        if (sta > 0) {
            mv.setViewName("redirect:stuList");
        }
        return mv;
    }

    //根据编号显示一条记录
    @RequestMapping(value = "/editStu1")
    public ModelAndView getStuByBh(int bh) {
        ModelAndView mv = new ModelAndView();
        StuTable stu1 = stuTableService.getStuByBh(bh);
        List<eduCation> eduList = eduService.showAllEdu();
        mv.addObject("eduList",eduList);
        mv.addObject("stu", stu1);
        mv.setViewName("editStu");
        return mv;
    }

    //修改数据
    @RequestMapping(value = "/updateStu")
    public String updateStu(StuTable stuTable) {
        int sta1 = stuTableService.updateStu(stuTable);
        return "redirect:stuList";//重定向,自动携带数据
    }
    //显示详情页面
    @RequestMapping (value = "/tipStu")
    public ModelAndView tipStu(int bh){
        ModelAndView mv = new ModelAndView();
        StuTable stu2 = stuTableService.getStuByBh(bh);
        mv.addObject("stu1", stu2);
        mv.setViewName("tipStu");
        return mv;
    }



}

Service下面的代码


package inter.service;

import inter.dao.IStuTableDao;
import inter.pojo.StuTable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class StuTableService {
    @Autowired
    IStuTableDao tableDao;
    //新增
    @Transactional
    public int saveStuT(StuTable stu){
        int num = tableDao.saveStuT(stu);
        return num;
    }
    //显示所有
    public List<StuTable> showAllStu(StuTable stuTable) {
        return tableDao.showAllStu(stuTable);
    }
    //删除记录
    public int delStu(int bh){
        return tableDao.delStu(bh);
    }
    //显示一条记录
    public StuTable getStuByBh(int bh){
        return tableDao.getStuByBh(bh);
    }
    //修改
    public int updateStu(StuTable stuTable){
        return  tableDao.updateStu(stuTable);
    }
    //显示记录数
    public int stuCount(){
        return tableDao.stuCount();
    }


    public IStuTableDao getTableDao() {
        return tableDao;
    }

    public void setTableDao(IStuTableDao tableDao) {
        this.tableDao = tableDao;
    }
}

 Pojo 代码

package inter.pojo;

public class StuTable {
    private int bh;
    private String sname;
    private String tel;
    private String birthday;
    private String gender;
    private String xl;
    private double cj;
    private String grqk;
    //下面两个参数,只是供传参使用
    private int start;//索引开始位置
    private int pageSize;//数据显示记录数

    public int getStart() {
        return start;
    }

    public void setStart(int start) {
        this.start = start;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getBh() {
        return bh;
    }

    public void setBh(int bh) {
        this.bh = bh;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getXl() {
        return xl;
    }

    public void setXl(String xl) {
        this.xl = xl;
    }

    public double getCj() {
        return cj;
    }

    public void setCj(double cj) {
        this.cj = cj;
    }

    public String getGrqk() {
        return grqk;
    }

    public void setGrqk(String grqk) {
        this.grqk = grqk;
    }
}

Dao 代码

package inter.dao;

import inter.pojo.StuTable;

import java.util.List;

public interface IStuTableDao {
    //数据保存
    int saveStuT(StuTable stuTable);

    //显示所有
    List<StuTable> showAllStu(StuTable stuTable);

    //删除
    int delStu(int bh);

    //根据编号显示一条记录
    StuTable getStuByBh(int bh);

    //修改
    int updateStu(StuTable stuTable);

    //显示记录数
    int stuCount();


}

Util 工具类 里面


package inter.util;

public class Page {
    private int pageNow=1; //当前页数
    private int pageSize=5; //每页显示的数量
    private int totalCount; //总记录数
    private int totalPageCount; //总页数
    private int startPos; //开始位置,从0开始
    private boolean hasFrist; //是否有首页
    private boolean hasPre; //是否有前一页
    private boolean hasNext; //是否有后一页
    private boolean hasLast; //是否有尾页 /**

    //通过构造函数,传入总记录数和当前页
    public Page(int totalCount, int pageNow){
        this.totalCount=totalCount;
        this.pageNow=pageNow;
    }
    //获取总页数
    public int getTotalPageCount() {
        totalPageCount=getTotalCount()/getPageSize();
        return (totalCount%pageSize==0)?totalPageCount:totalPageCount+1;
    }
    public void setTotalPageCount(int totalPageCount) {
        this.totalPageCount = totalPageCount;
    }

    //获取选择记录的初始位置
    public int getStartPos() {
        return (pageNow-1)*pageSize;
    }

    public void setStartPos(int startPos) {
        this.startPos = startPos;
    }
    //判断是否有第一页
    public boolean isHasFrist() {
        return (pageNow==1) ? false:true;
    }
    public void setHasFrist(boolean hasFrist) {
        this.hasFrist = hasFrist;
    }
    //如果有首页就有前一页
    public boolean isHasPre() {
        return isHasFrist() ? true:false;
    }
    public void setHasPre(boolean hasPre) {
        this.hasPre = hasPre;
    }
    //如果有尾页就有下一页
    public boolean isHasNext() {
        return isHasNext() ? true:false;
    }
    public void setHasNext(boolean hasNext) {
        this.hasNext = hasNext;
    }
    //判断是否有尾页
    public boolean isHasLast() {
        return (pageNow==getTotalCount()) ? false:true;
    }
    public void setHasLast(boolean hasLast) {
        this.hasLast = hasLast;
    }


    public int getPageNow() {
        return pageNow;
    }

    public void setPageNow(int pageNow) {
        this.pageNow = pageNow;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }


}

JSP 页面代码部分

修改页面

<%@ page import="inter.pojo.StuTable" %><%--
  Created by IntelliJ IDEA.
  User: shun
  Date: 2023/6/6
  Time: 20:18
  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>
</head>
<body>
<form method="post" action="/updateStu">
<table border="1" cellpadding="16" cellspacing="0">
    <tr>
        <th colspan="2">修改页面</th>
    </tr>
    <tr>
        <th>编号</th>
        <td>
            ${stu.bh}
            <input type="hidden" name="bh" value="${stu.bh}">
        </td>
    </tr>
    <tr>
        <th>姓名</th>
        <td>
            <input type="text" placeholder="请输入姓名" name="sname" value="${stu.sname}">
        </td>
    </tr>
    <tr>
        <th>电话</th>
        <td>
            <input type="text" placeholder="请输入电话" name="tel" value="${stu.tel}">
        </td>
    </tr>
    <tr>
        <th>生日</th>
        <td>
            <input type="text" placeholder="请输入生日" name="birthday" value="${stu.birthday}">
        </td>
    </tr>
    <tr>
        <th>性别</th>
        <td>
            <c:if test="${stu.gender==1}">
                <input type="radio" name="gender" value="1"  checked>
                <input type="radio" name="gender" value="0">
            </c:if>
            <c:if test="${stu.gender==0}">
                <input type="radio" name="gender" value="1">
                <input type="radio" name="gender" value="0" checked>
            </c:if>
        </td>
    </tr>
    <tr>
        <th>学历</th>
        <td>
                <select name="xl">
                    <c:forEach items="${eduList}" var="edu">
                    <option value="${edu.edubh}" <c:if test="${edu.edubh==stu.xl}">selected</c:if>>${edu.eduname}</option>
                    </c:forEach>
                </select>
        </td>
    </tr>
    <tr>
        <th>成绩</th>
        <td>
            <input type="text" placeholder="请输入成绩" name="cj" value="${stu.cj}">
        </td>
    </tr>
    <tr>
        <th>个人情况</th>
        <td>
            <input type="text" placeholder="请输入个人情况" name="grqk" value="${stu.grqk}">
        </td>
    </tr>
    <tr>
        <th>修改</th>
        <td>
            <input type="submit" value="修改">
        </td>
    </tr>
</table>
    </form>
</body>
</html>

新增页面

<%--
  Created by IntelliJ IDEA.
  User: shun
  Date: 2023/6/5
  Time: 19:54
  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>
</head>
<body>
    <h1>用户输入</h1>
    <form action="/saveStuT" method="post">
        <input type="text" name="sname" placeholder="请输入姓名"><br>
        <input type="text" name="tel" placeholder="请输入手机号"><br>
        <input type="text" name="birthday" placeholder="请输入出生日期"><br>
        <input type="radio" value="1" name="gender">
        <input type="radio" value="0" name="gender"><br>
        <select name="xl">
            <c:forEach items="${eduList}" var="eduList">
                <option value="${eduList.edubh}">${eduList.eduname}</option>
            </c:forEach>
        </select>
        <br>
        <input type="text" name="cj" placeholder="请输入成绩"><br>
        <input type="text"  name="grqk" placeholder="请输入个人情况"><br>
        <input type="submit" value="保存">
    </form>
</body>
</html>

显示页面

<%--
  Created by IntelliJ IDEA.
  User: shun
  Date: 2023/6/6
  Time: 19:48
  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>
    <style>
        a {
            text-decoration: none;
            font-size: 20px;
        }
    </style>
</head>
<body>
<table border="1px" cellspacing="0" cellpadding="10" align="center">
    <tr>
        <th colspan="8">
            <a href="/insertStuT">新增数据</a>
            <form method="post" action="/stuList" style="display:inline-block">
                <input type="text" name="username" placeholder="请输入查询姓名">
                <input type="text" name="tel" placeholder="请输入查询电话">
                <input type="submit" value="查询"/>
            </form>
        </th>
    </tr>
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>电话</th>
        <th>性别</th>
        <th>学历</th>
        <th>成绩</th>
        <th>个人情况</th>
        <th>操作</th>
    </tr>
    <c:forEach items="${list}" var="stu">
        <tr>
            <td>${stu.bh}</td>
            <td>${stu.sname}</td>
            <td>${stu.tel}</td>
            <td>
                <c:if test="${stu.gender==1}">
                    
                </c:if>
                <c:if test="${stu.gender==0}">
                    
                </c:if>
            </td>
            <td>
                <c:forEach items="${eduList}" var="edu">
                    <c:if test="${edu.edubh==stu.xl}">
                        ${edu.eduname}
                    </c:if>
                </c:forEach>
            </td>
            <td>${stu.cj}</td>
            <td>${stu.grqk}</td>
            <td>
                <a href="/delStut?bh=${stu.bh}">删除</a>
                <a href="/editStu1?bh=${stu.bh}">修改</a>
                <a href="/tipStu?bh=${stu.bh}">详情</a>
            </td>
        </tr>
    </c:forEach>
    <tr>
        <td colspan="8">
            <div style="text-align: center">
                <font size=2>
                    ${page.totalPageCount}
                </font>
                <font size=2>
                    ${page.pageNow}
                </font>
                <a href="/stuList?pageNow=1">首页</a>
                <c:choose>
                    <c:when test="${page.pageNow - 1 > 0}">
                        <a href="/stuList?pageNow=${page.pageNow - 1}">上一页</a>
                    </c:when>
                    <c:when test="${page.pageNow - 1 <= 0}">
                        <a href="/stuList?pageNow=1">上一页</a>
                    </c:when>
                </c:choose>
                <c:choose>
                    <c:when test="${page.totalPageCount==0}">
                        <a href="/stuList?pageNow=${page.pageNow}">下一页</a>
                    </c:when>
                    <c:when test="${page.pageNow + 1 < page.totalPageCount}">
                        <a href="/stuList?pageNow=${page.pageNow + 1}">下一页</a>
                    </c:when>
                    <c:when test="${page.pageNow + 1 >= page.totalPageCount}">
                        <a href="/stuList?pageNow=${page.totalPageCount}">下一页</a>
                    </c:when>
                </c:choose>
                <c:choose>
                    <c:when test="${page.totalPageCount==0}">
                        <a href="/stuList?pageNow=${page.pageNow}">尾页</a>
                    </c:when>
                    <c:otherwise>
                        <a href="/stuList?pageNow=${page.totalPageCount}">尾页</a>
                    </c:otherwise>
                </c:choose>
            </div>
        </td>
    </tr>
</table>
</body>
</html>

详细页面

<%--
  Created by IntelliJ IDEA.
  User: shun
  Date: 2023/6/6
  Time: 20: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>
<table border="1" cellpadding="16" cellspacing="0">
    <tr>
        <th colspan="2">详细页面</th>
    </tr>
    <tr>
        <th>编号</th>
        <td>
            ${stu1.bh}
        </td>
    </tr>
    <tr>
        <th>姓名</th>
        <td>
           ${stu1.sname}
        </td>
    </tr>
    <tr>
        <th>电话</th>
        <td>
           ${stu1.tel}
        </td>
    </tr>
    <tr>
        <th>生日</th>
        <td>
          ${stu1.birthday}
        </td>
    </tr>
    <tr>
        <th>性别</th>
        <td>
          ${stu1.gender}
        </td>
    </tr>
    <tr>
        <th>学历</th>
        <td>
            ${stu1.xl}
        </td>
    </tr>
    <tr>
        <th>成绩</th>
        <td>
            ${stu1.cj}
        </td>
    </tr>
    <tr>
        <th>个人情况</th>
        <td>
          ${stu1.grqk}
        </td>
    </tr>
</table>
</body>
</html>

  • 运行

使用Tomcat运行,在浏览器中显示

显示页面

SSM 整合案例

 

新增数据页面

SSM 整合案例

 

修改页面

SSM 整合案例

 

详细页面

SSM 整合案例

 

  • 配置日志

在src下创建一个log4j.properties文件配置日志

# Global logging configuration
log4j.rootLogger = DEBUG,stdout
#Console output...
log4j.appender.stdout= org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

  • 配置事务

在 bean.xml 文件中配置


  <!--扫描事务管理器,创建一个事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
<!--    开启事务注解,标注@Transactional的类和方法将具有事务性
    那些方法需要事务就在那个方法上写一个@Transactional 这个标记
-->
<!--    注解方式配置事务-->
    <tx:annotation-driven transaction-manager="transactionManager"/>
文章来源地址https://www.toymoban.com/news/detail-490584.html

到了这里,关于SSM 整合案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux mount命令教程:详解文件系统挂载操作(附案例详解和注意事项)

    mount 命令在Linux中用于挂载Linux系统外的其它文件系统,每一个设备都必须先挂载后才能使用。此命令通常在系统引导时由系统启动脚本自动执行。 mount 命令在所有主流的Linux发行版中都是可用的,包括但不限于Debian、Ubuntu、Alpine、Arch Linux、Kali Linux、RedHat/CentOS、Fedora和Raspb

    2024年03月14日
    浏览(82)
  • Linux grep命令教程:强大的文本搜索工具(附案例详解和注意事项)

    grep (Global Regular Expression Print)命令用来在文件中查找包含或者不包含某个字符串的行,它是强大的文本搜索工具,并可以使用正则表达式进行搜索。当你需要在文件或者多个文件中搜寻特定信息时,grep就显得无比重要啦。 grep命令在几乎所有的Linux发行版中都可以使用。以下是

    2024年01月18日
    浏览(48)
  • Linux cp命令教程:如何复制文件和目录(附案例详解和注意事项)

    cp 命令在Linux中用于复制文件或目录。它的全称是 copy ,意为复制。使用 cp 命令,你可以将文件或目录从一个位置复制到另一个位置。 cp 命令在所有主流的Linux发行版中都是可用的,包括但不限于Ubuntu, Debian, Fedora, CentOS等。在大多数系统中, cp 命令是预装的,无需额外安装。

    2024年02月03日
    浏览(110)
  • Linux comm命令教程:对比和分析文件内容(附案例详解和注意事项)

    comm ,又称为_compare common lines_命令,是一个简易的Linux文件比较工具,主要用于标识出两个已排序文件中的共同部分。该命令逐行比较两个文件,并以三列形式显示结果。 通常, comm 命令在所有的Linux发行版上都是可用的,这包括但不限于Ubuntu、Debian、CentOS,以及Fedora等。在

    2024年01月19日
    浏览(40)
  • Linux ping命令教程:如何检查网络连接状况(附案例详解和注意事项)

    Ping(Packet Internet Groper)命令用于检测主机。通过发送Internet控制消息协议( ICMP )Echo数据包到目标主机,检测目标主机是否可达。如果互联网上两个主机之间可以通信,并且没有防火墙阻止这种通信,那么ping命令在一个主机上可以成功地ping另一个主机。因此,你可以使用pin

    2024年01月25日
    浏览(56)
  • Spring Data Elasticsearch 一些异常报错、注意事项(1)

    记录一:批量更新数据saveAll 引入maven依赖  saveAll批量新增,如果数据存在则会更新数据 记录二:批量更新数据Script脚本更新字段 参考:Script query | Elasticsearch Guide [8.5] | Elastic 记录三:空字段查询处理 如果查询字段createTime在ES数据中不存在,直接用.must(QueryBuilders.rangeQuery(

    2024年02月11日
    浏览(47)
  • Linux tar命令教程:文件打包和压缩的神器(附案例详解和注意事项)

    tar(Tape ARchive),用于在linux中打包和备份文件。它可以将多个文件和目录打包成一个tar文件,也可以从tar文件中提取文件和目录。此外,它还可以与gz,bzip2,xz等压缩工具结合使用,进行文件和目录的压缩和解压。 tar命令在各个Linux发行版中均通用。包括但不限于 Ubuntu、

    2024年01月17日
    浏览(57)
  • Linux ls命令教程:如何有效地列出文件和目录(附案例详解和注意事项)

    ls 是Linux中的基本命令之一,任何Linux用户都应该知道。 ls 命令列出文件系统中的文件和目录,并显示有关它们的详细信息。它是所有Linux发行版都安装的GNU核心实用程序包的一部分。 ls 命令在所有Linux发行版中都是可用的,包括但不限于Ubuntu, Debian, Fedora, CentOS等。如果你发现

    2024年02月04日
    浏览(51)
  • Linux exit命令教程:如何优雅地退出你的Shell(附案例详解和注意事项)

    Linux的exit命令用于退出当前运行的shell。它可以接受一个参数[N],并以状态N退出shell。如果没有提供n,则它只返回最后执行的命令的状态。 exit命令是内置在所有Linux发行版中的,包括但不限于Ubuntu、Debian、Fedora、RHEL、SUSE、Arch等。因此,无论你使用哪个Linux发行版,你都可以

    2024年02月04日
    浏览(50)
  • Linux rm命令教程:如何安全有效地删除文件和目录(附案例详解和注意事项)

    rm 命令在Linux中主要用于删除文件或目录。 rm 的全称是 remove ,意为移除。它是Linux用户在使用过程中最常遇到的命令之一。 rm 命令在所有的Linux发行版中都是可用的,包括但不限于Ubuntu, Debian, Fedora, CentOS等。在不同的Linux发行版中, rm 命令的使用方法是一样的。 rm 命令的基

    2024年02月03日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包