html5 spring mvc mybatis 架构,框架集成——SpringMVC与MyBatis集成(超详细)

SpringMVC与MyBatis是我们现在最流行的开发框架组合之一,这里我来整理一下框架的集成搭建过程

前言

使用IDE:IntelliJ IDEA

JDK:1.8

打开IDEA,新建maven工程

第一步:打开IDEA,点击Create New Project

5a9bd5d3358a557a1d651679fb46ce41.png

第二步:

选择新建一个Maven项目,然后从Maven项目模板工具包中选择常用的[maven-archetype-webapp]模板

在这个项目里,有WEB-INF目录,并且有web.xml和一个index.jsp ,选中之后,点击next下一步

dfa293d440653829f35853bd21e846c6.png

第三步:

输入maven的GroupId和ArtifactId,完成之后选择next

GroupID是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构。

ArtifactID是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。

4448e20853d25800c976151afbaf1313.png

第四步:

查看maven相关配置(一般如果没什么问题,可直接跳过,进行下一步)

9706801449048464f950757beea24524.png

第五步:

设置项目的名称和存放目录,输入完成后,点击Finish完成

f95ecf0efe4ab3b71759ba54f820d98a.png

第六步:

完成之后,打开项目,初始化结构如图所示,(maven的pom.xml结构改变时,记得点击右下角出现的:Import Changes)

3e9187a52d556ac54a7a99b165234cb2.png

完善项目目录结构

我们看到,通过maven模板建立的项目结构并不是我们常用的,此时,我们需要进行一些添加

a1937e53af627cca529abe673cce1a55.png

如果你新建的文件夹(比如java目录),没有被idea识别,你可以手动设置改变文件夹属性,操作如下

818b998e063978d318dacadb72fcd5a8.png

编辑maven的pom.xml文件,设置项目建造和引入相关依赖

我的pom.xml文件如下,具体写在注释里了

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.sample.ssm

sample-web

1.0-SNAPSHOT

war

1.8

1.8

4.2.3.RELEASE

junit

junit

4.11

test

org.slf4j

slf4j-api

1.7.7

ch.qos.logback

logback-core

1.1.7

ch.qos.logback

logback-classic

1.1.7

javax.servlet

javax.servlet-api

3.1.0

javax.servlet.jsp

jsp-api

2.2

taglibs

standard

1.1.2

jstl

jstl

1.2

com.alibaba

fastjson

1.2.38

org.springframework

spring-core

${spring-version}

org.springframework

spring-beans

${spring-version}

org.springframework

spring-context

${spring-version}

org.springframework

spring-web

${spring-version}

org.springframework

spring-webmvc

${spring-version}

org.springframework

spring-test

${spring-version}

org.hibernate

hibernate-validator

5.4.1.Final

mysql

mysql-connector-java

5.1.6

com.alibaba

druid

1.0.15

org.mybatis

mybatis

3.3.0

com.github.pagehelper

pagehelper

4.0.1

org.mybatis

mybatis-spring

1.2.3

org.springframework

spring-tx

${spring-version}

cglib

cglib

3.2.4

org.springframework

spring-jdbc

${spring-version}

tk.mybatis

mapper

3.3.9

org.mybatis.generator

mybatis-generator-core

1.3.3

sample-admin

src/main/java

**/*.properties

**/*.xml

false

src/main/resources

generator*.*

org.mybatis.generator

mybatis-generator-maven-plugin

1.3.3

src/main/resources/generatorConfig.xml

true

true

org.mybatis.generator

mybatis-generator-core

1.3.3

tk.mybatis

mapper

3.3.9

org.apache.maven.plugins

maven-surefire-plugin

2.19

true

-Dfile.encoding=UTF-8

org.apache.maven.plugins

maven-compiler-plugin

3.1

1.8

1.8

utf8

配置Spring,并且集成MyBatis

我们需要集成SpringMVC与MyBatis,所以,我们从ORM框架开始集成,最后在组建Spring MVC,一步一步来,不容易出错。Spring相关的文件这里统一放在resources的spring文件夹下。集成MyBatis的文件为spring-dao.xml,其中需要配置文件:mybatis-config.xml和单独提出数据库连接信息存放文件:jdbc.properties(记得修改自己的数据库连接信息)

spring-dao.xml

xmlns="http://www.springframework.org/schema/beans"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-4.0.xsd ">

