Spring+Mybatis+Velocity

前言

最近开始尝试使用久负盛名的SM框架——Spring+Mybatis进行Web开发,从此走上了Spring配置的不归路。说句实在话,Spring是我特么见过所有WEB工程里面最难配的,因为必须要对它那一套非侵入的设计思想有所了解才能在出问题时迅速判断是不是配置错误,进而定位配置错误所在。首先,做个简单的总结,Spring的配置现在大致有三种:

XML配置,时间最长,最主流,也最恶心的配置方法

使用配置类+注解,推出有一段时间了,用的人不多,与其他框架集成的时候大部分还是绕不过XML。个人觉得没啥卵用。

Spring4新推出的Boot,对新手是友好了,但是不利于了解这个框架,而且遇到问题能查的资料少

综上,我最后还是选择了XML作为开发的标配,下面以 Spring+Mybatis配置作为示例

Maven依赖文件——pom.xml

没啥好讲的,java程序员都知道

1<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 3    <modelVersion>4.0.0</modelVersion> 4    <groupId>suemi</groupId> 5    <artifactId>sbeat</artifactId> 6    <packaging>war</packaging> 7    <version>0.0.1-SNAPSHOT</version> 8    <name>SBEAT</name> 9    <url>http://maven.apache.org</url> 10 11    <properties> 12        <mysql.connector.version>5.1.21</mysql.connector.version> 13        <spring.version>4.1.6.RELEASE</spring.version> 14        <junit.version>4.12</junit.version> 15        <velocity.version>1.6.1</velocity.version> 16        <velocity.tools.version>2.0</velocity.tools.version> 17        <mock.version>2.0.8</mock.version> 18        <mybatis.version>3.3.0</mybatis.version> 19        <mybatis-spring.version>1.2.2</mybatis-spring.version> 20    </properties> 21 22    <dependencies> 23 24        <!-- velocity --> 25        <dependency> 26            <groupId>org.springframework</groupId> 27            <artifactId>spring-context-support</artifactId> 28            <version>${spring.version}</version> 29        </dependency> 30        <dependency> 31            <groupId>org.apache.velocity</groupId> 32            <artifactId>velocity</artifactId> 33            <version>${velocity.version}</version> 34        </dependency> 35        <dependency> 36            <groupId>org.apache.velocity</groupId> 37            <artifactId>velocity-tools</artifactId> 38            <version>${velocity.tools.version}</version> 39        </dependency> 40 41        <!-- jsp support --> 42        <dependency> 43            <groupId>javax.servlet</groupId> 44            <artifactId>javax.servlet-api</artifactId> 45            <version>3.1.0</version> 46            <scope>provided</scope> 47        </dependency> 48 49        <dependency> 50            <groupId>javax.servlet</groupId> 51            <artifactId>jstl</artifactId> 52            <version>1.2</version> <!-- just used the latest version, make sure you use the one you need --> 53            <scope>provided</scope> 54        </dependency> 55 56        <!-- test support --> 57        <dependency> 58            <groupId>junit</groupId> 59            <artifactId>junit</artifactId> 60            <version>${junit.version}</version> 61            <scope>test</scope> 62        </dependency> 63 64        <dependency> 65            <groupId>org.springframework</groupId> 66            <artifactId>spring-test</artifactId> 67            <version>${spring.version}</version> 68        </dependency> 69 70 71 72        <!-- mybatis support --> 73        <dependency> 74            <groupId>org.mybatis</groupId> 75            <artifactId>mybatis</artifactId> 76            <version>${mybatis.version}</version> 77        </dependency> 78 79        <dependency> 80            <groupId>org.mybatis</groupId> 81            <artifactId>mybatis-spring</artifactId> 82            <version>${mybatis-spring.version}</version> 83        </dependency> 84 85        <dependency> 86            <groupId>org.apache.commons</groupId> 87            <artifactId>commons-dbcp2</artifactId> 88            <version>2.0</version> 89        </dependency> 90 91        <dependency> 92            <groupId>mysql</groupId> 93            <artifactId>mysql-connector-java</artifactId> 94            <version>${mysql.connector.version}</version> 95        </dependency> 96 97        <!-- Spring support --> 98        <dependency> 99            <groupId>org.springframework</groupId> 100            <artifactId>spring-core</artifactId> 101            <version>${spring.version}</version> 102        </dependency> 103 104        <dependency> 105            <groupId>org.springframework</groupId> 106            <artifactId>spring-web</artifactId> 107            <version>${spring.version}</version> 108        </dependency> 109 110        <dependency> 111            <groupId>org.springframework</groupId> 112            <artifactId>spring-webmvc</artifactId> 113            <version>${spring.version}</version> 114        </dependency> 115 116        <dependency> 117            <groupId>org.springframework</groupId> 118            <artifactId>spring-orm</artifactId> 119            <version>${spring.version}</version> 120        </dependency> 121 122        <dependency> 123            <groupId>org.springframework</groupId> 124            <artifactId>spring-tx</artifactId> 125            <version>${spring.version}</version> 126        </dependency> 127 128 129 130    </dependencies> 131    <build> 132        <finalName>sbeat</finalName> 133    </build> 134</project>

