Spring?Boot?整合持久層之MyBatis
整合MyBatis
MyBatis 是一款優(yōu)秀的持久層框架,原名 iBatis ,2010年遷移到 Goole Code 并改名為 MyBatis ,2013年遷移到 GitHub 上。MyBatis 支持定制化 SQL 、存儲(chǔ)過(guò)程及高級(jí)映射。MyBatis 幾乎避免了所有的 JDBC 代碼手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。在傳統(tǒng)的 SSM 框架整合中,使用 MyBatis 需要大量的 XML 配置,而在 Spring Boot 中,MyBatis 提供了一套自動(dòng)化配置方案,可以做到 MyBatis 開(kāi)箱即用。
1. 創(chuàng)建項(xiàng)目
創(chuàng)建 Spring Boot 項(xiàng)目,添加 MyBatis 依賴、數(shù)據(jù)庫(kù)驅(qū)動(dòng)依賴以及數(shù)據(jù)庫(kù)連接池依賴,如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <!-- 排除默認(rèn)的jackson-databind --> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </exclusion> </exclusions> </dependency> <!-- 引入fastjson依賴 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.78</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.9</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
2. 創(chuàng)表實(shí)體類等
表
CREATE TABLE `book` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(128) DEFAULT NULL, `author` varchar(128) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
實(shí)體類 Book
public class Book { private Integer id; private String name; private String author; @Override public String toString() { return "Book{" + "id=" + id + ", name='" + name + '\'' + ", author='" + author + '\'' + '}'; } 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 String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } }
數(shù)據(jù)庫(kù)連接配置 application.properties
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/weirdo?useUnicode=true&characterEncoding=utf8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
3. 創(chuàng)建數(shù)據(jù)庫(kù)訪問(wèn)層
創(chuàng)建 BookMapper
@Mapper public interface BookMapper { int addBook(Book book); int deleteBookById(Integer id); int updateBookById(Book book); Book getBookById(Integer id); List<Book> getAllBooks(); }
代碼解釋:
- 在項(xiàng)目的根包下面創(chuàng)建一個(gè)子包 Mapper ,在 Mapper 中創(chuàng)建 BookMapper
- 有兩種方式指明該類是一個(gè) Mapper:第一種如前面的代碼所示,在 BookMapper 上添加 @Mapper 注解,表名該接口是一個(gè) MyBatis 中的 Mapper ,這種方式需要在每一個(gè) Mapper 上都添加注解;還有一種簡(jiǎn)單的方式是在配置類上添加@MapperScan(“com.sang.mapper”) 注解,表示掃描 com.sang.mapper 包下的所有接口作為 Mapper ,這樣就不需要在每個(gè)接口上配置 @Mapper 注解了
4. 創(chuàng)建 BookMapper.xml
<?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.sang.mapper.BookMapper"> <insert id="addBook" parameterType="com.sang.model.Book"> INSERT INTO book(name,author) VALUES (#{name},#{author}) </insert> <delete id="deleteBookById" parameterType="int"> DELETE FROM book WHERE id=#{id} </delete> <update id="updateBookById" parameterType="com.sang.model.Book"> UPDATE book set name=#{name},author=#{author} WHERE id=#{id} </update> <select id="getBookById" parameterType="int" resultType="com.sang.model.Book"> SELECT * FROM book WHERE id=#{id} </select> <select id="getAllBooks" resultType="com.sang.model.Book"> SELECT * FROM book </select> </mapper>
代碼解釋:
- 針對(duì) BookMapper 接口中的每一個(gè)方法都在 BookMapper.xml 中列出了實(shí)現(xiàn)
- #{} 用來(lái)代替接口中的參數(shù),實(shí)體類中的屬性可以直接通過(guò) #{實(shí)體類屬性名} 獲取
5. 創(chuàng)建Service和BookController
@Service public class BookService { @Autowired BookMapper bookMapper; public int addBook(Book book) { return bookMapper.addBook(book); } public int updateBook(Book book) { return bookMapper.updateBookById(book); } public int deleteBookById(Integer id) { return bookMapper.deleteBookById(id); } public Book getBookById(Integer id) { return bookMapper.getBookById(id); } public List<Book> getAllBooks() { return bookMapper.getAllBooks(); } }
@RestController public class BookController { @Autowired BookService bookService; @GetMapping("/bookOps") public void bookOps() { Book b1 = new Book(); b1.setName("西廂記"); b1.setAuthor("王實(shí)甫"); int i = bookService.addBook(b1); System.out.println("addBook>>>" + i); Book b2 = new Book(); b2.setId(1); b2.setName("朝花夕拾"); b2.setAuthor("魯迅"); int updateBook = bookService.updateBook(b2); System.out.println("updateBook>>>"+ JSON.toJSONString(updateBook)); Book b3 = bookService.getBookById(1); System.out.println("getBookById>>>"+JSON.toJSONString(b3)); int delete = bookService.deleteBookById(2); System.out.println("deleteBookById>>>"+ JSON.toJSONString(delete)); List<Book> allBooks = bookService.getAllBooks(); System.out.println("getAllBooks>>>"+JSON.toJSONString(allBooks)); } }
6. 配置 pom.xml 文件
在 Maven 工程中,XML 配置文件建議寫(xiě)在 resources 目錄下,但是上文的 Mapper.xml 文件寫(xiě)在包下,Maven 在運(yùn)行時(shí)會(huì)忽略包下的 XML 文件,因此需要在 pom.xml 文件中重新指明資源文件位置,配置如下:
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> </resource> </resources> </build>
在瀏覽器中數(shù)據(jù) http://localhost:8081/bookOps 查看日志:
addBook>>>1
updateBook>>>1
getBookById>>>{"author":"魯迅","id":1,"name":"朝花夕拾"}
deleteBookById>>>0
getAllBooks>>>[{"author":"魯迅","id":1,"name":"朝花夕拾"},{"author":"王實(shí)甫","id":3,"name":"西廂記"},{"author":"王實(shí)甫","id":4,"name":"西廂記"}]
到此這篇關(guān)于Spring Boot 整合持久層之MyBatis的文章就介紹到這了,更多相關(guān)Spring Boot MyBatis內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot詳解整合MyBatis過(guò)程中可能遇到的問(wèn)題
- SpringBoot MyBatis保姆級(jí)整合教程
- SpringBoot整合Mybatis-plus的具體過(guò)程使用
- SpringBoot?整合mybatis+mybatis-plus的詳細(xì)步驟
- Springboot整合mybatis開(kāi)啟二級(jí)緩存的實(shí)現(xiàn)示例
- SpringBoot整合MyBatis的代碼詳解
- SpringBoot整合MybatisPlus實(shí)現(xiàn)增刪改查功能
- SpringBoot整合MyBatis-Plus樂(lè)觀鎖不生效的問(wèn)題及解決方法
- springboot整合mybatis的超詳細(xì)過(guò)程(配置模式+注解模式)
相關(guān)文章
聊聊Spring Boot 如何集成多個(gè) Kafka
這篇文章主要介紹了Spring Boot 集成多個(gè) Kafka的相關(guān)資料,包括配置文件,生成者和消費(fèi)者配置過(guò)程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2023-10-10java Arrays快速打印數(shù)組的數(shù)據(jù)元素列表案例
這篇文章主要介紹了java Arrays快速打印數(shù)組的數(shù)據(jù)元素列表案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09java 中動(dòng)態(tài)代理詳解及實(shí)例
這篇文章主要介紹了java 中動(dòng)態(tài)代理詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-06-06MybatisPlusException:Failed?to?process,Error?SQL異常報(bào)錯(cuò)的解決辦法
這篇文章主要給大家介紹了關(guān)于MybatisPlusException:Failed?to?process,Error?SQL異常報(bào)錯(cuò)的解決辦法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-03-03springboot redis使用lettuce配置多數(shù)據(jù)源的實(shí)現(xiàn)
這篇文章主要介紹了springboot redis使用lettuce配置多數(shù)據(jù)源的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Java基礎(chǔ)之線程鎖相關(guān)知識(shí)總結(jié)
今天給大家?guī)?lái)的是關(guān)于Java線程的相關(guān)知識(shí),文章圍繞著Java線程鎖展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06Java8中常見(jiàn)函數(shù)式接口的使用示例詳解
在 Java 8 中,函數(shù)式接口是一個(gè)關(guān)鍵的特性,它們?cè)试S將方法作為參數(shù)傳遞或返回類型,本文為大家整理了一些常見(jiàn)的函數(shù)式接口的使用,希望對(duì)大家有所幫助2023-12-12