【Mybatis從0到1-015】Spring與MyBatis整合原始開發DAO(不推薦使用)

mybatis與Spring整合之後,開發dao的原始方法,不推薦使用,這裏僅與之前mybatis獨自開發時做簡單的對比。【005-mybatis獨自使用開發dao】

整合思路

需要spring通過單例方式管理SqlSessionFactory。(人工)
spring和mybatis整合生成代理對象,使用SqlSessionFactory創建SqlSession。(spring和mybatis整合自動完成)
持久層的mapper都需要由spring進行管理。(人工)

整合環境

創建一個新的java工程(接近實際開發的工程結構)
jar包:
mybatis3.2.7的jar包
spring3.2.0的jar包

mybatis和spring的整合包:早期ibatis和spring整合是由spring官方提供,mybatis和spring整合由mybatis提供。

現在開始,重新創建工程項目,基於maven,Spring mvc和mybatis。

【1】新建maven工程,name爲mybatis_spring,建成後添加Spring mvc框架。同之前一樣,創建dao文件夾(包含UserDao.java、UserDaoImpl.java),po文件夾(User),以及resource目錄下的sqlMap文件夾及一些文件。

結構如下:


【2】關鍵代碼

UserDao.java代碼如下:

public interface UserDao {
    //根據id查詢
    User findUserById(int id) throws Exception;
}

UserDaoImpl.java代碼如下:

dao接口實現類需要注入SqlSessoinFactory,之前通過構造函數實現,now,通過spring進行注入。
這裏spring聲明配置方式,配置dao的bean:

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {

    public User findUserById(int id) throws Exception {

        //繼承sqlSessionDaoSupport,通過this.getSqlSession()得到sqlSession
        SqlSession sqlSession = this.getSqlSession();

        User user = sqlSession.selectOne("test.findUserById",id);

        return user;
    }
}

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>
    <!-- 別名定義 -->
    <typeAliases>
        <!-- 批量別名定義
        指定包名,mybatis自動掃描包中的po類,自動定義別名,別名就是類名(首字母大寫或小寫都可以)-->
        <package name="po"/>
    </typeAliases>
    <!-- 加載 映射文件 -->
    <mappers>
        <!--<package name="mapper"/>-->
        <mapper resource="sqlMap/User.xml"/>
    </mappers>
</configuration>

applicationContext.xml代碼如下

在applicationContext.xml中配置dao。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       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">
<!--加載配置文件-->
    <context:property-placeholder location="db.properties"/>
    <!--數據源:使用dbcp-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="maxActive" value="10"/>
        <property name="maxIdle" value="5"/>
    </bean>
    <!--sqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--加載mybatis的配置文件-->
        <property name="configLocation" value="classpath:SqlMapConfig.xml"/>
        <!--數據源-->
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--原始dao接口-->
    <bean id="userDao" class="dao.UserDaoImpl">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>
</beans>

User.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">
<!-- namespace命名空間,作用就是對sql進行分類化管理,理解sql隔離
注意:使用mapper代理方法開發,namespace有特殊重要的作用-->
<mapper namespace="test">
    <!-- 在 映射文件中配置很多sql語句 -->
    <!-- 需求:通過id查詢用戶表的記錄 -->
    <!-- 通過 select執行數據庫查詢
    id:標識 映射文件中的 sql
    將sql語句封裝到mappedStatement對象中,所以將id稱爲statement的id
    parameterType:指定輸入 參數的類型,這裏指定int型
    #{}表示一個佔位符號
    #{id}:其中的id表示 接收輸入 的參數,參數名稱就是id,如果輸入參數是簡單類型,#{}中的參數名可以任意,可以value或其它名稱
    resultType:指定sql輸出結果 的所映射的java對象類型,select指定resultType表示將單條記錄映射成的java對象。-->
    <select id="findUserById" parameterType="int" resultType="po.User">
        SELECT *FROM USER WHERE id=#{value}
    </select>
</mapper>

【3】測試程序,關鍵代碼如下:

public class UserDaoImplTest {

    private ApplicationContext applicationContext;
    //在這裏得到Spring容器
    @Before
    public void setUp() throws Exception {
        applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    }

    @Test
    public void findUserById() throws Exception {

        UserDao userDao = (UserDao) applicationContext.getBean("userDao");
        //調用userDao方法
        po.User user = userDao.findUserById(1);

        System.out.println(user);
    }
}

【4】結果顯示


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章