web.xml

wweb.xml规定了有哪些显式的servlet,规定了最顶层的Context环境,是整个的纲领。它同时规定了对于哪些URL的请求归哪些servlet处理,哪些URL使用哪种编码方式。需要注意的是,对于没有人为指定配置文件的servlet,会自动在WEB-INF文件夹下找servletName-servlet.xml的文件作为其配置。

1<web-app id="WebApp_ID" version="2.4" 2 xmlns="http://java.sun.com/xml/ns/j2ee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee  5 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 6 7  <display-name>sbeat</display-name> 8 9  <filter> 10        <filter-name>characterEncodingFilter</filter-name> 11        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 12        <init-param> 13            <param-name>encoding</param-name> 14            <param-value>UTF-8</param-value> 15        </init-param> 16        <init-param> 17            <param-name>forceEncoding</param-name> 18            <param-value>true</param-value> 19        </init-param> 20    </filter> 21 22    <filter-mapping> 23        <filter-name>characterEncodingFilter</filter-name> 24        <url-pattern>/*</url-pattern> 25    </filter-mapping> 26 27 28    <servlet> 29        <servlet-name>sbeat</servlet-name> 30        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 31        <load-on-startup>1</load-on-startup> 32    </servlet> 33 34    <servlet-mapping> 35        <servlet-name>sbeat</servlet-name> 36        <url-pattern>/</url-pattern> 37    </servlet-mapping> 38 39    <context-param> 40        <param-name>contextConfigLocation</param-name> 41        <param-value>classpath*:applicationContext.xml</param-value> 42        <!--指定Context的配置文件--> 43    </context-param> 44 45    <listener> 46        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 47    </listener> 48</web-app>

URL分发

这里主要就是控制器的扫描,以及配置模板引擎,以velocity模板为例

1<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" 2    xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" 3    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4    xsi:schemaLocation="http://www.springframework.org/schema/beans 5      http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 6      http://www.springframework.org/schema/context 7      http://www.springframework.org/schema/context/spring-context.xsd 8      http://www.springframework.org/schema/mvc 9      http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 10 11    <!--这一句处理对静态资源的访问--> 12    <mvc:default-servlet-handler /> 13    <!--这一句指定了扫描注解生成Controller的根包名--> 14    <context:component-scan base-package="sbeat" /> 15    <!--这一句相当于开启注解扫描功能--> 16    <mvc:annotation-driven /> 17 18 19    <!--规定模板文件的类型和位置--> 20    <bean id="velocityConfigurer" 21        class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> 22        <property name="resourceLoaderPath" value="templates/" /> 23        <property name="velocityProperties"> 24            <props> 25                <prop key="input.encoding">utf-8</prop> 26                <prop key="output.encoding">utf-8</prop> 27            </props> 28        </property> 29    </bean> 30    <!--配置附加工具,以及将后缀为vm的文件交给下面的Resolver处理--> 31    <bean id="velocityViewResolver" 32        class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"> 33        <property name="suffix" value=".vm" /> 34        <property name="contentType" value="text/html;charset=utf-8" /> 35        <property name="toolboxConfigLocation" value="/WEB-INF/toolbox.xml"/> 36    </bean> 37</beans>

toolbox.xml示例如下,您可以选择自己喜欢的模板引擎。

1<?xml version="1.0"?><toolbox> 2    <tool> 3        <key>date</key> 4        <scope>request</scope> 5        <class> 6            org.apache.velocity.tools.generic.DateTool        </class> 7        <parameter name="format" value="yyyy-MM-dd HH:mm:ss"/> 8    </tool> 9    <tool> 10        <key>link</key> 11        <scope>request</scope> 12        <class>org.apache.velocity.tools.view.tools.LinkTool</class> 13    </tool> 14    <tool> 15        <key>stringUtils</key> 16        <scope>request</scope> 17        <class>org.apache.velocity.util.StringUtils</class> 18    </tool> 19    <tool> 20        <key>math</key> 21        <scope>application</scope> 22        <class>org.apache.velocity.tools.generic.MathTool</class> 23    </tool> 24    <tool> 25        <key>esc</key> 26        <scope>request</scope> 27        <class>org.apache.velocity.tools.generic.EscapeTool</class> 28    </tool> 29    <tool> 30        <key>params</key> 31        <scope>request</scope> 32        <class>org.apache.velocity.tools.view.tools.ParameterParser</class> 33    </tool> 34</toolbox>

