1. 程式人生 > 其它 >Mybatis框架快速入門-2

Mybatis框架快速入門-2

          2.1 入門案例

MyBatis 開發準備

搭建 MyBatis 開發環境,實現第一個案例

2.1.1 使用 Mybatis

準備 下載 mybatis https://github.com/mybatis/mybatis-3/releases

2.1.2 搭建 MyBatis 開發環境

(1) 建立 mysql 資料庫和表 資料庫名 ssm ;表名 student

  

(2) 建立 maven 工程

在pom.xml檔案中新增Mybatis依賴

  

<?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>org.example</groupId> <artifactId>
Mybatis-01</artifactId> <version>1.0-SNAPSHOT</version> <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> <!--Mybatis依賴--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.1</version> </dependency> <!--Mysql依賴--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.9</version> </dependency> <!--單元測試--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <build> <!--資源外掛,處理src/main/java目錄中的xml檔案--> <resources> <resource> <directory>src/main/java</directory><!--所在的目錄--> <includes><!--包括目錄下的.properties,.xml 檔案都會掃描到--> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build> </project>

編寫一個與資料庫屬性一致的實體類物件

  

package org.example.domain;

public class Student {
    private Integer id;
    private String name;
    private String email;
    private Integer age;

    public Integer getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }

    public Integer getAge() {
        return age;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "學生資訊{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                ", age=" + age +
                '}';
    }
}

  編寫Dao介面StudentDao  

  

package org.example.Dao;

import org.example.domain.Student;

import java.util.List;

public interface StudentDao {
    //查詢一個學生
    Student selectStudentById(Integer id);
}

  編寫Dao介面Mapper對映檔案StudentDao.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">
<!--
    namespace:必須有值,自定義的唯一字串
               推薦使用:dao介面的全限定名
-->
<mapper namespace="org.example.Dao.StudentDao">
    <!--
    <select>: 表示查詢資料, 標籤中必須是 select 語句
        id: sql 語句的自定義名稱,推薦使用 dao 介面中方法名稱,
            使用名稱表示要執行的 sql 語句
    resultType: 告訴mybatis,執行sql語句,把資料賦值給哪個型別的java物件。
        resultType的值現在使用的java物件的全限定名稱
    -->
    <select id="selectStudentById" resultType="org.example.domain.Student">
    <!--要執行的sql語句-->
        select * from Student where id =   #{StudentId}
    </select>
</mapper>
<!--
        1.約束檔案:
            http://mybatis.org/dtd/mybatis-3-mapper.dtd
            約束檔案的作用:定義和限制當前檔案中可以使用的標籤和屬性,以及標籤出現的順序
        2.mapper是根標籤
            namespace是名稱空間,必須有值,自定義的唯一字串
               推薦使用:dao介面的全限定名
            作用:參與識別sql語句的作用
         3.在mapper裡面可以寫<insert><update><delete><select>
            <insert>裡面是<insert>語句,表示執行insert操作
            <update>裡面是<update>語句
            <delete>裡面是<delete>語句
            <select>裡面是 <select>語句
-->

  建立Mybatis主配置檔案

  專案 src/main 下建立 resources 目錄,設定 resources 目錄為 resources root

  建立主配置檔案:名稱為 mybatis.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"/>
            <!--配置資料來源:建立Connection物件-->
            <dataSource type="POOLED">
                <!--driver:驅動內容-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!--連結資料庫的url-->
                <property name="url" value="jdbc:mysql://localhost:3306/ssm?useUnicode=true&amp;characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="xxxxx"/>
            </dataSource>
        </environment>
    </environments>
    <!--
        指定其他mapper檔案的位置
        其他mapper檔案的目的是找到其他檔案的sql語句
    -->
    <mappers>
        <!--
            使用mapper的resource屬性指定的mapper檔案的路徑
                這個路徑是從target/classes路徑開啟的

                使用注意:
                    resource=“mapper檔案的路徑,使用/分割路徑”
                    一個mapper resource指定一個mapper檔案

        -->
        <mapper resource="org/example/Dao/StudentDao.xml"/>
    </mappers>
</configuration>

  建立測試類MybatisTest

  

