MyBatis学习(四)MyBatis整合SpringMVC

8 篇文章 0 订阅
8 篇文章 0 订阅

MyBatis学习(四)MyBatis整合SpringMVC

示例工程:mybatis-mvc

本文档是本人在学习过程中的笔记,记录学习的过程,版权所有,转载请注明出处

1、环境搭建

1.1、新建Maven的web工程

1)使用IDEA新建一个maven的web工程,这里一定要是Web工程

2)手工新建src/main/java和src/main/resources文件夹以及src/test目录

3)工程的结构图如下:

├── docs
│   └── db.sql
├── mybatis-mvc.iml
├── pom.xml
├── README.md
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   ├── resources
    │   │   └── config
    │   └── webapp
    │       ├── index.jsp
    │       └── WEB-INF
    └── test
        ├── java
        │   └── com
        └── resources

1.2、配置pom文件

1)由于开发的是web应用,因此需要引入servlet-api相关的jar包

2)我们在jsp页面上需要使用的jstl相关的标签,这里也需要引入jstl的jar包,

3)pom.xml的部分内容如下:

  • pom.xml
<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<maven.compiler.source>1.8</maven.compiler.source>
	<maven.compiler.target>1.8</maven.compiler.target>
	<spring.version>4.3.26.RELEASE</spring.version>
	<spring.data.jpa.version>1.3.5.RELEASE</spring.data.jpa.version>
</properties>

<dependencies>
	<!-- 单元测试 -->
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.10</version>
		<scope>test</scope>
	</dependency>

	<!-- 引入mysql的数据库驱动 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.30</version>
	</dependency>

	<!-- 引入MyBatis的maven jar包 -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.4.6</version>
	</dependency>

	<!-- 引入MyBatis-Spring的包 -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis-spring</artifactId>
		<version>1.3.3</version>
	</dependency>

	<!-- 数据库连接池策略 -->
	<dependency>
		<groupId>commons-dbcp</groupId>
		<artifactId>commons-dbcp</artifactId>
		<version>1.4</version>
	</dependency>
	<dependency>
		<groupId>commons-collections</groupId>
		<artifactId>commons-collections</artifactId>
		<version>3.1</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-core</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-beans</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-jdbc</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework.data</groupId>
		<artifactId>spring-data-jpa</artifactId>
		<version>${spring.data.jpa.version}</version>
	</dependency>
	<!-- 引入web开发包 -->
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>jstl</artifactId>
		<version>1.2</version>
	</dependency>
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>javax.servlet-api</artifactId>
		<version>3.1.0</version>
		<scope>provided</scope>
	</dependency>
</dependencies>

1.3、新建数据库实体、Mapper、mapper.xml

1)我们这里使用前例中的数据库相关的内容,将相关资源copy过来,如下图:

在这里插入图片描述

1.4、详细代码

详细代码如下所示

  • StudentInfoDo
package com.iambest.study.entity;

import java.util.Objects;

/**
 * StudentInfoDo数据实体</br>
 *
 * <b>映射的是t_student_info数据库表的字段</b>
 *
 */
public class StudentInfoDo {

    private String id;

    private String name;

    private Integer age;

    private String sex;

    private String phone;

    private String email;

    private String rsv1;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getRsv1() {
        return rsv1;
    }

    public void setRsv1(String rsv1) {
        this.rsv1 = rsv1;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        StudentInfoDo that = (StudentInfoDo) o;
        return Objects.equals(id, that.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }

    @Override
    public String toString() {
        return "StudentInfoDo{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", phone='" + phone + '\'' +
                ", email='" + email + '\'' +
                ", rsv1='" + rsv1 + '\'' +
                '}';
    }
}
  • StudentInfoMapper
package com.iambest.study.mapper;

import com.iambest.study.entity.StudentInfoDo;

import java.util.List;

/**
 * 数据库Dao层
 */
public interface StudentInfoMapper {

    /**
     * 登记学生信息
     * @param studentInfoDo
     */
    public void addStudentInfo(StudentInfoDo studentInfoDo);

    /**
     * 更新学生信息
     * @param studentInfoDo
     */
    public void updateById(StudentInfoDo studentInfoDo);

    /**
     * 根据ID删除
     * @param id
     */
    public void deleteById(String id);

    /**
     * 根据ID进行查询
     * @param id
     * @return 查询的数据实体
     */
    public StudentInfoDo selectById(String id);

    /**
     * 查询所有的记录
     * @return
     */
    public List<StudentInfoDo> findAll();
}
  • StudentInfoMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iambest.study.mapper.StudentInfoMapper">

    <!-- 登记数据库表 -->
    <insert id="addStudentInfo" parameterType="com.iambest.study.entity.StudentInfoDo">
        insert into t_student_info (id,name,age,sex,phone,email,rsv1)
        values
        (#{id},#{name},#{age},#{sex},#{phone},#{email},#{rsv1})
    </insert>

    <!-- 根据ID更新数据库 -->
    <update id="updateById" parameterType="com.iambest.study.entity.StudentInfoDo">
        update t_student_info set NAME=#{name},AGE=#{age},SEX=#{sex},PHONE=#{phone},
        EMAIL=#{email},RSV1=#{rsv1} where ID=#{id}
    </update>

    <!-- 根据ID进行删除 -->
    <delete id="deleteById" parameterType="java.lang.String">
        delete from t_student_info where ID=#{id}
    </delete>

    <!-- 根据ID查询 -->
    <select id="selectById" resultType="com.iambest.study.entity.StudentInfoDo">
        select id,name,age,sex,phone,email,rsv1 from t_student_info where ID=#{id}
    </select>

    <select id="findAll" resultType="com.iambest.study.entity.StudentInfoDo">
        select id,name,age,sex,phone,email,rsv1 from t_student_info
    </select>

</mapper>

2、整合SpringMVC并实现页面显示

2.1、配置Spring的核心配置文件

我们将MyBatis与SpringMVC进行整合需要解决以下的几个问题:

1)配置数据源的连接池策略,这里我们使用的是dbcp

2)配置sqlSessionFactory

