maven+springMVC+mysql+mybatis+velocity+事务整合

花了一整天来从新研究这些框架的整合已经如何使用,先整理如下:

本文着手搭建SSM环境。主要过程如下:

1、搭建maven环境;

2、整合springMVC;

3、整合数据源(mysql);

4、整合mybatis;

5、整合velocity;

6、添加事务;


=============================================================================


1、搭建maven环境

在idea中使用maven搭建开发环境的过程不再说,这里只说明需要的依赖。

springMVC需要的依赖:

<!-- ========================mvc=========================== -->
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>4.3.2.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.3.2.RELEASE</version>
    </dependency>

dataSource需要的依赖:

<!-- ========================data source=========================== -->
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>6.0.2</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.3.0.RELEASE</version>
    </dependency>


mybatis需要的依赖:

<!-- ========================mybatis=========================== -->
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.0</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.1</version>
    </dependency>


velocity需要的依赖:

    <!-- ========================velocity=========================== -->
    <!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity -->
    <dependency>
      <groupId>org.apache.velocity</groupId>
      <artifactId>velocity</artifactId>
      <version>1.7</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity-tools -->
    <dependency>
      <groupId>org.apache.velocity</groupId>
      <artifactId>velocity-tools</artifactId>
      <version>2.0</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>4.3.2.RELEASE</version>
    </dependency>


2、整合springMVC

在web.xml配置文件中,以一个Servlet作为入口程序是绝大多数MVC框架都遵循的基本设计方案。这里的DispatcherServlet被我们称之为核心分发器,是SpringMVC最重要的类之一,它是springMVC框架的入口。

配置springMVC的入口:

    <!--  添加spring-mvc入口,并设置拦截所有请求  -->
    <servlet>
        <!--  <servlet-name>的值会作为springMVC配置文件名的一部分, 如mvc-servlet.xml  -->
        <servlet-name>mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>mvc</servlet-name>
        <!--  一般情况下,设置拦截所有的请求  -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

为支持中文,添加中文处理filter:

    <!--  为了能够处理中文的post请求,再配置一个encodingFilter,以避免post请求中文出现乱码情况  -->
    <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文件的初始化顺序为:context-param --> listener --> filter --> servlet,因此web.xml解析中文支持在springMVC入口之前。

在 webapp/WEB-INF下创建 mvc-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 http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">


    <!--  指明controller所在的包路径  -->
    <context:component-scan base-package="hu.azeroth.*" />

    <!--  开启注解  -->
    <mvc:annotation-driven />

    <!--  ViewResolver试图解析器。 用于支持Servlet,jsp页面解析  -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
        <!--<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>-->
        <property name="prefix" value="/WEB-INF/page/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>


到这里springMVC的配置文件配置好了,但是当url请求来到时,需要有控制的类以及相应的相应页面
添加controller类,用以控制接收到url请求。
在 main/src/java/ 目录下创建包:hu.azeroth.controller,在这个包下创建MyController类:

package hu.azeroth.controller;

import hu.azeroth.pojo.UserDO;
import hu.azeroth.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * Created by carrot on 16/9/4.
 */
// @Controller 用以将MyController类注册为 springMVC 中的控制类,这样url将会交由这里来处理
@Controller
public class MyController {

    @Autowired
    private UserService userService;

    // 主页
    // @RequestMapping 用以区分url,value值代表不同的url,这样不同的url将会传递到到不同的方法中
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String index() {
        return "index";
    }

    // 用户管理
    @RequestMapping(value = "/users", method = RequestMethod.GET)
    public String users(ModelMap modelMap) {

        List<UserDO> userDOList = userService.showUsers();
        // modelMap.put("userDOList", userDOList);
        modelMap.addAttribute("userDOList", userDOList);
        return "userManager";
    }

    // 添加用户表单页面
    @RequestMapping(value = "/addUser", method = RequestMethod.GET)
    public String addUser() {
        return "addUser";
    }

    // 添加用户处理
    // @RequestParam用以获取url中的参数,其中value的值为url中包含的参数名
    @RequestMapping(value = "/addUserDeal", method = RequestMethod.GET)
    public String addUserDeal(@RequestParam(value = "username") String userName, 
                              @RequestParam(value = "age") int age,
                              @RequestParam(value = "gender") String gender,
                              @RequestParam(value = "address") String address) {

        UserDO userDO = new UserDO(userName, age, gender, address);

        userService.addUser(userDO);

        return "redirect:/users";
    }

    // 查看用户信息
    @RequestMapping(value = "/showUserInfo/{userId}", method = RequestMethod.GET)
    public String showUserInfo() {

        return "userInfo";
    }

    // 更新用户信息页面
    @RequestMapping(value = "/updateUser/{userId}", method = RequestMethod.GET)
    public String updateUserInfo() {

        return "updateUser";
    }

    // 处理用户修改请求
    @RequestMapping(value = "/updateUserDeal", method = RequestMethod.GET)
    public String updateUserDeal() {

        return "redirect:/users";   //从定向
    }

    // 删除用户
    @RequestMapping(value = "/delUser/{userId}", method = RequestMethod.GET)
    public String delUser() {

        return "redirect:/users";
    }
}

注:以上我只用到了index 和 addUser方法,其他的没有用到,只是作为功能上使用的参考。

参见mvc-servlet.xml文件的配置:

<property name="prefix" value="/WEB-INF/page/"/>

在 webapp/WEB-INF/ 创建包 page,并在page包下创建 .jsp 文件。

