mybatis3.2.3+spring整合
mybatis3.2.3+spring整合(附帶源碼)
mybatis3.2.3整合spring其實(shí)就那么幾步,網(wǎng)上很多文章大篇幅地將原理,很多時(shí)候把人給弄糊涂了,我的建議是“先學(xué)會(huì)怎么用,再去學(xué)原理”。看此文章時(shí),最好與《Mybatis3.2.3+mysql第一個(gè)例子(入門)》一起來看,這樣你就能更好地理解整合spring的好處。先看下此文章使用的項(xiàng)目的目錄結(jié)構(gòu):
?
mybatis整合spring最簡(jiǎn)單的理解就是“把mybatis數(shù)據(jù)源的配置、事務(wù)的管理、SqlSessionFactory的創(chuàng)建以及數(shù)據(jù)映射器接口Mapper的創(chuàng)建交由spring去管理”,所以mybatis的配置文件mybatis-config.xml中不需要再配置數(shù)據(jù)源及事務(wù),在業(yè)務(wù)層service實(shí)現(xiàn)時(shí)不需要手動(dòng)地獲取SqlSession以及對(duì)應(yīng)的數(shù)據(jù)映射器接口Mapper,通過spring的注入即可。1、準(zhǔn)備工作:
(1)、下載mybatis:http://code.google.com/p/mybatis/downloads/list?can=3&q=Product%3DMyBatis
(2)、下載mybatis-spring:https://code.google.com/p/mybatis/downloads/detail?name=mybatis-spring-1.2.1.zip
(3)、下載mysql-connector-java-5.1.14.jar
(4)、mybatis-spring官方地址:http://mybatis.github.io/spring/
2、創(chuàng)建一個(gè)User實(shí)體:
package com.luoshengsha.bean; public class User { private String id; private String name; private String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }3、創(chuàng)建userMapper:
package com.luoshengsha.mapper; import com.luoshengsha.bean.User; public interface UserMapper { /**保存**/ public void save(User user); /**修改**/ public void update(User user); /**查找**/ public User find(String id); /**刪除**/ public void delete(String id); }4、創(chuàng)建UserMapper.xml://跟UserMapper.java在同一目錄下
<?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"> <mapper namespace="com.luoshengsha.mapper.UserMapper"> <!-- 保存 --> <insert id="save" parameterType="user"> insert into user(id,name,password) values(#{id},#{name},#{password}) </insert> <!-- 更新 --> <update id="update" parameterType="user"> update user set name=#{name},password=#{password} where id=#{id} </update> <!-- 查找 --> <select id="find" parameterType="string" resultType="user"> select * from user where id=#{id} </select> <!-- 刪除 --> <delete id="delete" parameterType="string"> delete from user where id=#{id} </delete> </mapper>5、創(chuàng)建UserService:
package com.luoshengsha.service; import com.luoshengsha.bean.User; public interface UserService { /**保存**/ public void save(User user); /**修改**/ public void update(User user); /**查找**/ public User find(String id); /**刪除**/ public void delete(String id); }6、創(chuàng)建UserServiceImpl:
package com.luoshengsha.service.impl; import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.luoshengsha.bean.User; import com.luoshengsha.mapper.UserMapper; import com.luoshengsha.service.UserService; @Service //告訴spring這個(gè)業(yè)務(wù)組件 @Transactional //告訴spring這個(gè)類需要事務(wù) public class UserServiceImpl implements UserService { @Resource private UserMapper mapper; @Override public void save(User user) { //此處不再進(jìn)行創(chuàng)建SqlSession和提交事務(wù),都已交由spring去管理了。 mapper.save(user); } @Override public void update(User user) { //此處不再進(jìn)行創(chuàng)建SqlSession和提交事務(wù),都已交由spring去管理了。 mapper.update(user); } @Override public User find(String id) { //此處不再進(jìn)行創(chuàng)建SqlSession,都已交由spring去管理了。 return mapper.find(id); } @Override public void delete(String id) { //此處不再進(jìn)行創(chuàng)建SqlSession和提交事務(wù),都已交由spring去管理了。 mapper.delete(id); } }7、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><!-- <properties resource="jdbc.properties" /> --><settings><!-- 全局啟用或禁用延遲加載。當(dāng)禁用時(shí),所有關(guān)聯(lián)對(duì)象都會(huì)即時(shí)加載。默認(rèn):true --><setting name="lazyLoadingEnabled" value="true"/><!-- 當(dāng)啟用時(shí),有延遲加載屬性的對(duì)象在被調(diào)用時(shí)將會(huì)完全加載任意屬性。否則,每種屬性將會(huì)按需要加載 --><setting name="aggressiveLazyLoading" value="false"/></settings><!--//此處的配置不再需要 <environments>...</environments> --> <typeAliases><!--設(shè)置別名--><typeAlias type="com.luoshengsha.bean.User" alias="user"/></typeAliases><!--說明:如果xxMapper.xml配置文件放在和xxMapper.java統(tǒng)一目錄下,mappers也可以省略,因?yàn)閛rg.mybatis.spring.mapper.MapperFactoryBean默認(rèn)會(huì)去查找與xxMapper.java相同目錄和名稱的xxMapper.xml--> <mappers> <mapper resource="com/luoshengsha/Mapper/UserMapper.xml"/> </mappers> </configuration>?8、spring配置文件bean.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <context:annotation-config /> <aop:aspectj-autoproxy/> <aop:aspectj-autoproxy proxy-target-class="true"/> <!--告訴spring從什么地方開始掃描組件,根據(jù)自己項(xiàng)目的實(shí)際目錄配置--> <context:component-scan base-package="com.luoshengsha" /> <!--數(shù)據(jù)源配置--> <context:property-placeholder location="classpath:jdbc.properties"/><!--從classpath下面的jdbc.properties中讀取數(shù)據(jù)庫(kù)的鏈接信息--> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${driver}"/> <property name="jdbcUrl" value="${url}"/> <property name="user" value="${username}"/> <property name="password" value="${password}"/> <!-- 初始化時(shí)獲取的連接數(shù),取值應(yīng)在minPoolSize與maxPoolSize之間。Default: 3 --> <property name="initialPoolSize" value="1"/> <!-- 連接池中保留的最小連接數(shù)。 --> <property name="minPoolSize" value="1"/> <!-- 連接池中保留的最大連接數(shù)。Default: 15 --> <property name="maxPoolSize" value="300"/> <!-- 最大空閑時(shí)間,60秒內(nèi)未使用則連接被丟棄。若為0則永不丟棄。Default: 0 --> <property name="maxIdleTime" value="60"/> <!-- 當(dāng)連接池中的連接耗盡的時(shí)候c3p0一次同時(shí)獲取的連接數(shù)。Default: 3 --> <property name="acquireIncrement" value="5"/> <!-- 每60秒檢查所有連接池中的空閑連接。Default: 0 --> <property name="idleConnectionTestPeriod" value="60"/> </bean> <!--把mybatis?SqlSessionFactory的創(chuàng)建交由spring管理--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /><!--數(shù)據(jù)源--> <property name="configLocation" value="classpath:mybatis-config.xml" /><!--mybatis配置文件路徑--> </bean> <!-- scan for mappers and let them be autowired --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.luoshengsha.mapper" /><!---根據(jù)自己的項(xiàng)目路徑配置--> </bean> <!--把mybatis的事務(wù)交由spring去管理--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /><!--注意:此處的數(shù)據(jù)源要與sqlSessionFactory中的dataSource相同--> </bean> <!--啟用spring?@Transactional注解?--> <tx:annotation-driven /> </beans>9、jdbc.properties配置文件:
driver=org.gjt.mm.mysql.Driverurl=jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&characterEncoding=UTF-8username=rootpassword=root10、log4j.properties:
log4j.rootLogger=debug, Console #Consolelog4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.appender.Console.layout=org.apache.log4j.PatternLayoutlog4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%nlog4j.logger.java.sql.ResultSet=DEBUG log4j.logger.org.apache=DEBUG log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG11、web.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>mybatisSpring</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!--告訴項(xiàng)目spring配置文件所處的位置--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:beans.xml</param-value> </context-param> <!-- spring監(jiān)聽器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>12、junit測(cè)試:
package com.luoshengsha; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.luoshengsha.bean.User; import com.luoshengsha.service.UserService; public class UserTest { protected static UserService userService; @BeforeClass public static void setUpBeforeClass() throws Exception { try { ApplicationContext cxt = new ClassPathXmlApplicationContext("beans.xml"); userService = (UserService)cxt.getBean("userServiceImpl"); } catch (Exception e) { e.printStackTrace(); } } @Test public void save() { User user = new User(); user.setId("2"); user.setName("綠竹"); user.setPassword("123456"); userService.save(user); } @Test public void find() { User user = userService.find("2"); System.out.println("name: " + user.getName()); } @Test public void update() { User user = userService.find("2"); user.setName("綠竹2"); userService.update(user); } @Test public void delete() { userService.delete("2"); } }13、源碼下載地址:http://pan.baidu.com/s/123Xd1
?
本文出自?luoshengsha.com,歡迎轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)注明出處及相應(yīng)鏈接。
本文永久鏈接:?http://www.luoshengsha.com/284.html
轉(zhuǎn)載于:https://www.cnblogs.com/shsgl/p/5429769.html
總結(jié)
以上是生活随笔為你收集整理的mybatis3.2.3+spring整合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js实现新闻滚动-单行滚动或者多行滚动
- 下一篇: 关于js复制文本信息(按钮级别)