首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Maven 專案實戰:SpringMVC + MyBatis + Velocity 整合筆記

     編輯:Java 綜合教學

專案初始化與結構

使用 Maven 建立標準 Web 專案(`mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp`),目錄結構:

src
├── main
│   ├── java
│   │   └── com.example
│   │       ├── controller
│   │       ├── service
│   │       ├── dao
│   │       └── entity
│   ├── resources
│   │   ├── spring
│   │   │   ├── applicationContext.xml
│   │   │   ├── spring-mvc.xml
│   │   │   └── spring-mybatis.xml
│   │   ├── mybatis
│   │   │   └── mapper
│   │   ├── velocity
│   │   │   └── templates
│   │   ├── jdbc.properties
│   │   ├── log4j.properties
│   │   └── mybatis-config.xml
│   └── webapp
│       ├── WEB-INF
│       │   └── web.xml
│       └── index.jsp
└── test

核心依賴 (pom.xml 關鍵片段)

<properties>
    <spring.version>4.3.18.RELEASE</spring.version>
    <mybatis.version>3.4.6</mybatis.version>
    <mybatis-spring.version>1.3.2</mybatis-spring.version>
    <velocity.version>1.7</velocity.version>
    <mysql.version>5.1.47</mysql.version>
</properties>

<dependencies>
    <!-- Spring -->
    <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</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-tx</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-test</artifactId><version>${spring.version}</version><scope>test</scope></dependency>

    <!-- MyBatis -->
    <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency>
    <dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>${mybatis-spring.version}</version></dependency>

    <!-- Velocity -->
    <dependency><groupId>org.apache.velocity</groupId><artifactId>velocity</artifactId><version>${velocity.version}</version></dependency>
    <dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-tools</artifactId><version>2.0</version></dependency>

    <!-- DB -->
    <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency>
    <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency>

    <!-- Web -->
    <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency>
    <dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency>
</dependencies>

關鍵配置文件

1. jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root

2. spring-mybatis.xml (核心整合)

<beans ...>
    <context:property-placeholder location="classpath:jdbc.properties"/>

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <property name="mapperLocations" value="classpath:mybatis/mapper/**/*.xml"/>
    </bean>

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager"/>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.example.dao"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
</beans>

3. mybatis-config.xml (輕量)

<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <setting name="cacheEnabled" value="true"/>
    </settings>
    <typeAliases>
        <package name="com.example.entity"/>
    </typeAliases>
</configuration>

4. spring-mvc.xml

<beans ... xmlns:mvc="https://www.springframework.org/schema/mvc">
    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list><value>text/plain;charset=UTF-8</value></list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

    <context:component-scan base-package="com.example.controller"/>

    <!-- Velocity 視圖解析器 -->
    <bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
        <property name="resourceLoaderPath" value="/WEB-INF/velocity/"/>
        <property name="velocityProperties">
            <props>
                <prop key="input.encoding">UTF-8</prop>
                <prop key="output.encoding">UTF-8</prop>
            </props>
        </property>
    </bean>

    <bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
        <property name="cache" value="true"/>
        <property name="prefix" value=""/>
        <property name="suffix" value=".vm"/>
        <property name="contentType" value="text/html;charset=UTF-8"/>
        <property name="exposeSpringMacroHelpers" value="true"/>
        <property name="exposeRequestAttributes" value="true"/>
        <property name="exposeSessionAttributes" value="true"/>
        <property name="requestContextAttribute" value="rc"/>
    </bean>
</beans>

5. web.xml

<web-app version="3.0" ...>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/applicationContext.xml</param-value>
    </context-param>
    <listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/spring-mvc.xml</param-value></init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</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>/*</url-pattern></filter-mapping>
</web-app>

Velocity 模板範例

testVelocity.vm

<html><body>
$!test
#foreach($userInfo in $!list)
    <br/>
    $!{velocityCount}. $!userInfo.userName
#end
</body></html>

Controller 與 Service 實現

@Controller
@RequestMapping("/test")
public class TestController {
    @Autowired
    private UserService userService;

    @RequestMapping("/list")
    public ModelAndView list() {
        List users = userService.findAll();
        return new ModelAndView("testVelocity", "list", users);
    }
}

啟動驗證

  1. 部署至 Tomcat,訪問 `https://localhost:8080/專案名/test/list`
  2. 頁面正確渲染用戶列表,證明 SpringMVC + MyBatis + Velocity 整合成功

整合要點總結

層面關鍵點
依賴管理版本統一由 properties 定義,避免傳遞依賴衝突
MyBatis 整合MapperScannerConfigurer 自動掃描 Mapper 接口,無需手動註冊
事務管理@Transactional 註解 + tx:annotation-driven,服務層方法級控制
Velocity 配置VelocityConfigurer + VelocityViewResolver,模板放在 /WEB-INF/velocity/ 避免直接訪問
編碼統一Filter + VelocityProperties + StringHttpMessageConverter 全鏈路 UTF-8

此整合方案結構清晰、配置解耦、易於擴展,適合中小型傳統 Web 專案快速起步。現代項目建議考慮 Spring Boot + Thymeleaf/FreeMarker 進一步簡化配置。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved