一步步教你搭建Spring MVC && Spring &&mybatis框架

时间:2022-02-21 03:20:52

一步步教你搭建Spring MVC && Spring &&mybatis框架

本文使用的是Spring 4.3.2

项目源码下载地址

转载请注明出处

0x01 创建工程

下载地址

解压后的截图

一步步教你搭建Spring MVC && Spring &&mybatis框架

新创建一个SpringTest的web project,将libs下的所有jar放到项目的WEB-INF/lib目录下

结果如图

一步步教你搭建Spring MVC && Spring &&mybatis框架

0x02 创建Spring MVC 的配置文件

在src目录下新建 SpringMVCConfig.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: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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd"
>

<!-- 注解驱动 -->
<mvc:annotation-driven>
</mvc:annotation-driven>
<!-- 自动装配 -->
<context:component-scan base-package="com.zdr.controller" />
<!--视图解析器 -->
<bean id="jspViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 加载静态资源 -->
<mvc:default-servlet-handler/>
</beans>
注解驱动:是可以自动将将请求的返回数据转换为JSON数据的工具,你可以直接将一些对象,集合返回给浏览器,这个驱动会自动将数据转换为JSON数据返回给浏览器。

自动装配:com.zdr.controller 的包是你自己创建的,Spring会自动扫描这个包下的所有带Controller注解的类。这个包下是所有controller的类,这些类不需要你自己去new就可以使用,是Spring MVC帮你管理的。

视图解析器:根据controller返回的数据,会去匹配相应的视图。Spring MVC会去/WEB-INF/pages/目录下找相应的.jsp文件。其中的pages目录是你自己创建的。

加载静态资源:有些静态资源例如图片,css不需要经过controlle的管理,所以需要做这个配置。

到这一步后,项目的结构如图

一步步教你搭建Spring MVC && Spring &&mybatis框架

0x03 加载Spring MVC 的配置文件。

在web.xml文件中添加下面的代码
<!-- spring mvc 配置 -->
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:SpringMVCConfig.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
其中 classpaths 指向的文件就是你在上一步创建的文件。

创建Controller

在 com.zdr.controller 包下新建一个java类,作为controller,代码如下
package com.zdr.controller;

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

@Controller
public class TestController {
@RequestMapping(value = "/test")
public String gotoIndex(){
return "/index";
}
}
@Controller:添加这个注解后Spring MVC便会将这个类当作controller处理。

@RequestMapping: 这个注解是用在controller的方法上的。value指定当你访问哪个路径时会执行该方法。比如要执行该方法需要访问的地址是 http://localhost:8080/SpringTest/test

return "/index": 一定要注意!!!这个返回值不要随便写。这个是跟你的视图解析器是对应的,在我的这个项目中,当执行完这句后,Spring MVC 会去 该项目的 /WEB-INF/pages/ 目录下,去寻找 index.jsp 的页面。如果没有的话会出现404的错误。还有,返回值不带.jsp,.html等后缀

0x04 创建视图

在 /WEB-INF/pages/ 目录下创建 index.jsp。一定要注意,跟上一步的返回值一样。

到这一步整个项目的结构如图

一步步教你搭建Spring MVC && Spring &&mybatis框架

访问下 http://localhost:8080/SpringTest/test试试吧。

0x05 返回字符串到浏览器

如果我们不希望跳转页面,希望返回一些字符串到浏览器,需要用到@ResponseBody注解。代码如下
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class TestController {
@RequestMapping(value = "/test")
@ResponseBody
public String gotoIndex(){
return "/index";
}
}
再次访问下试试看,一定要记得,每次修改了Controller都有重启tomcat。

0x06 返回 JSON 数据到浏览器

0x06.1 添加jackson包

下载地址

0x06.2 添加消息转换器

在 SpringMVCConfig.xml 中做如下修改
    <!-- 注解驱动 -->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class = "org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
</bean>
<bean class = "org.springframework.http.converter.StringHttpMessageConverter">
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
添加这句后会自动将返回的对象转换成JSON数据。

0x06.3 创建User类

public class User {
private String account;
private String pwd;

public User() {

}
//以及对应的get set方法,一定要有一个无餐的构造方法
}

0x06.4 Controller代码

    @RequestMapping(value = "/json")
@ResponseBody
public User getJSON(){
return new User("test","123456");
}
访问 http://localhost:8080/SpringTest/json

结果如图

一步步教你搭建Spring MVC && Spring &&mybatis框架

同样的方法你也可以返回List集合。

Spring MVC 告一段落,下面开始 Spring 。


0x07 Spring 工作流程

Spring 的工作流程是: 浏览器发出请求到Controller -> Controller 调用对应的Service执行 ->
Service 调用对应的dao层获得结果。然后再依次返回给浏览器。

0x08 创建 Spring 配置文件

在src目录下新建SpringConfig.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: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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd"
>

<!-- 自动装配 -->
<context:component-scan base-package="com.zdr.service" />
<context:component-scan base-package="com.zdr.dao" />
</beans>

0x09 加载 SpringConfig.xml 文件

在web.xml文件中添加下面的代码
<!-- spring 配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:SpringConfig.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

一定要将 Spring 配置放在 Spring MVC配置上面

自动装配的那两个包是你自己创建的。

正项目的结构如图

一步步教你搭建Spring MVC && Spring &&mybatis框架

0x0A 创建 dao

import java.util.List;
import com.zdr.entity.User;

public interface UserDao {
public List<User> findAllUsers();
}

//-----------我是分割线-----------

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Repository;

import com.zdr.dao.BaseDao;
import com.zdr.dao.baseDao.UserDao;
import com.zdr.entity.User;

@Repository
public class UserDaoImpl extends BaseDao implements UserDao{
//代码太多,不宜粘贴,源码已上传github
}
需要注意的是,每一个dao的实现类都需要添加@Repository注解。
BaseDao 主要实现了数据库的连接。

0x0B 创建 service

import java.util.List;

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

import com.zdr.dao.baseDao.UserDao;
import com.zdr.entity.User;

@Service
public class UserService {
@Autowired
private UserDao userDao;

public List<User> findAllUsers(){
return userDao.findAllUsers();
}
}
同样Service也需要添加@Service注解,@Autowired注解是用来自动生成Dao的,添加这个注解后,你便不需要自己创建userDao了。可以直接使用。

0x0C 修改 Controller代码

    //使用Spring 管理
@RequestMapping(value = "/getAllUsers")
@ResponseBody
public List<User> getAllUsers(){
return userService.findAllUsers();
}
记得重启tomcat

运行结果

一步步教你搭建Spring MVC && Spring &&mybatis框架

Spring 到这里就结束了,下面是myBatis


0x0D myBatis

下载地址请自行百度将相应的jar包导入项目

0x0E 创建 myBatis配置文件

在src目录下新建myBatisConfig.xml文件,代码如下
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
<properties resource = "jdbc.properties">
</properties>
<typeAliases>
<package name = "com.zdr.mapper.entity"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!-- 注册映射文件 -->
<mappers>
<mapper resource="com/zdr/mapper/UserMapper.xml" />
</mappers>
</configuration>
注意映射文件UserMapper.xml是你自己创建的。为了不与Spring混淆,这里采用了第二种配置文件。在src目录下创建jdbc.properties文件,代码如下
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/springTest
jdbc.username=root
jdbc.password=rootzdr

0x0F 创建UserMapper.xml文件

<!DOCTYPE mapper 
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.zdr.dao.baseDao.UserDao">
<select id = "findAllUsers" resultType = "User">
select account,pwd from users
</select>
</mapper>

0x10 写service

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.zdr.dao.baseDao.UserDao;
import com.zdr.entity.User;
import com.zdr.utils.SqlSessionFactoryUtil;

public class MyBatisUserService {

public List<User> findUsersByMybatis(){
SqlSession session= SqlSessionFactoryUtil.openSession();
UserDao userDao = session.getMapper(UserDao.class);
List<User> list= userDao.findAllUsers();
for(User u :list){
System.out.println(u.toString());
}
return list;
}
}

0x11 controller测试

    @RequestMapping(value = "/getUsers")
@ResponseBody
public List<User> getUsers(){
MyBatisUserService myService = new MyBatisUserService();
return myService.findUsersByMybatis();
}