classpath:jdbc.properties

init-method="init" destroy-method="close">

dialect=mysql

mappers=tk.mybatis.mapper.common.Mapper

jdbc.properties

#jdbc settings

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://127.0.0.1/sample-web?useUnicode=true&characterEncoding=utf-8

jdbc.username=root

jdbc.password=12345

#pool settings

jdbc.pool.init=1

jdbc.pool.minIdle=3

jdbc.pool.maxActive=20

#jdbc.testSql=SELECT 'x'

jdbc.testSql=SELECT 'x' FROM DUAL

mybatis-config.xml

/p>

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

构建数据结构

我们需要一个简单的数据进行测试,这里我就建立一张user_info表吧,

/*

Navicat MySQL Data Transfer

Source Server : 本地

Source Server Version : 50557

Source Host : 127.0.0.1:3306

Source Database : sample-web

Target Server Type : MYSQL

Target Server Version : 50557

File Encoding : 65001

Date: 2018-08-24 09:31:45

*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------

-- Table structure for user_info

-- ----------------------------

DROP TABLE IF EXISTS `user_info`;

CREATE TABLE `user_info` (

`user_id` int(11) NOT NULL AUTO_INCREMENT,

`user_name` varchar(255) NOT NULL,

PRIMARY KEY (`user_id`,`user_name`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of user_info

-- ----------------------------

INSERT INTO `user_info` VALUES ('1', '用户1');

INSERT INTO `user_info` VALUES ('2', '用户2');

MyBatis集成完成后,进行调试

在框架的集成过程中,我们得一步一步来,保证每一步都不会出错才能顺利得进行下去。现在,我们对user_info这个字段进行操作,主要是:建立实体类UserInfo.java,建立Mapper类,UserInfoMapper.java,建立映射文件UserInfoMapper.xml,具体分别如下:

UserInfo.java

package com.sample.ssm.model;

/**

* @author yuyufeng

* @date 2018/8/24.

*/

