背景:一個學弟問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包可留言或者聯繫羣主。有時間的話也會遠程幫助解決問題。
堅持總結工作中遇到的技術問題,堅持記錄工作中所思所見。以下資料羣中均可下載