Spring整合Mybatis(基於Dao層接口實現類)

Spring整合Mybatis筆記,鑑於網上的資料魚龍混雜,查看到的部分資料甚至把我帶進溝裏了,特此自己動手記錄筆記:

首先我們知道常規的Mybatis使用基礎需要定義一個Mybatis配置文件,一個Mapper映射文件,然後在需要用到的地方讀取配置文件,代碼如下:

首先我們的數據庫很簡單,如下:

表名爲account

列名分別爲id,name,money

對應的實體類如下:

package com.varlor.pojo;

public class Account {
    private Integer id;
    private String name;
    private Double money;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getMoney() {
        return money;
    }

    public void setMoney(Double money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "Account{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", money=" + money +
                '}';
    }
}

我們定義了一個接口如下:

單獨使用Mybatis的配置文件如下(不用這個),因爲我們這次需要將Spring和Mybatis進行整合,所以下面關於數據庫的配置不需要在這個文件裏:

整合後的配置文件(用這個)

只需要在配置文件裏寫入mappers,告訴mybatis映射文件在哪裏

也可以不寫mybatis的配置文件,完全集成到spring配置文件內,這樣就不需要mybatis配置文件了:

映射文件如下:

至於數據庫相關配置就整合到了Spring配置文件中(因爲我這裏用了C3P0連接池,所以裏面有點不一樣):

<?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:util="http://www.springframework.org/schema/util"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://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
">
    <!--數據庫相關參數配置properties文件引入-->
    <context:property-placeholder location="db.properties"/>
    <!--接口實現類-->
    <bean id="accountMapperImpl" class="com.varlor.mapper.AccountMapperImpl">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>
    <!--數據源-->
    <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
     </bean>
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="datasource"/>
        <property name="configLocation" value="mybatis-config.xml"/>
        <property name="typeAliases" value="com.varlor.pojo.Account"/>
    </bean>
</beans>

 

這裏需要注意一下,我們之前在單獨使用Mybatis的時候是如下引入配置文件並獲得session然後使用session進行相關操作的:

 //1.讀取配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.創建SqlSessionFactory工廠
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(resourceAsStream);
        //3.使用工廠生產SqlSession對象
        SqlSession sqlSession = factory.openSession();

 獲取到session後我們可以使用session來進行相關操作:

現在我們需要集成在spring裏面,因爲我們第一個教程是基於Dao層接口實現類,所以我們這個時候需要AccountMapperImpl實現類,這個類需要集成一個SqlSessionDaoSupport類並且實現AccountMapper接口,SqlSessionDaoSupport這個類下有如下方法:

我們會發現可以獲取到SqlSession,所以我們使用this.getSqlSession獲取到一個session,並且一樣的使用session進行相關操作,代碼如下:

public class AccountMapperImpl extends SqlSessionDaoSupport implements AccountMapper{
    public List<Account> findAll() {
        
        return this.getSqlSession().selectList("com.varlor.mapper.AccountMapper.findAll");
    }
}

 selectList()括號裏的參數代表的是Mapper映射文件,com.varlor.mapper.AccountMapper代表我的映射文件位置,findAll代表映射文件裏的id

測試類:

@Test
    public void testMybatis(){
        ApplicationContext ac = new ClassPathXmlApplicationContext("springconfig.xml");
        AccountMapper accountMapper = (AccountMapper) ac.getBean("accountMapperImpl");
        List<Account> accounts = accountMapper.findAll();
        for (Account account:accounts){
            System.out.println(account);
        }

 

 

 

 

 

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