最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring?Boot?整合持久層之MyBatis

 更新時(shí)間:2022年08月13日 09:57:46   作者:一只小熊貓呀  
在實(shí)際開發(fā)中不僅僅是要展示數(shù)據(jù),還要構(gòu)成數(shù)據(jù)模型添加數(shù)據(jù),這篇文章主要介紹了SpringBoot集成Mybatis操作數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

整合MyBatis

MyBatis 是一款優(yōu)秀的持久層框架,原名 iBatis ,2010年遷移到 Goole Code 并改名為 MyBatis ,2013年遷移到 GitHub 上。MyBatis 支持定制化 SQL 、存儲(chǔ)過程及高級(jí)映射。MyBatis 幾乎避免了所有的 JDBC 代碼手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。在傳統(tǒng)的 SSM 框架整合中,使用 MyBatis 需要大量的 XML 配置,而在 Spring Boot 中,MyBatis 提供了一套自動(dòng)化配置方案,可以做到 MyBatis 開箱即用。

1. 創(chuàng)建項(xiàng)目

創(chuàng)建 Spring Boot 項(xiàng)目,添加 MyBatis 依賴、數(shù)據(jù)庫驅(qū)動(dòng)依賴以及數(shù)據(jù)庫連接池依賴,如下:

<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ù)庫連接配置 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ù)庫訪問層

創(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 上都添加注解;還有一種簡單的方式是在配置類上添加@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)
  • #{} 用來代替接口中的參數(shù),實(shí)體類中的屬性可以直接通過 #{實(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 配置文件建議寫在 resources 目錄下,但是上文的 Mapper.xml 文件寫在包下,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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java輸出打印工具類封裝的實(shí)例

    Java輸出打印工具類封裝的實(shí)例

    下面小編就為大家?guī)硪黄狫ava輸出打印工具類封裝的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java嵌套for循環(huán)優(yōu)化方案分享

    Java嵌套for循環(huán)優(yōu)化方案分享

    介紹了Java中嵌套for循環(huán)的優(yōu)化方法,包括減少循環(huán)次數(shù)、合并循環(huán)、使用更高效的數(shù)據(jù)結(jié)構(gòu)、并行處理、預(yù)處理和緩存、算法優(yōu)化、盡量減少對(duì)象創(chuàng)建以及本地變量優(yōu)化,通過這些方法,可以顯著提升程序的執(zhí)行效率,文章還以動(dòng)態(tài)規(guī)劃優(yōu)化示例——最長遞增子序列
    2025-03-03
  • Java讀取Properties文件的七種方法的總結(jié)

    Java讀取Properties文件的七種方法的總結(jié)

    這篇文章主要介紹了Java讀取Properties文件的七種方法的總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Springboot2.7+Minio8 實(shí)現(xiàn)大文件分片上傳

    Springboot2.7+Minio8 實(shí)現(xiàn)大文件分片上傳

    本文主要介紹了Springboot2.7+Minio8 實(shí)現(xiàn)大文件分片上傳,通過文件切片上傳,我們能夠提高文件上傳的速度,優(yōu)化用戶體驗(yàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Java哈希表和有序表實(shí)例代碼講解

    Java哈希表和有序表實(shí)例代碼講解

    這篇文章主要介紹了Java哈希表和有序表,哈希表也稱散列表,是一種以鍵值對(duì)形式存儲(chǔ)記錄的數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)支持根據(jù)鍵的內(nèi)容直接訪問在內(nèi)存特定位置的值,并且可以進(jìn)行查找、添加和刪除操作
    2023-04-04
  • java實(shí)現(xiàn)批量導(dǎo)入.csv文件到mysql數(shù)據(jù)庫

    java實(shí)現(xiàn)批量導(dǎo)入.csv文件到mysql數(shù)據(jù)庫

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)批量導(dǎo)入.csv文件到mysql數(shù)據(jù)庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • java springmvc 注冊(cè)中央調(diào)度器代碼解析

    java springmvc 注冊(cè)中央調(diào)度器代碼解析

    這篇文章主要介紹了java springmvc 注冊(cè)中央調(diào)度器代碼解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • springboot使用filter獲取自定義請(qǐng)求頭的實(shí)現(xiàn)代碼

    springboot使用filter獲取自定義請(qǐng)求頭的實(shí)現(xiàn)代碼

    這篇文章主要介紹了springboot使用filter獲取自定義請(qǐng)求頭的實(shí)例代碼,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • java 實(shí)現(xiàn)雙向鏈表實(shí)例詳解

    java 實(shí)現(xiàn)雙向鏈表實(shí)例詳解

    這篇文章主要介紹了java 實(shí)現(xiàn)雙向鏈表實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 詳解JDK中ExecutorService與Callable和Future對(duì)線程的支持

    詳解JDK中ExecutorService與Callable和Future對(duì)線程的支持

    這篇文章主要介紹了詳解JDK中ExecutorService與Callable和Future對(duì)線程的支持的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09

最新評(píng)論

高州市| 芦溪县| 辽中县| 淮滨县| 翁源县| 东山县| 深水埗区| 延寿县| 综艺| 二连浩特市| 清水县| 旺苍县| 手机| 永和县| 桦南县| 五常市| 柯坪县| 阿荣旗| 哈巴河县| 塔河县| 禄丰县| 英山县| 噶尔县| 通化市| 丹巴县| 确山县| 绵竹市| 巫山县| 沐川县| 宁南县| 图木舒克市| 涿鹿县| 白银市| 股票| 固安县| 都安| 本溪| 祁阳县| 商水县| 左贡县| 云阳县|