注意,我们在 MyController类中每个方法中返回的String字符串,就是每个 .jsp 文件所返回的文件名。例如,index方法返回的“index”字符串,springMVC将会在配置的page包中查找 index.jsp 文件进行返回,若没有找到,则返回404.


这时,通过在地址栏输入MyController中每个@RequestMapping中的value所对应的url,就能精确匹配到某一个方法中。在每个方法中,我们可以调用Service层的服务来做些什么。


3、整合数据源(mysql)

以前的数据库连接信息是在代码中设置的,通过spring提供的数据源,我们可以很方便的将要连接的数据库信息配置在xml文件中,方便管理。

在mvc-servlet.xml文件中添加数据源配置:

    <!--  数据源  -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://127.0.0.1/db_user?useSSL=false"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>

这样spring就能自己连接并验证数据库,数据库的信息都通过配置文件来指定。


4、整合mybatis

有了数据源,那么mybatis的使用就彻底摆脱的对数据库操作的硬编码。除了我们还是用SQL语句来操纵数据库,其他的都是通过配置文件以及数据操作接口(dao层接口,没有实现)来实现都数据库的操作。

在 main/src/java 下创建包:hu/azeroth/dao ,在此包下创建:UserDao接口:

package hu.azeroth.dao;

import hu.azeroth.pojo.UserDO;
import java.util.List;

/**
 * Created by carrot on 16/9/4.
 */
public interface UserDao {

    boolean insert(UserDO userDO);

    List<UserDO> showUsers();
}

在mvc-servlet.xml文件中添加配置:

    <!--  配置mybatis  -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 配置mybatis配置文件的位置 -->
        <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
        <!-- 配置mapper文件的位置 -->
        <property name="mapperLocations" value="classpath*:mybatis/mapper/*.xml" />
        <!-- 配置数据源 -->
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <!-- 配置数据库操作接口 -->
        <property name="mapperInterface" value="hu.azeroth.dao.UserDao"/>
        <!-- 配置 sqlSessionFactory -->
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>

添加mybatis-config.xml  以及 mapper.xml文件:

在resource目录下,根据mvc-servlet中的配置,创建 包mapper 以及文件 mybatis-config.xml 文件,然后在mapper包下创建UserMapper.xml文件。

mybatis-config.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>
    <typeAliases>
        <!-- type为数据库操作接口层的完路径, alias为别名,在UserMapper中用到 -->
        <typeAlias alias="UserDO" type="hu.azeroth.pojo.UserDO"/>
    </typeAliases>
</configuration>


UserMapper.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">

<!-- namespace为命名空间,指定是与哪一个数据库操作接口映射 -->
<mapper namespace="hu.azeroth.dao.UserDao">

    <!-- type为在mybatis-config.xml文件中配置的别名 -->
    <resultMap id="UserResultMap" type="UserDO">
        <!-- property为POJO中的属性名, colum为在数据库中的字段名 -->
        <result property="userName" column="username"/>
        <result property="age" column="age"/>
        <result property="gender" column="gender"/>
        <result property="address" column="address"/>
    </resultMap>

    <!-- id为映射的数据库操作接口中的方法名 -->
    <insert id="insert" parameterType="UserDO">
       INSERT INTO tb_userinfo
       (username, age, gender, address)
       VALUES
       (#{userName}, #{age}, #{gender}, #{address})
    </insert>

</mapper>


5、整个velocity

velocity的存在,使得不像之前通过MyController类的方法返回对应的 jsp 文件一样,而是会通过配置去找对应名称的 .vm 文件。也就是说,不在去响应page目录下的对应的 jsp 文件,而是在在layout和templates目录下找对应的 .vm 文件。

在mvc-servlet.xml文件中配置velocity:

<!--  配置velocity  -->
    <bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
        <!-- 配置velocity的配置文件的位置 -->
        <property name="configLocation" value="/WEB-INF/velocity/velocity.properties" />
        <property name="resourceLoaderPath" value="/" />
    </bean>

    <bean id="viewResolverVelocity" class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver">
        <property name="cache" value="false"/>
        <property name="layoutUrl" value="/layout/main.vm" />
        <property name="prefix" value="/templates/" />
        <property name="suffix" value=".vm" />
        <property name="exposeSpringMacroHelpers" value="true" />
        <property name="contentType" value="text/html;charset=UTF-8" />
        <property name="screenContentKey" value="screen_placeholder"/>
        <property name="viewClass" value="org.springframework.web.servlet.view.velocity.VelocityLayoutView" />


跟据配置文件,在webapp/WEB-INF/下创velocity目录,并在其下创建layout、templates两个子目录,以及velocity.properties配置文件。

其中layout、templates目录中分别配置 .vm 文件,也就是说,以MyController类中的方法的返回值为文件名,创建 .vm 文件,比如说 index.vm 文件。

其次,配置velocity:

velocimacro.permissions.allow.inline=true
velocimacro.permissions.allow.inline.to.replace.global=true
velocimacro.permissions.allow.inline.local.scope=true
input.encoding=UTF-8
output.encoding=UTF-8
resource.loader=webapp, class
class.resource.loader.description=Velocity Classpath Resource Loader
class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
webapp.resource.loader.class=org.apache.velocity.tools.view.WebappResourceLoader
webapp.resource.loader.path=/WEB-INF/velocity/
webapp.resource.loader.cache=false

具体的 .vm 文件的配置视需求而定。


差不多就这多了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值