3)配置MapperScannerConfigurer,开启Mapper接口扫描,指定要扫描的包路径

4)开启Spring的注解扫描

5)开启RequestMapping自动映射

6)配置视图层的请求转发

7)配置web.xml文件,加入Spring的核心控制器

  • spring-mvc.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:jdbc="http://www.springframework.org/schema/jdbc"
	   xmlns:jee="http://www.springframework.org/schema/jee"
	   xmlns:tx="http://www.springframework.org/schema/tx"
	   xmlns:aop="http://www.springframework.org/schema/aop"
	   xmlns:mvc="http://www.springframework.org/schema/mvc"
	   xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
		http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
		http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/scmema/aop/spring-aop-3.2.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
		http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd">
		

		<!-- 引用我们的数据库的配置文件 -->
		<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
			<property name="location" value="classpath:config/db.properties"/>
		</bean>

		<!-- 配置数据源 -->
		<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
			<property name="driverClassName" value="${db.driver}" />
			<property name="url" value="${db.url}"/>
			<property name="username" value="${db.username}"/>
			<property name="password" value="${db.password}"/>
		</bean>

		<!-- 配置sqlSessionFactoryBean -->
		<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
			<property name="dataSource" ref="myDataSource"/>
			<!-- 扫描下面路径下的所有xml文件 -->
			<property name="mapperLocations" value="classpath:config/mapper/*.xml"/>
		</bean>

		<!-- 开启Mapper接口扫描 -->
		<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
			<property name="basePackage" value="com.iambest.study.mapper"/>
		</bean>


		<!-- 开启spring的注解扫描,自动扫描Controller组件 -->
		<context:component-scan base-package="com.iambest.study.controller;com.iambest.study.service"/>

		<!-- 开启RequestMapping自动映射 -->
		<mvc:annotation-driven/>

		<!-- 配置请求转发 -->
		<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
			<property name="prefix" value="/WEB-INF/"/>
			<property name="suffix" value=".jsp"/>
		</bean>

</beans>

2.2、编写Service层

1)我们这里按照通用的分层方式,编写Service层的代码,实现查找所有学生信息的功能

代码如下:

  • StudentInfoService
package com.iambest.study.service;

import com.iambest.study.entity.StudentInfoDo;
import com.iambest.study.mapper.StudentInfoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class StudentInfoService {

    @Autowired
    private StudentInfoMapper mapper;

    public List<StudentInfoDo> findAll(){
        return mapper.findAll();
    }
}

2.3、编写Controller

1)编写Controller,来实现请求的处理,在处理完成后将数据返回到页面上

controller的代码如下:

  • StudentController
package com.iambest.study.controller;

import com.iambest.study.entity.StudentInfoDo;
import com.iambest.study.service.StudentInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

/**
 *
 * 学生信息控制器
 *
 * @author zhangwei
 * @date 2020-06-03
 * @since 1.0.0
 * @version 1.0.0
 */
@Controller
@RequestMapping("/studentinfo")
public class StudentController {

    @Autowired
    private StudentInfoService studentInfoService;

    @RequestMapping("/student_list.do")
    public String find(Model model) {
        List<StudentInfoDo> list = studentInfoService.findAll();
        model.addAttribute("students",list);
        return "student_list";
    }
}

2.4、编写jsp页面

1)我们在spring-mvc.xml文件中已经配置了视图层的映射规则,因此我们这里需要在WEB-INF目录下新建一个名称为student_list.jsp的文件

2)在页面上,我们使用JSTL表达式循环展示后台的数据

student_list.jsp的内容如下:

  • student_list.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!doctype html>
<html>
<head>
    <title>学生信息列表</title>
</head>
<body>
    <table width="60%" border="1" cellpadding="2" cellspacing="0" align="center">
        <tr>
            <th>ID</th>
            <th>NAME</th>
            <th>AGE</th>
            <th>SEX</th>
            <th>PHONE</th>
            <th>EMAIL</th>
            <th>RSV1</th>
        </tr>
        <c:forEach items="${students}" var="student">
            <tr>
                <td>${student.id}</td>
                <td>${student.name}</td>
                <td>${student.age}</td>
                <td>${student.sex}</td>
                <td>${student.phone}</td>
                <td>${student.email}</td>
                <td>${student.rsv1}</td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

2.5、配置Web.xml文件

1)在web.xml中我们需要配置Spring的核心控制器DispatcherServlet

2)为了防止出现乱码的情况,需要配置一个字符过滤器

内容如下:

  • web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>mybatis-mvc</display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <!-- 配置spring的核心容器 -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:/config/spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!-- 拦截所有的.do请求 -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

    <!-- 配置字符集过滤器 -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>
</web-app>

2.6、部署到Tomcat并运行

1)在IDEA中配置好tomcat,并将我们的应用部署到Tomcat中,我会在另一篇文章中说明怎么配置

2)启动Tomcat,运行我们的webapp项目

Tomcat启动成功,控制台输出如下:

在这里插入图片描述

1)这时我们访问页面,内容展示如下,表示成功:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jack_David

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值