public class UserInfo {

private Integer userId;

private String userName;

public Integer getUserId() {

return userId;

}

public void setUserId(Integer userId) {

this.userId = userId;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

@Override

public String toString() {

return "UserInfo{" +

"userId=" + userId +

", userName='" + userName + '\'' +

'}';

}

}

UserInfoMapper.java

package com.sample.ssm.mapper;

import com.sample.ssm.model.UserInfo;

import org.apache.ibatis.annotations.Param;

/**

* @author yuyufeng

* @date 2018/8/24.

*/

public interface UserInfoMapper {

/**

* 根据ID获取单个对象

* @param userId

* @return

*/

UserInfo selectOne(@Param("userId") Integer userId);

}

UserInfoMapper.xml

user_id, user_name

SELECT user_id, user_name FROM user_info WHERE user_id = #{userId,jdbcType=INTEGER}

9390f2b03cf8f5cf339e71c63a5d4496.png

目前项目的结构如上图所示。

接着,我们需要使用Junit结合Spring进行调试:

在test目录下建立UserInfoMapperTest.java

package com.sample.ssm.mapper;

import com.sample.ssm.model.UserInfo;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**

* @author yuyufeng

* @date 2018/8/24.

*/

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration({"classpath:spring/spring-dao.xml"})

public class UserInfoMapperTest {

@Autowired

private UserInfoMapper userInfoMapper;

@Test

public void testSelectOne(){

UserInfo userInfo = userInfoMapper.selectOne(1);

System.out.println(userInfo);

}

}

执行调试debug:

a304e45e897fb94bfb1a9b0878c7d432.png

返回结果如下图所示:

3f33aadd2d4a0b7e38df065c0e9851f6.png

到这里,我们已经成功集成Spring+MyBatis了

集成Spring MVC

首先,我们还是在xml进行一些Spring MVC的基础配置,具体内容写在注释里

spring-web.xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-4.0.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">

class="org.springframework.format.support.FormattingConversionServiceFactoryBean">

class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">

validator="validator">

application/json

text/html;charset=UTF-8

QuoteFieldNames

class="org.springframework.web.servlet.view.InternalResourceViewResolver">

value="org.springframework.web.servlet.view.JstlView"/>

接着,我们需要在web项目启动的时候去加载这些Spring配置文件,打开web.xml,常用配置如下

web.xml

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_3_1.xsd"

version="3.1"

metadata-complete="false">

sample-web

encodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

forceEncoding

true

encodingFilter

/*

spring-mvc

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:spring/spring-*.xml

spring-mvc

/

建立Controller和jsp

UserController.class

package com.sample.ssm.action;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

/**

* @author yuyufeng

* @date 2018/8/24.

*/

@Controller

public class UserController {

@RequestMapping("/user")

private String toUser(){

return "user";

}

}

WEB-INF/jsp/user.jsp

Created by IntelliJ IDEA.

User: yuyufeng

Date: 2018/8/24

Time: 10:01

To change this template use File | Settings | File Templates.

--%>

用户信息

Hello 你好

配置Tomcat

第一步:选择编辑配置

d2528076f2fc4110d350dacbe8c4b514.png

第二步:选择使用过Tomcat

65a7b113522f90b5e8e534ac9565fa25.png

第三步:配置Tomcat信息

ad3da16af4c5f07c6ac3e20fa42a11f8.png

第四步:部署war包到Tomcat下

e09799ab12d96eee6ddc99aa80404cf0.png

选择exploded版本可以在运行过程中进行编译

c50e75b6ec917d7ee4da07470c3bf8c8.png

设置及时更新class文件,为了调试时编译

859fcc0b62a3c0a2148d33ba70b0bc50.png

第五步:点击debug启动tomcat

718d729fe26ffd75adfc36646d3d958c.png

启动成功后,打开浏览器,输入http://127.0.0.1:8080/user,打开网页,访问到如下图,

1951103d46fc17eb81d14a113f090dc0.png

此时此刻,Spring MVC已经部署完毕;

SpringMVC 与 MyBatis的使用

接下来,我们就要在Controller中使用Spring中已经集成的MyBatis了,在此,我们可以构建常用的目录,加入Service层

在service中,我们经常使用Spring集成的事务,此时,我们增加一个Spring配置

spring-service.xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-4.0.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">

此时的目录结构:

b30b9a7a169d77ff85594c0a653afb7a.png

现在,我们建立Service类,IUserService.java,UserServiceImpl.java

IUserService.java

package com.sample.ssm.service;

import com.sample.ssm.model.UserInfo;

/**

* @author yuyufeng

* @date 2018/8/24.

*/

public interface IUserService {

/**

* 根据userId获取用户

* @param userId

* @return

*/

UserInfo getUserInfoByUserId(Integer userId);

}

UserServiceImpl.java

package com.sample.ssm.service.impl;

import com.sample.ssm.mapper.UserInfoMapper;

import com.sample.ssm.model.UserInfo;

import com.sample.ssm.service.IUserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

/**

* @author yuyufeng

* @date 2018/8/24.

*/

@Service

public class UserServiceImpl implements IUserService{

@Autowired

private UserInfoMapper userInfoMapper;

@Override

public UserInfo getUserInfoByUserId(Integer userId) {

return userInfoMapper.selectOne(userId);

}

}

接着,在Controller中引用,

package com.sample.ssm.action;

import com.sample.ssm.model.UserInfo;

import com.sample.ssm.service.IUserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

/**

* @author yuyufeng

* @date 2018/8/24.

*/

@Controller

public class UserController {

@Autowired

private IUserService userService;

@RequestMapping("/user")

private String toUser(Model model,Integer userId){

UserInfo userInfo = userService.getUserInfoByUserId(userId);

model.addAttribute("user", userInfo);

return "user";

}

}

在jsp中,使用EL表达式接收:

Created by IntelliJ IDEA.

User: yuyufeng

Date: 2018/8/24

Time: 10:01

To change this template use File | Settings | File Templates.

--%>

用户信息

Hello 你好

用户ID:${user.userId}

用户NAME:${user.userName}

编辑完成后,重启Tomcat,打开地址http://127.0.0.1:8080/user?userId=1,效果如下

4acaa0f0770a06d7e8d4ae93a72ff628.png

到这里,SpringMVC与MyBatis集成基础已经完成,已经可以进行基本的开发了。至于更细的操作,比如使用generator生成Java代码,使用TKMybatis减少MyBatis开发过程中的代码编写,JSP项目的页面便于开发的结构等,都将集成在此项目的版本中,请待今后的文章更新吧。

代码地址:https://github.com/yuyufeng1994/sample-web-ssm/tree/v1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值