SSM框架整合 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&characterEncoding=utf-8&useSSL=true&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 層沒有問題!
未完,沒有總結。