1. 程式人生 > >MyBatis實現資料庫操作DAO的三種方式

MyBatis實現資料庫操作DAO的三種方式

1.Dao介面+Dao實現類+XML對映檔案(不建議使用,較繁瑣)

具體實現細節:通過在Dao介面的實現類中呼叫SqlSession的方法,與傳統的在實現類中呼叫JDBC提供的一系列執行sql的方法大同小異

1. 建立Dao介面:

package com.oracle.dao;

import java.util.List;

import com.oracle.vo.Book;

public interface BookDao {
    /**
     * 插入一本圖書
     * @param book
     */
    public void save(Book book);
    /**
     * 根據isbn刪除圖書
     * @param
isbn */
public void delete(Integer isbn); /** * 查詢全部圖書資訊 * @return */ public List<Book> getAll(); }
  1. 建立具體的Dao實現類:具體呼叫SqlSession的方法執行資料庫的操作
package com.oracle.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.oracle.utils.SessionUtil;
import
com.oracle.vo.Book; public class BookDaoImpl implements BookDao { public void save(Book book) { //獲得session SqlSession session=SessionUtil.getSession(); //執行操作 session.insert("save", book); session.commit(); session.close(); } public void delete
(Integer isbn) { //獲得session SqlSession session=SessionUtil.getSession(); //執行操作 session.delete("delete", isbn); session.commit(); session.close(); } public List<Book> getAll() { //獲得session SqlSession session=SessionUtil.getSession(); //執行操作 List<Book> list= session.selectList("getAll"); session.close(); return list; } }
  1. 配置檔案XML:只負責配置sql語句及引數
<?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.oracle.dao.BookDao">
    <insert id="save" parameterType="com.oracle.vo.Book"
        keyProperty="isbn" useGeneratedKeys="true">
        insert into
        book(isbn,bookname,price)
        values(null,#{bookName},#{price})
    </insert>
    <select id="getAll" resultType="com.oracle.vo.Book">
        select * from book
    </select>
    <delete id="delete" parameterType="int">
        delete from book where isbn=#{isbn}
    </delete>
</mapper> 
  1. 測試:
package mybatisTest;
import java.io.IOException;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;

import com.oracle.dao.BookDao;
import com.oracle.dao.BookDaoImpl;
import com.oracle.vo.Book;
public class Test {

    @org.junit.Test
    public void test() throws IOException {
        BookDao dao=new BookDaoImpl();
//      Book book=new Book();
//      book.setBookName("深入瞭解java虛擬機器");
//      book.setPrice(96);
//      dao.save(book);
//      System.out.println(book);
//      dao.delete(1);
        List<Book> list=dao.getAll();
        for (Book book : list) {
            System.out.println(book);
        }
    }

}

2.Dao介面+XML對映檔案

要求:
    介面的名稱與配置檔案的namespace(名稱空間)一致
    介面中方法名與配置檔案中的id相對應  
    引數型別相同 
具體實現:建立滿足上述條件的Dao介面以及XML對映檔案,使用SqlSession提供的getMapper(Class<T> arg0);由Mybatis自動建立具體的實現類
示例:
package mybatisTest;
import java.io.IOException;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;

import com.oracle.dao.BookDao;
import com.oracle.dao.BookDaoImpl;
import com.oracle.utils.SessionUtil;
import com.oracle.vo.Book;
public class Test {
    @org.junit.Test
    public void test() throws IOException {
        //獲得session
        SqlSession session=SessionUtil.getSession();
        //通過session的getMapper方法,建立BookDao的實現類
        BookDao dao=session.getMapper(BookDao.class);
        Book book=new Book();
        book.setBookName("深入瞭解java虛擬機器");
        book.setPrice(96);
        dao.save(book);
        session.commit();
        session.close();
        System.out.println(book);
    }
}

3. Dao介面+Annotation(僅用於簡單的sql語句,複雜的sql使用該方式太繁瑣,不易於維護)

具體實現:在Dao介面的方法上加入對應操作的Annotation,獲得介面實現類的方法與Dao介面+對映檔案方法相同(SqlSession 的getMapper()方法)
要求:需要使用配置檔案(configuration.xml)中<mappers>的子標記<package>,name屬性對應具有Annotation的介面的包名
    示例:`<package name="com.oracle.dao"/>`
示例: 
package com.oracle.dao;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;

import com.oracle.vo.Book;
public interface BookDao {
    /**
     * 插入一本圖書
     * @param book
     */
    @Insert("insert into book(isbn,bookname,price) values(null,#{bookName},#{price})")
    public void save(Book book);
    /**
     * 根據isbn刪除圖書
     * @param isbn
     */
    @Delete("delete from book where isbn=#{isbn}")
    public void delete(Integer isbn);
    /**
     * 查詢全部圖書資訊
     * @return
     */
    @Select("select * from book")
    public List<Book> getAll();
}