MyBatis實現資料庫操作DAO的三種方式
阿新 • • 發佈:2019-01-27
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();
}
- 建立具體的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;
}
}
- 配置檔案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>
- 測試:
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();
}