1. 程式人生 > 其它 >SSM框架整合 MyBatis層

SSM框架整合 MyBatis層

資料庫配置檔案、MyBatis配置檔案、編寫實體類、編寫Dao層介面、編寫Mapper.xml檔案、編寫Service層、MyBatis層測試

SSM框架整合 MyBatis層

搭建完基本的環境後,就要從 SSM 框架最基本的 MyBatis 層開始搭建了。

1. 資料庫配置檔案

為了方便修改(雖然這裡不會修改),資料庫配置最好提取出來,單獨寫在一個配置檔案 db.properties 中

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssmbuild?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
# 為了 c3p0,這裡只能叫 user 了
user=root
password=0723

然後用 IDEA 連線資料庫,執行一下最基本的查詢語句看看資料庫是否正常即可。

2. MyBatis配置檔案

大部分的配置都可以在 Spring 的配置檔案中進行,不過 MyBatis 的配置檔案中還是留下 typeAlias 和 mappers 的配置,方便檢視

<?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>
        <package name="com.qiyuan.entity"/>
    </typeAliases>
    
    <!--資料來源交給 Spring 配置-->

    <mappers>
        <!--現在還沒有-->
    </mappers>

</configuration>

3. 編寫實體類

在 com.qiyuan.entity 包下,對應資料庫中表的欄位,編寫對應的實體類

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Book {

    private int bookID;
    private String bookName;
    private int bookCounts;
    private String detail;

}

資料庫就一張表 books,所以實體類也就只有一個 Book,使用了 Lombok

4. 編寫Dao層介面

在 com.qiyuan.dao 包下,編寫一個介面包含所有對資料庫的操作

public interface BookMapper {
    // 增
    int addBook(Book book);
    // 刪
    int deleteBook(int bookID);
    // 改
    int updateBook(Book book);
    // 查 一個
    Book queryBook(int bookID);
    // 查 所有
    List<Book> queryAllBook();
}

基本的增刪改查操作,查詢分為查一個或查所有。

5. 編寫Mapper.xml檔案

由介面指定了對資料庫的操作後,就要由 Mapper.xml 檔案來實現了(暫時的實現類),Mapper.xml 檔案也放在 dao 包下

<?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.qiyuan.dao.BookMapper">

    <!--增加 Book -->
    <insert id="addBook" parameterType="Book">
      insert into books(bookName,bookCounts,detail)
      values (#{bookName}, #{bookCounts}, #{detail})
    </insert>

    <!--根據 id 刪除 Book -->
    <delete id="deleteBookById" parameterType="int">
      delete from books where bookID = #{bookID}
    </delete>

    <!--更新 Book -->
    <update id="updateBook" parameterType="Book">
      update books
      set bookName = #{bookName}, bookCounts = #{bookCounts}, detail = #{detail}
      where bookID = #{bookID}
    </update>

    <!--根據 id 查詢 Book -->
    <select id="queryBookById" resultType="Book">
      select * from books
      where bookID = #{bookID}
    </select>

    <!--查詢全部Book-->
    <select id="queryAllBook" resultType="Book">
      select * from books
    </select>

</mapper>

編寫完 Mapper.xml 後要記得註冊!這時候留著 MyBatis 配置檔案的好處就來了

    <mappers>
        <mapper class="com.qiyuan.dao.BookMapper"/>
    </mappers>

可以直接在 MyBatis 的配置檔案中配置,不用跑到 Spring 去,思路比較清晰!

6. 編寫Service層

現在要把 Dao 層的對資料庫的操作封裝到 Dervice 層中,對應不同的業務!

在 com.qiyuan.service 包下編寫 Service 層介面,方法對應 Dao 層的介面

// BookService 呼叫 dao 層
public interface BookService {
    //增加 Book
    int addBook(Book book);
    //根據 id 刪除 Book
    int deleteBookById(int id);
    //更新 Book
    int updateBook(Book book);
    //根據 id 查詢 Book
    Book queryBookById(int id);
    //查詢全部 Book
    List<Book> queryAllBook();
}

有了 Service 層的介面後,需要一個實現類實現介面中的方法

public class BookServiceImpl implements BookService{

    // 用一個 BookMapper 物件進行對資料庫的操作,這個物件由 Spring 建立和注入,
    // 不過 Spring 注入的應該是實現類 BookMapperImpl,配置 Spring 的時候再說!
    private BookMapper bookMapper;

    public void setBookMapper(BookMapper bookMapper) {
        this.bookMapper = bookMapper;
    }

    public int addBook(Book book) {
        return bookMapper.addBook(book);
    }

    public int deleteBookById(int id) {
        return bookMapper.deleteBookById(id);
    }

    public int updateBook(Book book) {
        return bookMapper.updateBook(book);
    }

    public Book queryBookById(int id) {
        return bookMapper.queryBookById(id);
    }

    public List<Book> queryAllBook() {
        return bookMapper.queryAllBook();
    }
}

通過內建一個 Mapper 物件,封裝了使用 Mapper 物件的操作,方便 Spring 管理,使用者只需呼叫 Service 層即可進行業務操作,不用在意 Dao 層的實現!

注意:Spring 注入進來的,應該是 BookMapperImpl 物件,也就是要在虛擬的實現類 BookMapper.xml 的基礎上封裝出一個真實的實現類 BookMapperImpl 來注入!

至此,MyBatis 層就搭建完成了(包含 Dao 層和 Service 層)!

7. MyBatis層測試

為了保證後面出問題好找,寫完 MyBatis 層先測試一下!

為了測試要在配置檔案中先加上資料來源配置

<environments default="development">    <environment id="development">        <transactionManager type="JDBC"/>        <dataSource type="POOLED">            <property name="driver" value="com.mysql.jdbc.Driver"/>            <property name="url" value="jdbc:mysql://localhost:3306/ssmbuild?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=true&amp;serverTimezone=UTC"/>            <property name="username" value="root"/>            <property name="password" value="0723"/>        </dataSource>    </environment></environments>

然後寫個方法測試一下查詢和增加的功能

public class BookServiceImpl implements BookService{    @Test    public void Test() throws IOException {        // 之前 MyBatis 工具類的工作        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        // 查詢一個        /*Book book = this.queryBookById(3);        System.out.println(book.toString());*/        // 增加        /*Book book = new Book(4, "C++教程", 3, "復活級C++教程");        System.out.println(this.addBook(book));        sqlSession.commit();*/        // 查詢所有        List<Book> books = this.queryAllBook();        for (Book book : books) {            System.out.println(book.toString());        }    }}

執行測試,最後的結果(增加的時候又忘記事務了)

Book(bookID=1, bookName=Java教程, bookCounts=1, detail=入門級JAVA教程)Book(bookID=2, bookName=MySQL教程, bookCounts=10, detail=提升級MySQL教程)Book(bookID=3, bookName=Linux教程, bookCounts=5, detail=入土級Linux教程)Book(bookID=4, bookName=C++教程, bookCounts=3, detail=復活級C++教程)

查詢成功,說明 MyBatis 層沒有問題!

未完,沒有總結。