【Java】Mybatis在Idea上的應用

  一、簡介

  mybatis框架:是sql映射框架
  1)sql mapper:sql映射
    可以把數據庫表中的一行數據,映射爲一個javat對象。
    一行數據可以看做是一個java對象,操作這個對象,就相當於操作表中的數據
  2)Data Access Objects(DAOs):數據訪問
    對數據庫執行增刪改查。

 

  mybatis提供了哪些功能:
  1)提供了創建Connection,Statement,ResultSet的能力,不用開發人員創建這個對象了
  2)提供了執行sql語句的能力,不用你執行sql
  3)提供了循環sql,把sql的結果轉爲java對象,List集合的能力
  4)提供了關閉資源的能力,不用你關閉Connection,Statement,ResultSet

  二、知識總結

  mybatis是一個映射sql的框架,提供了數據庫的操作能力。增強的JDBC,使用mybatis讓開發人員集中精神寫sql就可以了,不必關心Connection,Statement,ResultSet的創建、銷燬。

  2.1、Mybatis使用步驟

  1)新建Student表

  2)加入maven的mybatis依賴,mysql驅動的依賴

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.test</groupId>
  <artifactId>mybatisDemo</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>mybatisDemo</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <!-- mybatis依賴 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.5</version>
    </dependency>

    <!--mysql驅動依賴 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.21</version>
    </dependency>
  </dependencies>

  <build>
    <resources>
      <resource>
        <directory>src/main/java</directory> <!-- 所在的目錄 -->
        <includes><!-- 包括目錄下的.properties,.xml 文件都會掃描到 -->
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>
  </build>
</project>

3)創建實體類,Student -- 保存表中的一行數據

package com.test.domain;

public class Student {

    private Integer userId;
    private String nickname;
    private String phone;
    private String gender;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Student{" +
                "userId=" + userId +
                ", nickname='" + nickname + '\'' +
                ", phone='" + phone + '\'' +
                ", gender='" + gender + '\'' +
                '}';
    }
}

4)創建持久層的Dao接口,定義操作數據庫的方法

package com.test.dao;

import com.test.domain.Student;

import java.util.List;

public interface StudentDao {

    public List<Student> selectStudents();
}

5)創建一個mybatis使用的配置文件

叫做sql映射文件:寫sql語句的。一般一個表一個sql映射文件
這個文件叫xml文件
5.1 寫在接口所在目錄。
5.2 文件名稱和接口保持一致。

<?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.test.dao.StudentDao">
    <!--
        select:表示查詢操作
        id:你要執行的sql語句的唯一標識,mybatis會使用這個id的值來找到要執行的sql語句
            可以自定義,但要求你使用接口中的方法名稱。
        resultType:標識結果類型的,是sql語句執行後得到ResultSet,遍歷這個ResultSet得到java對象的類型。
             值寫的是類型的全限定名稱
    -->
    <select id="selectStudents" resultType="com.test.domain.Student">
        select userId,nickname,phone,gender from user_table
    </select>
</mapper>

        <!--
            sql映射文件:寫sql語句的,mybatis會執行這些sql
            1.指定約束文件
                <!DOCTYPE mapper
                    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
                mybatis-3-mapper.dtd 是約束文件的名稱,擴展名是dtd的。

            2.約束文件的作用:限制、檢查在當前文件中出現的標籤,屬性必須符合mybatis的要求。

            3.mapper 是當前文件的根標籤,必須的。
                namesapce:叫做命名空間,唯一值,可以是自定義的字符串。
                            要求你使用dao接口的全限定名稱
            4.在當前文件中,可以使用特定的標籤,標識數據庫的特定操作。
               <select>:標識查詢
               <update>:表示更新數據庫的操作,就是在<update>標籤中,寫的是update sql語句
               <insert>:表示插入,寫的是insert 語句
               <delete>:標識刪除,執行的是delete語句
        -->

6)創建mybatis的主配置文件

一個項目就一個主配置文件
主配置文件提供了數據庫的連接信息和sql映射文件的位置信息。

<?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>
    <!--
        環境配置,數據庫的連接信息
        default:必須和某個enviroment的id值一樣。
    -->
    <environments default="mydev">
        <!--
            enviroment:一個數據庫的配置,環境
            id:一個唯一值,自定義,標識環境的名稱
        -->
        <environment id="mydev">
            <!--
                transactionManager:mybatis的事務類型
                type:JDBC(表示使用jdbc的connection對象的commit,rollback做事務處理)
            -->
            <transactionManager type="JDBC"/>
            <!--
                datasource:表示數據源,連接數據庫
                type:標識數據源的類型,POOLE表示連接池的
            -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/BullMane"/>
                <property name="username" value="root"/>
                <property name="password" value="root123456"/>
            </dataSource>
        </environment>

        <!--表示線上的數據庫,是項目真實使用的庫-->
        <environment id="online">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/BullMane"/>
                <property name="username" value="root"/>
                <property name="password" value="root123456"/>
            </dataSource>
        </environment>
    </environments>

    <!-- sql mapper(sql映射文件)的位置 -->
    <mappers>
        <!-- 一個mapper標籤指定一個文件的位置
                從類路徑開始的路徑信息。target/classes(類路徑)
         -->
        <mapper resource="com/test/dao/StudentDao.xml"/>

        <!--        <mapper resource="org/example/dao/SchoolDao.xml"/>-->
    </mappers>
</configuration>

        <!--
            mybatis的主配置文件:定義了數據庫的配置信息,sql映射文件的位置
            1.configureation根標籤

        -->

  7)應用mybatis在程序中

import com.test.domain.Student;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MyApp {
    public static void main(String[] args) throws IOException {

        //訪問mybatis讀取student數據

        //1.定義mybatis主配置文件的名稱,從類路徑的根開始(target/classes)
        String config = "mybatis.xml";
        //2.讀取這個config表示的文件
        InputStream in = Resources.getResourceAsStream(config);

        //3.創建SelSessionFactoryBuilder對象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //4.創建SqlSessionFactory對象
        SqlSessionFactory factory = builder.build(in);
        //5.獲取SqlSession對象,從SqlSessionFactory中獲取SqlSession
        SqlSession sqlSession = factory.openSession();
        //6.指定要執行的sql語句的標識。sql映射文件中的namespace+"."+標籤的id值
        String sqlId = "com.test.dao.StudentDao" + "." + "selectStudents";
        //7.執行sql語句,通過sqlId找到語句
        List<Student> studentList = sqlSession.selectList(sqlId);

        studentList.forEach(stu -> System.out.println(stu));

        sqlSession.close();
    }
}

  8)運行效果圖

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章