MyBatis 的簡單 CRUD 操作

HuDu發表於2020-06-19

CRUD

所謂CRUD即資料庫的增刪改查操作

第一章已經說了MyBatis的特點和優勢,其中提到了MyBatis 可以使用簡單的 XML 或註解來配置和對映原生型別、介面和 Java 的 POJO為資料庫中的記錄。這裡其實可以發現,使用MyBatis框架只需要修改介面中的方法以及對應的XML 配置檔案,或者使用註解(之後會講到註解的各種用法)就可以對資料庫進行不同的操作。

select 操作

例如簡單的查詢所有學生資訊

  • 先在介面中編寫要實現的方法(上篇已提到)

    public interface StudentMapper {
      List<Student> getStudents();
    }
  • 接著在對應的XML檔案中編寫對應執行SQL

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
          PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
          "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.hudu.dao.StudentMapper">
      <select id="getStudents" resultType="Student">
          select * from student
      </select>
    </mapper>
  • 然後需要在mybatis-config.xml檔案中新增繫結

    <!--通過resource方法定位StudentMapper.xml檔案-->
          <mapper resource="com/hudu/dao/StudentMapper.xml"/>
    
          <!--通過類定位-->
          <!-- <mapper class="com.hudu.dao.StudentMapper"/>-->
    
          <!--通過包掃描-->
          <!-- <package name="com.hudu.dao"/>-->

    三種方法都行,但是第二種使用 class 的檔案繫結介面和 mapper 配置檔案和第三種必須兩檔案同名和在同一包結構下。

  • 測試

    @Test
      public void test1() {
          SqlSession sqlSession = MybatisUtil.getSqlSession();
          StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
          List<Student> students = mapper.getStudents();
          for (Student student : students) {
              System.out.println(student);
          }
          sqlSession.close();
      }
  • 結果

    sgEmJjNgkd.png!large

delete 操作

之後的演示只會展示核心配置檔案和程式碼

  • 介面中定義方法

    //給id屬性起一個別名
    void deleteStudent(@Param("sid") int id);
  • 編寫對應 XML 配置檔案

    <delete id="deleteStudent" parameterType="_int">
          delete from student where id = #{sid}
    </delete>
  • 測試

    @Test
      public void test2() {
          SqlSession sqlSession = MybatisUtil.getSqlSession();
          StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
          mapper.deleteStudent(5);
          sqlSession.close();
      }

insert 操作

void addStudent(Student student);
<insert id="addStudent" parameterType="Student">
        insert into student(id,name,tid) values (#{id},#{name},#{tid})
</insert>

這裡引數型別能直接寫Student是因為 mybatis-config.xml 中定義了 typeAlias

<!--可以給實體類起別名-->
    <typeAliases>
        <typeAlias type="com.hudu.pojo.Student" alias="Student"/>
        <!--掃描實體類的包,它的預設別名就為這個類的類名,實體類比較多用package掃描-->
        <!--<package name="com.com.test.pojo"/>-->
    </typeAliases>

update 操作

void updateStudent(Student student);
<update id="updateStudent" parameterType="Student">
        update student set name = #{name},tid = #{tid} where id = #{id}
</update>

總結

  • XML檔案 namespace 要與介面繫結
  • 介面中的具體實現在 XML 中實現
  • 基本資料型別引數用_int等表示,具體看官方文件
  • 物件型別的引數為了便於使用最好在 mybatis-config 中配置 typeAliases,給實體類起別名。
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章