方法一:Spring和mybatis整合
1.1 整合思路
Spring通過單例模式管理SqlSessionFactory。
Spring和mybatis整合生成代理對象,使用SqlSessionFactory創建SqlSession。
持久層的mapper都需要由Spring進行管理。
1.2 整合環境
Spring5.0.2
mybatis3.4.5
Mybatis-Spring-1.3.1.jar
Mybatis和Spring的整合包。早期ibatis和Spring整合是由Spring官方提供。現在mybatis和Spring整合由mybatis提供。
1.3 SqlSessionFactory配置
<?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>
<!-- 全局配置 -->
<settings>
<!-- 延遲加載 -->
<setting name="lazyLoadingEnabled" value="true"/><!-- 默認false -->
<setting name="aggressiveLazyLoading" value="false"/><!-- 默認true -->
<!-- 配置二級緩存,默認開啓 -->
<setting name="cacheEnabled" value="true"/>
</settings>
<!-- 設置別名 -->
<typeAliases>
<!-- 批量定義 (mybatis自動掃描包下類,定義別名,別名爲類名)-->
<package name="com.wzw.sm.model"/>
</typeAliases>
<!-- 加載mapper映射文件 -->
<mappers>
<!-- 批量加載mapper
指定mapper接口包名,mybatis自動掃描包下所有的mapper接口
規範:mapper接口名與mapper.xml文件名保持一致,且在同一目錄下
-->
<package name="com.wzw.sm.mapper"/>
</mappers>
</configuration>
1.4 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:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
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/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd ">
<!-- 加載配置文件 -->
<context:property-placeholder location="db.properties"/>
<!-- 1 c3p0連接池配置 -->
<!-- 1.1 創建ComboPooledDataSource對象 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 1.2 set方法注入屬性 -->
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!-- 創建SqlSessionFactory -->
<bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 加載mybatis配置文件 -->
<property name="configLocation" value="SqlMapConfig.xml"></property>
<!-- 配置數據源 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 創建UserMapperImpl -->
<bean name="userMapperImpl" class="com.wzw.sm.mapper.impl.UserMapperImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
</beans>
1.5 User.java
package com.wzw.sm.model;
public class User {
private Integer user_id;
private String user_name;
public Integer getUser_id() {
return user_id;
}
public void setUser_id(Integer user_id) {
this.user_id = user_id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
@Override
public String toString() {
return "User [user_id=" + user_id + ", user_name=" + user_name + "]";
}
}
1.6 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">
<mapper namespace="com.wzw.sm.mapper.UserMapper">
<select id="selectUserById" parameterType="int" resultType="user">
SELECT * FROM `user` WHERE user_id = #{user_id}
</select>
</mapper>
1.7 UserMapper.java
public interface UserMapper {
//根據user_id查詢User
public User selectUserById(Integer user_id);
}
1.8 UserMapperImpl.java
public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper{
// private SqlSessionFactory sqlSessionFactory;
//
// public SqlSessionFactory getSqlSessionFactory() {
// return sqlSessionFactory;
// }
// public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
// this.sqlSessionFactory = sqlSessionFactory;
// }
@Override
public User selectUserById(Integer user_id) {
SqlSession sqlSession = this.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.selectUserById(user_id);
// sqlSession.close();
return user;
}
}
1.9 測試代碼
public class Demo1 {
@Test
public void test1() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapperImpl userMapperImpl = (UserMapperImpl) context.getBean("userMapperImpl");
User user = userMapperImpl.selectUserById(1);
System.out.println(user);
}
}
方法二: Spring和mybatis整合(Mapper代理開發)
2.1 db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/sm?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=root
2.2 log4j.properties
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
2.3 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: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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd ">
<!-- 加載配置文件 -->
<context:property-placeholder location="db.properties"/>
<!-- 配置數據源 -->
<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!-- 創建SqlSessionFactory -->
<bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="SqlMapConfig.xml"></property>
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 配置mapper掃描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.wzw.sm.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
</beans>
2.4 SqlMapConfig.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>
<!-- 全局配置 -->
<settings>
<!-- 延遲加載 -->
<setting name="lazyLoadingEnabled" value="true" /><!-- 默認false -->
<setting name="aggressiveLazyLoading" value="false" /><!-- 默認true -->
<!-- 配置二級緩存,默認開啓 -->
<setting name="cacheEnabled" value="true" />
<setting name="logImpl" value="LOG4J" />
</settings>
<!-- 設置別名 -->
<typeAliases>
<!-- 批量定義 (mybatis自動掃描包下類,定義別名,別名爲類名) -->
<package name="com.wzw.sm.model" />
</typeAliases>
</configuration>
2.5 User.java
public class User {
private Integer user_id;
private String user_name;
public Integer getUser_id() {
return user_id;
}
public void setUser_id(Integer user_id) {
this.user_id = user_id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
@Override
public String toString() {
return "User [user_id=" + user_id + ", user_name=" + user_name + "]";
}
}
2.6 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">
<mapper namespace="com.wzw.sm.mapper.UserMapper">
<select id="selectUserById" parameterType="int" resultType="user">
SELECT * FROM `user` WHERE user_id = #{user_id}
</select>
</mapper>
2.7 UserMapper.java
public interface UserMapper {
//根據user_id查詢用戶信息
public User selectUserById(Integer user_id);
}
2.8 測試類
public class Demo1 {
@Test
public void test1() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper userMapper = (UserMapper) context.getBean("userMapper");
User user = userMapper.selectUserById(1);
System.out.println(user);
}
}