日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

SpringMVC学习(六)——Spring四种方式整合MyBatis

發(fā)布時(shí)間:2025/3/19 javascript 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringMVC学习(六)——Spring四种方式整合MyBatis 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

        • 1、引言
        • 2、Spring整合Mybatis
          • 2.1、常規(guī)整合
            • 2.1.1、項(xiàng)目的結(jié)構(gòu)
            • 2.1.2、applicationContext.xml配置
            • 2.1.3、UserInfoMapper接口的定義
            • 2.1.4、UserMapper.xml配置
            • 2.1.5、UserService定義和實(shí)現(xiàn)
          • 2.2、使用`SqlSessionTemplate`整合
            • 2.2.1、項(xiàng)目結(jié)構(gòu)
            • 2.2.2、新增加`sqlSessionTemplate`配置
            • 2.2.3、實(shí)現(xiàn)UserInfoMapper接口
          • 2.3、使用`SqlSessionDaoSupport`整合
            • 2.3.1、項(xiàng)目結(jié)構(gòu)
            • 2.3.2、新增BaseMapper配置
            • 2.3.3、實(shí)現(xiàn)UserInfoMapper接口
          • 2.4、使用`org.apache.ibatis.annotations`提供注解方式整合
            • 2.4.1、項(xiàng)目結(jié)構(gòu)
            • 2.4.2、關(guān)鍵配置
            • 2.4.3、UserInfoMapper的定義
        • 3、總結(jié)

1、引言