applicationContext.xml——最重要的配置文件

applicationContext.xml主要是对数据库相关操作的一些配置,也是Spring与ORM类框架集成的节点。

1<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2    xmlns:context="http://www.springframework.org/schema/context" 3    xmlns:p="http://www.springframework.org/schema/p"  4    xmlns:aop="http://www.springframework.org/schema/aop" 5    xmlns:tx="http://www.springframework.org/schema/tx" 6    xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans 7    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 8    http://www.springframework.org/schema/context  9    http://www.springframework.org/schema/context/spring-context-3.0.xsd  10    http://www.springframework.org/schema/aop  11    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  12    http://www.springframework.org/schema/tx  13    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 14    http://www.springframework.org/schema/mvc 15    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 16    <tx:annotation-driven transaction-manager="transactionManager"/> 17    <!--开启扫面注解生成Bean--> 18    <context:annotation-config></context:annotation-config> 19    <!--设定扫描的根package--> 20    <context:component-scan base-package="sbeat" /> 21 22 23    <!--这一段是最重要的--> 24    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 25        <property name="dataSource" ref="dataSource" /> 26        <!--规定了扫描mapper文件的路径--> 27        <property name="mapperLocations" value="classpath*:sbeat/*/mapper/*.xml" /> 28        <!--指定了Mybatis配置文件的路径--> 29        <property name="configLocation" value="classpath:mybatis-config.xml"/> 30    </bean> 31 32 33    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> 34        <constructor-arg index="0" ref="sqlSessionFactory" /> 35    </bean> 36 37    <!--这一段让我们的MapperInterface能够最终在Spring中生成Bean最后被AutoWired--> 38    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 39        <property name="basePackage" value="sbeat.*.mapper" /> 40    </bean> 41 42 43 44    <bean id="transactionManager" 45        class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 46        <property name="dataSource" ref="dataSource" /> 47    </bean> 48 49    <!--数据库设置--> 50    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" 51        destroy-method="close"> 52        <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 53        <property name="url" value="jdbc:mysql://localhost:3306/sbeat" /> 54        <property name="username" value="suemi" /> 55        <property name="password" value="123456" /> 56    </bean> 57</beans>

Mybatis配置

1<?xml version="1.0" encoding="UTF-8" ?>  <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  2"http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> 3    <typeAliases> 4        <!--POJO 类的所在package,默认类名为其Alias--> 5        <package name="sbeat.user.model"/> 6    </typeAliases> 7    <mappers> 8        <!--映射文件所在的地方--> 9        <mapper resource="UserMapper.xml" /> 10    </mappers> 11</configuration>

Mybatis映射文件

该文件是将POJO类的

使用Spring-test测试

下面给出一个非常简单的测试例子,应该很容易看懂,就不做解释了

1package seed.test; 2 3import org.junit.Test; 4import org.junit.runner.RunWith; 5import org.springframework.beans.factory.annotation.Autowired; 6import org.springframework.test.context.ContextConfiguration; 7import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 8import demo.mapper.UserMapper;import demo.model.User; 9 10@RunWith(SpringJUnit4ClassRunner.class) 11@ContextConfiguration(locations={"classpath:applicationContext.xml"}) 12public class TsetUserDAO { 13    @Autowired 14    private UserMapper userMapper; 15     16    @Test 17    public void testInsert() { 18        User user=new User(); 19        user.setAccount("suemi994"); 20        user.setPasswd("123456"); 21        userMapper.addUser(user); 22    } 23}

小结

Spring常用的注解主要有以下几种:

@Component

@Service--业务层

@Respority--持久化层

@Controller--视图层

尽管这几种注解对应的意义不一样,但它们都有一个共同的作用,那就是让Spring找到并且最终生成对应的Bean。举个例子,我们在Service中使用接口UserDAO,但该接口的实例我们并没有指定使用哪一个,虽然我们写了对应的Impl Class。 通过注解生成Bean,Spring就能够在Service调用该接口的时候从容器里得到正确的实体对象。

原文地址:http://mtons.com/content/24.htm

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )