Java環(huán)境中MyBatis與Spring或Spring MVC框架的集成方法
與Spring3集成
Spring作為基礎(chǔ)框架,可以集成后端框架,如Hibernate,MyBatis等。
前面是介紹單獨(dú)使用MyBatis的,大致邏輯是:
sqlSessionFactory <- configuration file (包括數(shù)據(jù)庫連接配置)
IXxxMapper <- sqlSession <- sqlSessionFactory
<- mapper interface <- mapper xml
得到IxxMapper后,就可以調(diào)用其方法進(jìn)行數(shù)據(jù)交互了。
和Spring集成時,上面的這些對象需要作為bean來管理:
dataSource bean <- 數(shù)據(jù)庫連接配置
sqlSessionFactory bean <- dataSource
<- configuration file
userMapper bean <- sqlSessionFactory
<- mapper interface
1. 在pom.xml中加入依賴:
<properties>
<mybatis.spring.version>1.2.1</mybatis.spring.version>
<dbcp.version>1.4</dbcp.version>
<spring.version>3.1.2.RELEASE</spring.version>
</properties>
<dependencies>
<dependency><!-- mybatis的幾個對象包裝成spring的bean -->
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis.spring.version}</version>
</dependency>
<dependency><!-- spring上下文用spring-jdbc連接數(shù)據(jù)庫 -->
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency><!-- dataSource是BasicDataSource的實(shí)例 -->
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>${dbcp.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
2. 在類路徑下創(chuàng)建beans-da.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><!-- 數(shù)據(jù)庫連接bean --> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/hbatis?characterEncoding=utf8" /> <property name="username" value="root" /> <property name="password" value="123456" /> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- sqlSessionFactory bean --> <property name="dataSource" ref="dataSource" /><!-- 數(shù)據(jù)源 --> <property name="configLocation" value="classpath:Configuration.xml" /><!-- 配置文件 --> </bean> <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"><!-- user映射bean--> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> <property name="mapperInterface" value="com.john.hbatis.mapper.IUserMapper" /><!-- 映射接口 --> </bean> </beans>
3. 測試類:
@ContextConfiguration(locations = { "classpath:beans-da.xml" })
public class SpringIntegrationTest extends AbstractTestNGSpringContextTests {
private static final Logger log = LoggerFactory.getLogger(SpringIntegrationTest.class);
@Resource
IUserMapper mapper;
@Test
public void queryTest() {
User user = mapper.getUserById(1);
log.info("Name: {}, address: {}", user.getName(), user.getAddress());
}
}
與SpringMVC集成
這里我們建立在與Spring3集成基礎(chǔ)上來講:
1. 往pom.xml添加SpringMVC和Freemarker依賴:
<properties>
<freemarker.version>2.3.19</freemarker.version>
<servlet.version>2.5</servlet.version>
</properties>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>${freemarker.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
2. 在web.xml中加入Spring的監(jiān)聽器和SpringMVC的servlet:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class><!-- 監(jiān)聽容器事件,初始化和關(guān)閉Web應(yīng)用上下文并調(diào)用ContextCleanupListener清理資源 -->
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextCleanupListener</listener-class><!-- Web應(yīng)用關(guān)閉時,清理ServletContext中spring相關(guān)的可銷毀資源 -->
</listener>
<servlet>
<servlet-name>hbatis</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/hbatis-servlet.xml</param-value>
</init-param>--><!-- 未配置時,SpringMVC會到WEB-INF目錄下找${project.name}-servlet.xml -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hbatis</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
3. 在WEB-INF下新建:
Spring配置文件applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<context:property-placeholder location="classpath:/database.properties" /><!-- 數(shù)據(jù)庫配置文件 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
p:driverClassName="${driverClassName}"
p:url="${url}"
p:username="${user_name}"
p:password="${password}" /><!-- 數(shù)據(jù)源配置 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- sqlSessionFactory對象 -->
<property name="dataSource" ref="dataSource" /><!-- 數(shù)據(jù)源 -->
<property name="configLocation" value="classpath:Configuration.xml" /><!-- myBatis配置文件 -->
<!--<property name="mapperLocations" value="classpath*:com/john/hbatis/model/*.xml" />--><!-- 可以在Configuration.xml或此處配置映射文件,但其中不能有相同id的parameterMap, resultMap或sql等 -->
</bean>
<bean id="mapperConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 掃描指定包以獲取映射器 -->
<property name="basePackage" value="com.john.hbatis.mapper" />
</bean>
</beans>
類路徑下的database.properties:
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8 user_name=root password=123456
注:因?yàn)镸apperScannerConfigurer可能會導(dǎo)致username取的是系統(tǒng)用戶的賬號,而造成數(shù)據(jù)庫連接失敗,所以改成其它值:user_name。
SpringMVC配置文件hbatis-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">
<mvc:annotation-driven /><!-- 注冊RequestMappingHandlerMapping, RequestMappingHandlerAdapter和ExceptionHandlerExceptionResolver以提供對@RequestMapping,@ExceptionHandler等注解的支持 -->
<context:component-scan base-package="com.john.hbatis.controller" /><!-- 掃描控制器包下有特定注解的類,并實(shí)例化和依賴注入 -->
<!-- FreeMarker視圖處理器 -->
<bean id="viewResolverFtl" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
<property name="contentType" value="text/html;charset=utf-8"/>
<property name="prefix" value="" />
<property name="cache" value="false"/>
<property name="viewNames">
<array>
<value>*.ftl</value>
</array>
</property>
<!--<property name="suffix" value=".ftl"/>-->
<property name="order" value="0"/><!-- 優(yōu)先級,數(shù)值越小優(yōu)先級越高 -->
</bean>
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPaths">
<list>
<value>/WEB-INF/ftl/</value><!-- 模板加載路徑 -->
</list>
</property>
</bean>
</beans>
4. MVC:
控制層:UserController.java
@Controller
@RequestMapping("/article")
public class UserController {
@Autowired
IUserMapper mapper;
@RequestMapping("/list")
public String showAll(ModelMap modelMap) {
List<Article> articles = mapper.getArticlesByUserId(1);
modelMap.addAttribute("articles", articles);
return "main.ftl";
}
}
視圖層:main.ftl:
<#list articles as article>
<div>${article.id}. ${article.title}: ${article.content}</div>
</#list>
5. 啟動工程,瀏覽器輸入:http://localhost:8080/hbatis/article/list.htm查看結(jié)果。
相關(guān)文章
springboot中自定義異常以及定制異常界面實(shí)現(xiàn)過程解析
這篇文章主要介紹了springboot中自定義異常以及定制異常界面實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09
Java位掩碼控制權(quán)限與(&)或(|)非(~)、>的介紹
今天小編就為大家分享一篇關(guān)于Java位掩碼控制權(quán)限與(&)或(|)非(~)、>的介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
SpringMVC+Spring+Mybatis實(shí)現(xiàn)支付寶支付功能的示例代碼
這篇文章主要介紹了SpringMVC+Spring+Mybatis實(shí)現(xiàn)支付寶支付功能的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
Spring?Cloud?Loadbalancer服務(wù)均衡負(fù)載器詳解
這篇文章主要介紹了Spring?Cloud?Loadbalancer服務(wù)均衡負(fù)載器,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03
java并發(fā)編程包JUC線程同步CyclicBarrier語法示例
這篇文章主要為大家介紹了java并發(fā)編程工具包JUC線程同步CyclicBarrier語法使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03