package org.example;

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 org.example.domain.Student;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;


public class MyTest {
    @Test
    public void testSelectStudentById() throws IOException {
        //呼叫Mybatis某個物件的方法,執行Mapper檔案的sql語句
        //Mybatis核心類:SqlSessionFactory

        //1.定義Mybatis主配置檔案的位置,從類路徑開始的相對路徑
        String config = "Mybatis.xml";
        //2.讀取主配置檔案,使用Mybatis框架中的Resource類  Resources使用的是import org.apache.ibatis.io.Resource
        InputStream in = Resources.getResourceAsStream(config);
        //3.建立SqlSessionFactory物件,使用SqlSessionFactoryBuilder類的build(Inputstream)方法
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //4.獲取SqlSession物件
        SqlSession session = factory.openSession();
        //5.指定要執行的Sql語句id
        //sql的id = namespace+“.”+select|update|insert|delete標籤的id屬性值
        String sqlId = "org.example.Dao.StudentDao"+"."+"selectStudentById";
        //6.通過SqlSession的方法,執行sql語句
        Student student = session.selectOne(sqlId);
        System.out.println("使用Mybatis查詢一個學生:"+student);
        //7.關閉SqlSession物件
        session.close();
    }

    @Test
    public void testSelectStudentById2() throws IOException {
        //呼叫Mybatis某個物件的方法,執行Mapper檔案的sql語句
        //Mybatis核心類:SqlSessionFactory

        //1.定義Mybatis主配置檔案的位置,從類路徑開始的相對路徑
        String config = "Mybatis.xml";
        //2.讀取主配置檔案,使用Mybatis框架中的Resource類  Resources使用的是import org.apache.ibatis.io.Resource
        InputStream in = Resources.getResourceAsStream(config);
        //3.建立SqlSessionFactory物件,使用SqlSessionFactoryBuilder類的build(Inputstream)方法
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //4.獲取SqlSession物件
        SqlSession session = factory.openSession();
        //5.指定要執行的Sql語句id
        //sql的id = namespace+“.”+select|update|insert|delete標籤的id屬性值
        String sqlId = "org.example.Dao.StudentDao"+"."+"selectStudentById";
        //6.通過SqlSession的方法,執行sql語句
        Student student = session.selectOne(sqlId,1002);
        System.out.println("使用Mybatis查詢一個學生:"+student);
        //7.關閉SqlSession物件
        session.close();
    }
}

 

執行結果

  

 配置日誌功能

  mybatis.xml 檔案加入日誌配置,可以在控制檯輸出執行的 sql 語句和引數

  在Myybatis.xml檔案中<configuration>標籤中加入

<settings>
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
再次執行,檢視結果
  

    2.1.3 insert 操作

 (1) StudentDao 介面中增加方法

  int insertStudent(Student student);

 (2) StudentDao.xml 加入 sql 語句

 <!--新增操作insert
        傳入Mybatis是一個java物件,使用#{屬性名}來獲取屬性的值
        屬性值放到#{}佔位符的位置,Mybatis執行此屬性,對應的getXXX()
        例如#{id},執行getID();
    -->
    <insert id="insertStudent">
        insert into student(id,name,email,age)
            values (#{id},#{name},#{email},#{age})
    </insert>

  (3) 增加測試方法

  

@Test
    public void testInsert() throws IOException {

        String config = "Mybatis.xml";
        InputStream in = Resources.getResourceAsStream(config);
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        SqlSession session = factory.openSession();
        //5.指定要執行的Sql語句id
        //sql的id = namespace+“.”+select|update|insert|delete標籤的id屬性值
        String sqlId = "org.example.Dao.StudentDao"+"."+"insertStudent";
        //6.通過SqlSession的方法,執行sql語句
       Student student = new Student();
       student.setId(1003);
       student.setName("王五");
       student.setEmail("[email protected]");
       student.setAge(20);

        int rows = session.insert(sqlId,student);
        //7.提交事務
        session.commit();
        System.out.println("增加記錄行數"+rows);
        //8.關閉SqlSession物件
        session.close();
    }

  檢視結果

  注意:不能新增相同的資料,否則會報錯