Mybatis入門指南之實現對數據庫增刪改查

前言

我們關於Spring和Spring MVC的學習也有一段時間瞭,都還沒有進行過數據庫的操作,而在實際項目中數據庫是必不可少的部分,所以我們接下來將來學習Mybatis框架來對數據庫進行一些操作。

MyBatis

簡介

Mybatis原本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation遷移到瞭google code,並且改名為MyBatis,2013年11月遷移到Github。Mybatis是一個實現瞭數據持久化的開源框架,簡單理解就是對JDBC進行封裝封裝再封裝。

所以當看到iBatis的時候我們就應該知道,iBatis就是Mybatis。現在還有很多我們引入的包名還是寫的是iBatis。

優點

  • 與JDBC相比,減少瞭50%以上的代碼量。 
  • Mybatis是最簡單的持久化框架,小巧並且簡單易學。 
  • Mybatis靈活,不會對應用程序或者數據庫的現有設計強加任何影響,SQL寫在XML裡,從程序代碼中徹底分離,降低耦合度,便於統一管理和優化,可重用。 
  • 提供XML標簽,支持編寫動態SQL語句(XML中使用if, else)。  
  • 提供映射標簽,支持對象與數據庫的ORM字段關系映射(在XML中配置映射關系,也可以使用註解)。

缺點

  • SQL語句的編寫工作量較大。
  • SQL語句依賴於數據庫,導致數據庫移植性差,不能隨意更換數據庫。

搭建第一個Mybatis程序

新建項目。

自定義項目名,我這裡定義為myBatisDemo。

引入pom.xml依賴。

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.9</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.30</version>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version>
</dependency>

我們需要引入mybatis依賴、mysql依賴和lombok依賴。

lombok依賴我們前面就使用過,我們可以簡化實體類的開發。而mybatis依賴和mysql依賴是我們數據庫的依賴。

新建數據庫數據表。

我們對數據庫進行操作首先就要有數據庫。所以我們來新建一個數據庫。我們這裡使用工具創建,不需要手敲SQL命令。

新建一個數據庫名為test,庫中建一個名為Students的數據表。

現在我們的表中還沒有數據,等下我們使用代碼來對數據庫進行增刪改查的操作。

新建Student實體類。

package com.xyj.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private long id;
    private String name;
    private int age;
}

我們實體類中的屬性要對應我們數據庫表中的字段。

配置Mybatis的配置文件。

在resources資源文件夾下面創建config.xml配置文件。

在comfig.xml文件中添加以下配置:

<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test?
                useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

driver、url、username、password分別對應數據庫驅動、路徑、用戶名和密碼。

創建StudentMapper.xml文件。

我們在開發中需要為每個實體類創建mapper文件,我們需要在其中寫我們對該該實體類進行操作的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.xyj.mapper.StudentMapper">

    <!--    增   -->
    <insert id="add" parameterType="com.xyj.entity.Student">
        insert into students (id,name,age) values (#{id},#{name},#{age})
    </insert>

    <!--    刪   -->
    <delete id="delete" parameterType="int">
        delete from students where id = #{id};
    </delete>

    <!--    改   -->
    <update id="update" parameterType="com.xyj.entity.Student">
        update students set age = #{age} where id = #{id}
    </update>

    <!--    查   -->
    <select id="query" resultType="com.xyj.entity.Student">
        select * from students
    </select>
</mapper>

在mapper文件中增刪改查對應的標簽為insertdeleteupdateselect。標簽中id是我們之後調用的名字,parameterType表示我們需要傳遞的值的類型。我們這裡傳值使用#{}的格式。

在config.xml中加入mapper。

<mappers>
    <mapper resource="com/xyj/mapper/StudentMapper.xml"></mapper>
</mappers>

調用Mybitis原生接口進行操作

public static void main(String[] args) {
    InputStream inputStream = Test.class.getClassLoader().getResourceAsStream("config.xml");
    SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
    SqlSession sqlSession = sqlSessionFactory.openSession();
}

我們首先使用輸入流對config.xml文件進行讀取,然後使用sqlSessionFactoryBuilderbuild方法創建sqlSessionFactory,再用sqlSessionFactoryopenSession方法創建sqlSession

Student student1 = new Student(1L,"小明",16);
Student student2 = new Student(2L,"小紅",15);
sqlSession.insert("com.xyj.mapper.StudentMapper.add",student1);
sqlSession.insert("com.xyj.mapper.StudentMapper.add",student2);
sqlSession.commit();
sqlSession.close();

調用sqlSessioninsert方法,傳入第一個參數為我們實體類對應mapper文件中對應的操作id,第二個參數為數據。

我們執行完sql之後還需要提交事務,最後釋放資源。

執行結果

成功在數據表中添加瞭兩條數據。

sqlSession.delete("com.xyj.mapper.StudentMapper.delete",2);

我們這裡調用delete方法,刪除id為2的學生數據。

執行結果

刪除成功!

Student student  = new Student(1L,"小剛",19);
sqlSession.update("com.xyj.mapper.StudentMapper.update",student);

調用update方法修改數據。

執行結果

修改數據成功!

我們再添加兩條數據。

List<Student> studentList = sqlSession.selectList("com.xyj.mapper.StudentMapper.query");
System.out.println(studentList);

我們用List接收查詢的數據再打印出來。

打印結果

[Student(id=1, name=小剛, age=19), Student(id=2, name=小明, age=15), Student(id=3, name=小紅, age=17)]

查詢成功!

總結

關於Mybatis入門配置以及使用原生接口進行增刪改查操作就是這樣,接下來的內容我將來講解Mapper代理的方式進行操作。喜歡的小夥伴們多多支持,你們的支持就是我更新的動力。

到此這篇關於Mybatis入門指南之實現對數據庫增刪改查的文章就介紹到這瞭,更多相關Mybatis對數據庫增刪改查內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: