基於maven的SpringMVC,Spring,MyBatis的全註解配置
阿新 • • 發佈:2019-02-15
1.maven新增各種依賴包
<!-- 資料庫連線池 --> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <!-- Mybatis與Spring的包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <!-- Mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.2</version> </dependency> <!-- Spring jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.1.6.RELEASE</version> </dependency> <!-- 動態代理 --> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2</version> </dependency> <!-- 資料庫驅動 --> <dependency> <groupId> mysql</groupId> <artifactId> mysql-connector-java</artifactId> <version> 5.0.5</version> </dependency> <!-- Spring框架 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.6.RELEASE</version> </dependency> <!-- SpringMVC框架 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.6.RELEASE</version> </dependency>
2.配置spring.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-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/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <!-- 資料庫驅動 --> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <!-- 連線URL串 --> <property name="jdbcUrl" value="url" /> <!-- 連線使用者名稱 --> <property name="user" value="user" /> <!-- 連線密碼 --> <property name="password" value="pass" /> <!-- 初始化連線池時連線數量為5個 --> <property name="initialPoolSize" value="5" /> <!-- 允許最小連線數量為5個 --> <property name="minPoolSize" value="5" /> <!-- 允許最大連線數量為20個 --> <property name="maxPoolSize" value="20" /> <!-- 允許連線池最大生成100個PreparedStatement物件 --> <property name="maxStatements" value="100" /> <!-- 連線有效時間,連線超過3600秒未使用,則該連線丟棄 --> <property name="maxIdleTime" value="3600" /> <!-- 連線用完時,一次產生的新連線步進值為2 --> <property name="acquireIncrement" value="2" /> <!-- 獲取連線失敗後再嘗試10次,再失敗則返回DAOException異常 --> <property name="acquireRetryAttempts" value="10" /> <!-- 獲取下一次連線時最短間隔600毫秒,有助於提高效能 --> <property name="acquireRetryDelay" value="600" /> <!-- 檢查連線的有效性,此處小弟不是很懂什麼意思 --> <property name="testConnectionOnCheckin" value="true" /> <!-- 每個1200秒檢查連線物件狀態 --> <property name="idleConnectionTestPeriod" value="1200" /> <!-- 獲取新連線的超時時間為10000毫秒 --> <property name="checkoutTimeout" value="10000" /> </bean> <!-- 建立SqlSessionFactory,同時指定資料來源 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:configuration.xml" /> <property name="dataSource" ref="dataSource" /> </bean> <!-- 自動建立mybatis的代理類的配置 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.ray.model.mapper" /> </bean> <mvc:annotation-driven /> <!-- 把標記了@Controller註解的類轉換為bean --> <context:component-scan base-package="com.ray.services" /> <!-- 啟動Spring MVC的註解功能,完成請求和註解POJO的對映 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> <!-- Spring MVC的跳轉配置(我猜的) --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/" /> <property name="suffix" value=".jsp" /> </bean> </beans>
3.配置web.xml
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
4.配置mybatis自動生成實體(執行maven install的時候)
首先配置pom.xml
<!--配置常用的屬性-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<entity.target.dir>src/main/java/</entity.target.dir>
<dao.resources.dir>src/main/resources/</dao.resources.dir>
</properties>
<!--自動生成-->
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<dependencies>
<!-- 資料庫驅動 -->
<dependency>
<groupId> mysql</groupId>
<artifactId> mysql-connector-java</artifactId>
<version> 5.0.5</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.4</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<phase>package</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<verbose>false</verbose>
<overwrite>false</overwrite>
<configurationFile>
src/main/resources/mybatis-generator.xml</configurationFile>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
配置mybatis-generator.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3" defaultModelType="flat">
<plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin">
<property name="searchString" value="[e|E]xample$" />
<property name="replaceString" value="Criteria" />
</plugin>
<commentGenerator>
<property name="suppressDate" value="true" />
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1/ray" userId="ray"
password="123456">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- generate Model -->
<javaModelGenerator targetPackage="com.ray.model"
targetProject="${entity.target.dir}">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 自動生成xml(但是好像一直沒有生成功,反正也不用xml) -->
<sqlMapGenerator targetPackage="com.ray.model.mapper"
targetProject="${dao.resources.dir}">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 自動生成mapper介面, 可以是 ANNOTATEDMAPPER(註解), XMLMAPPER(xml), MIXEDMAPPER(不知道) -->
<javaClientGenerator type="ANNOTATEDMAPPER"
targetPackage="com.ray.model.mapper" implementationPackage="com.ray.model.mapper.impl"
targetProject="${entity.target.dir}">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<table tableName="user" domainObjectName="User">
</table>
</context>
</generatorConfiguration>
5.mybatis配置configuration.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<settings>
<!-- 全域性對映器啟用快取 -->
<setting name="cacheEnabled" value="true" />
<!-- 查詢時,關閉關聯物件即時載入以提高效能 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 設定關聯物件載入的形態,此處為按需載入欄位(載入欄位由SQL指 定),不會載入關聯表的所有欄位,以提高效能 -->
<setting name="aggressiveLazyLoading" value="false" />
<!-- 對於未知的SQL查詢,允許返回不同的結果集以達到通用的效果 -->
<setting name="multipleResultSetsEnabled" value="true" />
<!-- 允許使用列標籤代替列名 -->
<setting name="useColumnLabel" value="true" />
<!-- 允許使用自定義的主鍵值(比如由程式生成的UUID 32位編碼作為鍵值),資料表的PK生成策略將被覆蓋 -->
<setting name="useGeneratedKeys" value="true" />
<!-- 給予被巢狀的resultMap以欄位-屬性的對映支援 -->
<setting name="autoMappingBehavior" value="FULL" />
<!-- 對於批量更新操作快取SQL以提高效能 -->
<setting name="defaultExecutorType" value="BATCH" />
<!-- 資料庫超過25000秒仍未響應則超時 -->
<setting name="defaultStatementTimeout" value="25000" />
</settings>
<!-- 全域性別名設定,在對映檔案中只需寫別名,而不必寫出整個類路徑 -->
<typeAliases>
<typeAlias alias="User"
type="com.ray.model.User" />
</typeAliases>
<!-- 非註解的sql對映檔案配置,如果使用mybatis註解,該mapper無需配置,但是如果mybatis註解中包含@resultMap註解,則mapper必須配置,給resultMap註解使用 -->
<!-- <mappers> <mapper resource="persist/test/orm/test.xml" /> </mappers> -->
</configuration>
6.使用
package com.ray.services;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ray.model.mapper.UserMapper;
@Controller
public class Test {
@Autowired
private UserMapper mapper;
/**
* 測試有多少條資料
* @param response
*/
@RequestMapping("/getcount.do")
public void count(HttpServletResponse response){
PrintWriter pw = null;
try {
pw = response.getWriter();
pw.write("count:"+mapper.countByExample(null));
} catch (IOException e) {
e.printStackTrace();
}finally{
if(pw != null){
pw.close();
}
}
}
public UserMapper getMapper() {
return mapper;
}
public void setMapper(UserMapper mapper) {
this.mapper = mapper;
}
}
雖然也需要用xml文件來進行配置,但是感覺用註解還是方便了好多,具體程式碼https://git.oschina.net/raywang2014/JavaEE.git(這個專案配置了最基本的環境,但是專案是分模組的)