超詳細Spring整合Mybatis(Spring+Mybatis+Maven+Mysql)

背景:一個學弟問ssm的相關知識,忘了(一直在使用SpringBoot)。,很尷尬,翻翻筆記,寫篇博文記錄一下。

————————————————————————————————————————————

Mybatis快速入門:https://blog.csdn.net/BlackPlus28/article/details/103744972

————————————————————————————————————————————

一、準備階段

準備工作:

環境準備:Eclipse+Mysql+Maven構建項目。

整合思路:

       MyBatis主要是通過SqlSessionFactory產生SqlSession對象,進而通過SqlSession對象訪問數據庫;

       而Spring整合MyBatis的本質就是把MyBatis的SqlSessionFactory對象交給Spring管理。

整合方法:

     1、傳統DAO方式的開發整合(DAO層實現類繼承SqlSessionDaoSupport)(現在基本上不會用這種方式了,不推薦使用這種方式

  2、Mapper接口方式的開發整合(使用MapperFactoryBean)

  3、使用mapper掃描器(基於MapperScannerConfigurer開發)  (用的比較多,本文將使用mapper掃描器進行整合

 

二、代碼整合

         1、創建Maven項目,並添加jar

        

添加pom

<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">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.sss</groupId>
	<artifactId>springMybatisDemo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<dependencies>
		<!-- MYSQL -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.32</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.9</version>
		</dependency>
		<!-- mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.5.0</version>
		</dependency>
		<!--lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.6</version>
		</dependency>
		<!-- Spring依賴 -->
		<!-- 1.Spring核心依賴 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>4.3.7.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>4.3.7.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.3.7.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.2</version>
		</dependency>
		<!-- 2.Spring dao依賴 -->
		<!-- spring-jdbc包括了一些如jdbcTemplate的工具類 spring數據源 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.3.7.RELEASE</version>
		</dependency>
		<!-- mybatis-spring spring整合mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>2.0.2</version>
		</dependency>
		<!-- commons-dbcp -->
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

    2、創建實體類以及數據庫表

Student.java 

注:這裏使用到lombok插件,如若沒有,可刪除,自行添加get與set方法即可。

package com.sss.entity;

import lombok.Data;

@Data
public class Student {
	private Integer stuId;
	private String stuName;
	private String stuAge;
}

創建數據庫及表(三個字段,可手動錄入):

INSERT INTO `springdemo`.`student`(`stuId`, `stuName`, `stuAge`) VALUES (1, '張三', '20');
INSERT INTO `springdemo`.`student`(`stuId`, `stuName`, `stuAge`) VALUES (2, '李四', '21');

   3、在resources中創建db.properties    

   

db.driver = com.mysql.jdbc.Driver
db.url = jdbc:mysql://127.0.0.1:3306/springdemo
db.username = root
db.password = root
db.maxActive=500
db.maxIdle=400

   4、在resources中創建 applicationContext.xml

注:主要做的事情:加載db.properties文件、配置數據庫信息(替代了原來在mybatis中的配置) 、在springIOC容器中創建mybatis核心類sqlsessionFactor

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	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-4.0.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
	<!-- 加載db.properties -->
	<context:property-placeholder
		location="classpath:db.properties" />

	<!-- 配置數據庫信息(替代mybatis配置文件conf.xml) -->
	<bean id="dataSource"
		class="com.alibaba.druid.pool.DruidDataSource">
		<property name="driverClassName" value="${db.driver}" />
		<property name="url" value="${db.url}" />
		<property name="username" value="${db.username}" />
		<property name="password" value="${db.password}" />
		<property name="maxActive" value="${db.maxActive}" />
		<property name="maxIdle" value="${db.maxIdle}" />
	</bean>

	<!-- 在springIOC容器中創建mybatis核心類sqlsessionFactor -->
	<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
	<bean id="sqlSessionFactory"
		class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 需要 dataSource -->
		<property name="dataSource" ref="dataSource"></property>
		<!-- 自動掃描mapping.xml文件 則在mybatis中則不需要重新配置 -->
		<property name="mapperLocations"
			value="classpath:mappers/*.xml"></property>
	</bean>
	
</beans>

5、創建StudentMapper.java 接口文件

package com.sss.mapper;


import com.sss.entity.Student;

public interface StudentMapper {
	
	  Student selectStudent(Integer id);
}

6、在resources中創建mappers文件夾以及studentMapper.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">

<mapper namespace="com.sss.mapper.StudentMapper">

	<select id="selectStudent" parameterType="int"  resultType="com.sss.entity.Student">
		select * from student where stuId = #{stuId}
	</select>
</mapper>

7、在applicationContext.xml中添加掃描包配置

添加部分:

<!-- 通過Mapper掃描器MapperScannerConfigurer,批量將 basePackage指定包中的DAO接口全部生成Mapper動態代理對象 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.sss.mapper"></property>
		<property name="sqlSessionFactoryBeanName"
			value="sqlSessionFactory">
		</property>
	</bean>

 完成applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	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-4.0.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
	<!-- 加載db.properties -->
	<context:property-placeholder
		location="classpath:db.properties" />

	<!-- 配置數據庫信息(替代mybatis配置文件conf.xml) -->
	<bean id="dataSource"
		class="com.alibaba.druid.pool.DruidDataSource">
		<property name="driverClassName" value="${db.driver}" />
		<property name="url" value="${db.url}" />
		<property name="username" value="${db.username}" />
		<property name="password" value="${db.password}" />
		<property name="maxActive" value="${db.maxActive}" />
		<property name="maxIdle" value="${db.maxIdle}" />
	</bean>

	<!-- 在springIOC容器中創建mybatis核心類sqlsessionFactor -->
	<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
	<bean id="sqlSessionFactory"
		class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 需要 dataSource -->
		<property name="dataSource" ref="dataSource"></property>
		<!-- 自動掃描mapping.xml文件 則在mybatis中則不需要重新配置 -->
		<property name="mapperLocations"
			value="classpath:mappers/*.xml"></property>
	</bean>
	
	<!-- 通過Mapper掃描器MapperScannerConfigurer,批量將 basePackage指定包中的DAO接口全部生成Mapper動態代理對象 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.sss.mapper"></property>
		<property name="sqlSessionFactoryBeanName"
			value="sqlSessionFactory">
		</property>
	</bean>
</beans>

8、創建Test測試類

package com.sss;

import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.sss.entity.Student;
import com.sss.mapper.StudentMapper;

public class Test {
	public static void main(String[] args) {
		ApplicationContext cxt = null;
		try {
			 //1.創建Spring的IOC容器對象
			 cxt = new ClassPathXmlApplicationContext("applicationContext.xml");
			//2.從IOC容器中獲取Bean實例(id爲"user"的User對象)
			StudentMapper studentMapper= (StudentMapper) cxt.getBean(StudentMapper.class);
			Student getStudentResult = studentMapper.selectStudent(1);
			System.out.println("getStudentResult: " + getStudentResult);
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			if(cxt != null) {
				((ConfigurableApplicationContext)cxt).close();
			}
		}
	}
}

 查找結果:

三、總結

  1、本來是在mybatis配置文件中配置數據源信息,現在需要spring來管理數據源信息。

  2、需要spring通過單例方式管理SqlSessionFactory。

  3、使用SqlSessionFactory創建SqlSession。(spring和mybatis整合自動完成)

  4、mapper都需要由spring進行管理,spring和mybatis整合生成mapper代理對象。

後面還會涉及到事物、多數據源等其他。

需要源碼留言或者進羣聯繫羣主即可。  或者需要jar包可留言或者聯繫羣主。有時間的話也會遠程幫助解決問題。

堅持總結工作中遇到的技術問題,堅持記錄工作中所思所見。以下資料羣中均可下載

發佈了132 篇原創文章 · 獲贊 241 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章