4-Mybatis-整合Spring

方法一: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&amp;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);
    }
}
發佈了44 篇原創文章 · 獲贊 42 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章