本文一共提供了四種Spring整合MyBatis的方式分別是:

  • 常規(guī)整合
  • 使用SqlSessionTemplate整合
  • 使用SqlSessionDaoSupport整合
  • 使用org.apache.ibatis.annotations提供注解方式整合
    本文的相關(guān)源碼請(qǐng)參考:
    chapter-6-springmvc-mybatis1(常規(guī)整合)
    chapter-6-springmvc-mybatis2(使用SqlSessionTemplate整合)
    chapter-6-springmvc-mybatis3( 使用SqlSessionDaoSupport整合)
    chapter-6-springmvc-mybatis4(使用org.apache.ibatis.annotations提供注解方式整合)
    https://gitee.com/leo825/spring-framework-learning-example.git
  • 2、Spring整合Mybatis

    建表語(yǔ)句

    -- 創(chuàng)建一個(gè)簡(jiǎn)單的用戶表 DROP TABLE IF EXISTS USER_INFO;CREATE TABLE USER_INFO (ID INT (11) PRIMARY KEY AUTO_INCREMENT COMMENT '用戶ID',NAME VARCHAR (20) COMMENT '用戶名稱',GENDER VARCHAR (2) COMMENT '用戶性別:0女1男',AGE VARCHAR (3) COMMENT '用戶年齡',REMARKS VARCHAR (100) COMMENT '備注信息' ) COMMENT = '用戶信息表'

    pom.xml配置相同

    <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>spring-framework-learning-parents</artifactId><groupId>spring-framework-learning-example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>chapter-6-springmvc-mybatis1</artifactId><packaging>war</packaging><description>Spring集成mybatis</description><!-- 工程展示名稱 --><name>chapter-6-springmvc-mybatis1</name><!-- 工程的地址 --><url>https://gitee.com/leo825/spring-framework-learning-example.git</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><spring.version>4.3.25.RELEASE</spring.version></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- springmvc核心依賴 --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><!-- aspectJ AOP 織入器 --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.9</version></dependency><!--mybatis-spring適配器 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version></dependency><!-- mybatis ORM框架 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.1</version></dependency><!--c3p0 連接池 --><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.2</version></dependency><!-- tomcat中存在此web運(yùn)行的jar包 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.2</version><scope>provided</scope></dependency><!-- 使用SpringJDBC進(jìn)行數(shù)據(jù)庫(kù)配置 --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><!-- mysql數(shù)據(jù)庫(kù)連接的驅(qū)動(dòng)--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.30</version></dependency><!-- Spring-test配合junit使用 --><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version><scope>test</scope></dependency><!-- SpirngMVC支持文件上傳的工具包 --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version></dependency><!--log4j2支持集成日志框架--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.11.2</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.11.2</version></dependency></dependencies><build><finalName>chapter-6-springmvc-mybatis1</finalName><pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --><plugins><plugin><artifactId>maven-clean-plugin</artifactId><version>3.1.0</version></plugin><!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --><plugin><artifactId>maven-resources-plugin</artifactId><version>3.0.2</version></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>3.2.2</version></plugin><plugin><artifactId>maven-install-plugin</artifactId><version>2.5.2</version></plugin><plugin><artifactId>maven-deploy-plugin</artifactId><version>2.8.2</version></plugin></plugins></pluginManagement></build> </project>
    2.1、常規(guī)整合
    2.1.1、項(xiàng)目的結(jié)構(gòu)

    2.1.2、applicationContext.xml配置
    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:cache="http://www.springframework.org/schema/cache" xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.0.xsd"><!--1 引入屬性文件,在配置中占位使用 --><context:property-placeholder location="classpath*:application.properties"/><!--2 配置C3P0數(shù)據(jù)源 --><bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"><!--驅(qū)動(dòng)類名 --><property name="driverClass" value="${datesource.driverClassName}"/><!-- url --><property name="jdbcUrl" value="${datesource.url}"/><!-- 用戶名 --><property name="user" value="${datesource.username}"/><!-- 密碼 --><property name="password" value="${datesource.password}"/><!-- 當(dāng)連接池中的連接耗盡的時(shí)候c3p0一次同時(shí)獲取的連接數(shù) --><property name="acquireIncrement" value="5"></property><!-- 初始連接池大小 --><property name="initialPoolSize" value="10"></property><!-- 連接池中連接最小個(gè)數(shù) --><property name="minPoolSize" value="5"></property><!-- 連接池中連接最大個(gè)數(shù) --><property name="maxPoolSize" value="20"></property></bean><!--3 會(huì)話工廠bean sqlSessionFactoryBean --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 數(shù)據(jù)源 --><property name="dataSource" ref="datasource"></property><!-- 別名 --><property name="typeAliasesPackage" value="com.leo.model"></property><!-- sql映射文件路徑 --><property name="mapperLocations" value="classpath*:mapper/*Mapper.xml"></property></bean><!--4 自動(dòng)掃描對(duì)象關(guān)系映射 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!--指定會(huì)話工廠,如果當(dāng)前上下文中只定義了一個(gè)則該屬性可省去 --><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property><!-- 指定要自動(dòng)掃描接口的基礎(chǔ)包,實(shí)現(xiàn)接口 --><property name="basePackage" value="com.leo.mapper"></property></bean><!--5 聲明式事務(wù)管理 --><!--定義事物管理器,由spring管理事務(wù) --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="datasource"></property></bean><!--支持注解驅(qū)動(dòng)的事務(wù)管理,指定事務(wù)管理器 --><tx:annotation-driven transaction-manager="transactionManager"/><!--6 容器自動(dòng)掃描IOC組件 --><context:component-scan base-package="com.leo"></context:component-scan><!--7 aspectj支持自動(dòng)代理實(shí)現(xiàn)AOP功能 --><aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy> </beans>
    2.1.3、UserInfoMapper接口的定義
    public interface UserInfoMapper {/*** 增加用戶信息* @param userInfo*/void insertUserInfo(UserInfo userInfo);/*** 刪除用戶信息* @param id*/void deleteUserInfo(Integer id);/*** 修改用戶信息* @param newUserInfo*/void updateUserInfo(UserInfo newUserInfo);/*** 查詢用戶信息* @return*/List<UserInfo> getUserInfoList(); }
    2.1.4、UserMapper.xml配置
    <?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"> <!--命名空間應(yīng)該是對(duì)應(yīng)接口的包名+接口名 --> <mapper namespace="com.leo.mapper.UserInfoMapper"><sql id="BaseSql">ID id, NAME name, GENDER gender,AGE age,REMARKS remarks</sql><!-- 增加 --><insert id="insertUserInfo" parameterType="com.leo.model.UserInfo">INSERT INTO USER_INFO(NAME,GENDER,AGE,REMARKS) VALUES(#{name},#{gender},#{age},#{remarks})</insert><!-- 刪除 --><delete id="deleteUserInfo" parameterType="integer">DELETE FROM USER_INFO WHERE ID=#{ID}</delete><!-- 修改 --><update id="updateUserInfo" parameterType="com.leo.model.UserInfo">UPDATE USER_INFO<if test="name!=null">SET NAME = #{name},</if><if test="gender!=null">SET GENDER = #{gender},</if><if test="age!=null">SET AGE = #{age},</if><if test="remarks!=null">SET REMARKS = #{remarks},</if>WHERE ID=#{ID}</update><select id="getUserInfoList" resultType="com.leo.model.UserInfo">SELECT<include refid="BaseSql"/>FROM USER_INFO WHERE 1=1</select></mapper>
    2.1.5、UserService定義和實(shí)現(xiàn)
    public interface UserInfoService {/*** 增加用戶信息* @param userInfo*/void insertUserInfo(UserInfo userInfo);/*** 刪除用戶信息* @param id*/void deleteUserInfo(Integer id);/*** 修改用戶信息* @param newUserInfo*/void updateUserInfo(UserInfo newUserInfo);/*** 查詢用戶信息* @return*/List<UserInfo> getUserInfoList(); }

    實(shí)現(xiàn)層

    @Service public class UserInfoServiceImpl implements UserInfoService {@ResourceUserInfoMapper userInfoMapper;@Overridepublic void insertUserInfo(UserInfo userInfo) {userInfoMapper.insertUserInfo(userInfo);}@Overridepublic void deleteUserInfo(Integer id) {userInfoMapper.deleteUserInfo(id);}@Overridepublic void updateUserInfo(UserInfo newUserInfo) {userInfoMapper.updateUserInfo(newUserInfo);}@Overridepublic List<UserInfo> getUserInfoList() {return userInfoMapper.getUserInfoList();} }
    2.2、使用SqlSessionTemplate整合
    2.2.1、項(xiàng)目結(jié)構(gòu)

    2.2.2、新增加sqlSessionTemplate配置

    在applicationContext.xml中新增

    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg index="0" ref="sqlSessionFactory"/></bean>
    2.2.3、實(shí)現(xiàn)UserInfoMapper接口

    這種方式,UserMapper.xml和第一個(gè)一樣,不在重復(fù)贅述了,需要自己通過(guò)sqlSessionTemplate去實(shí)現(xiàn)數(shù)據(jù)庫(kù)操作的增、刪、改、查。
    UserInfoMapperImpl.java

    @Service public class UserInfoMapperImpl implements UserInfoMapper {@AutowiredSqlSessionTemplate sqlSessionTemplate;@Overridepublic void insertUserInfo(UserInfo userInfo) {sqlSessionTemplate.insert("com.leo.mapper.UserInfoMapper.insertUserInfo", userInfo);}@Overridepublic void deleteUserInfo(Integer id) {sqlSessionTemplate.delete("com.leo.mapper.UserInfoMapper.deleteUserInfo", id);}@Overridepublic void updateUserInfo(UserInfo newUserInfo) {sqlSessionTemplate.update("com.leo.mapper.UserInfoMapper.updateUserInfo", newUserInfo);}@Overridepublic List<UserInfo> getUserInfoList() {return sqlSessionTemplate.selectList("com.leo.mapper.UserInfoMapper.getUserInfoList");} }
    2.3、使用SqlSessionDaoSupport整合
    2.3.1、項(xiàng)目結(jié)構(gòu)

    2.3.2、新增BaseMapper配置

    這塊是定義一個(gè)父類,這個(gè)父類繼承SqlSessionDaoSupport,然后覆蓋這個(gè)父類的etSqlSessionFactory將我們的sqlSessionFactory注入進(jìn)來(lái),這樣我們的子類只要繼承這個(gè)父類就自動(dòng)把sqlSessionFactory注進(jìn)來(lái)了。

    public class BaseMapperImpl extends SqlSessionDaoSupport{//初始化注入sqlSessionFactoryBaseMapperImpl(SqlSessionFactory sqlSessionFactory){super.setSqlSessionFactory(sqlSessionFactory);} }

    然后在applicationContext.xml中增加配置

    <!-- 定義一個(gè)父類,并且將sqlSessionFactory注入,子類繼承這個(gè)父類--><bean id="baseMapper" class="com.leo.mapper.impl.BaseMapperImpl" lazy-init="false"><constructor-arg index="0" ref="sqlSessionFactory"/></bean>
    2.3.3、實(shí)現(xiàn)UserInfoMapper接口

    繼承我們的BaseMapperImpl,并實(shí)現(xiàn)UserInfoMapper。

    @Service public class UserInfoMapperImpl extends BaseMapperImpl implements UserInfoMapper {UserInfoMapperImpl(SqlSessionFactory sqlSessionFactory) {super(sqlSessionFactory);}@Overridepublic void insertUserInfo(UserInfo userInfo) {this.getSqlSession().insert("com.leo.mapper.UserInfoMapper.insertUserInfo", userInfo);}@Overridepublic void deleteUserInfo(Integer id) {this.getSqlSession().delete("com.leo.mapper.UserInfoMapper.deleteUserInfo", id);}@Overridepublic void updateUserInfo(UserInfo newUserInfo) {this.getSqlSession().update("com.leo.mapper.UserInfoMapper.updateUserInfo", newUserInfo);}@Overridepublic List<UserInfo> getUserInfoList() {return this.getSqlSession().selectList("com.leo.mapper.UserInfoMapper.getUserInfoList");} }

    如果不使用這種方式,那么我們的每一個(gè)Mapper接口的實(shí)現(xiàn)類寫(xiě)到配置文件中然后將sqlSessionFactory注入。一個(gè)Mapper就要寫(xiě)一個(gè),多個(gè)的話需要配置很多

    <bean id="userInfoMapper" class="com.leo.mapper.impl.UserInfoMapperImpl"><property name="sqlSessionFactory" ref="sqlSessionFactory"/></bean>

    相應(yīng)的實(shí)現(xiàn)類UserInfoMapperImpl,其他代碼跟上面一樣,所以省略了。

    @Service public class UserInfoMapperImpl extends SqlSessionDaoSupport implements UserInfoMapper {
    2.4、使用org.apache.ibatis.annotations提供注解方式整合
    2.4.1、項(xiàng)目結(jié)構(gòu)

    結(jié)構(gòu)圖中,少了Mapper的實(shí)現(xiàn)類,也少了Mapper.xml文件,看起來(lái)很簡(jiǎn)潔

    2.4.2、關(guān)鍵配置

    配置文件的org.mybatis.spring.mapper.MapperScannerConfigurer不能少,注意要掃描的Mapper接口的包名basePackage,不需要配置Mapper.xml路徑了,通過(guò)配置實(shí)現(xiàn)不需要了。

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!--指定會(huì)話工廠,如果當(dāng)前上下文中只定義了一個(gè)則該屬性可省去 --><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><!-- 指定要自動(dòng)掃描接口的基礎(chǔ)包,實(shí)現(xiàn)接口 --><property name="basePackage" value="com.leo.mapper"/></bean>
    2.4.3、UserInfoMapper的定義

    UserInfoMapper.java定義如下:

    public interface UserInfoMapper {/*** 增加用戶信息** @param userInfo*/@Insert("INSERT INTO USER_INFO(NAME,GENDER,AGE,REMARKS) VALUES(#{name},#{gender},#{age},#{remarks})")void insertUserInfo(UserInfo userInfo);/*** 刪除用戶信息** @param id*/@Delete("DELETE FROM USER_INFO WHERE ID=#{ID}")void deleteUserInfo(Integer id);/*** 修改用戶信息** @param newUserInfo*/@Update("UPDATE USER_INFO SET NAME = #{name},GENDER = #{gender},AGE = #{age},REMARKS = #{remarks}")void updateUserInfo(UserInfo newUserInfo);/*** 查詢用戶信息** @return*/@Select("SELECT ID id, NAME name, GENDER gender,AGE age,REMARKS remarks FROM USER_INFO WHERE 1=1")List<UserInfo> getUserInfoList(); }

    通過(guò)org.apache.ibatis.annotations提供給我們的注解,加上sql語(yǔ)句就可以實(shí)現(xiàn)以前在Mapper.xml配置中實(shí)現(xiàn)的功能。

    3、總結(jié)

  • 第一種整合方式比較常見(jiàn)也比較常用
  • 第二第三種整合方式比較靈活,也可以結(jié)合第一種方式使用
  • 第四種方式配置比較少,但是工作中實(shí)際上是不常見(jiàn)的,因?yàn)閤ml文件更加清晰,并且修改起來(lái)比修改代碼更加方便。
  • 總結(jié)

    以上是生活随笔為你收集整理的SpringMVC学习(六)——Spring四种方式整合MyBatis的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。