1. 程式人生 > >MyBatis入門(一)---全XML配置方式

MyBatis入門(一)---全XML配置方式

一、Mybatis介紹

  MyBatis是一個支援普通SQL查詢儲存過程高階對映的優秀持久層框架。MyBatis消除了幾乎所有的JDBC程式碼和引數的手工設定以及對結果集的檢索封裝。MyBatis可以使用簡單的**XML或註解用於配置和原始對映,將介面和Java的POJO(Plain Old Java Objects,普通的Java物件)對映成資料庫中的記錄。

MyBatis配置方式有三種:

  • 全xml配置方式
  • 介面 + xml 配置方式
  • 介面 + 註解方式

二、開發步驟 —全xml配置方式

1、 使用meavn建立專案,並匯入相應的包

<?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>me.mybatis</groupId> <artifactId
>
mybatis-study</artifactId> <version>1.0-SNAPSHOT</version> <properties> <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.4.6</version> </dependency> <!-- mysql驅動包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency> <!-- junit測試包 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!-- 日誌檔案管理包 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.12</version> </dependency> </dependencies> </project>

2、建立資料庫和表,針對MySQL資料庫

create database mybatis;
use mybatis;
CREATE TABLE `User` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
);
INSERT INTO `User` VALUES (1, 'test', 18);
INSERT INTO `User` VALUES (2, '張三', 25);

3、新增Mybatis的配置檔案

1、在src/main/resources下建立mysql.properties檔案,程式碼如下

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root

2、在src/main/resources下建立mybatis-config.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>
    <properties resource="mysql.properties"/>
    <settings>
        <!--全域性性設定懶載入。如果設為‘false’,則所有相關聯的都會被初始化載入,預設值為false-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--當設定為‘true’的時候,懶載入的物件可能被任何懶屬性全部載入。否則,每個屬性都按需載入。預設值為true-->
        <setting name="aggressiveLazyLoading" value="false"/>
    </settings>
    <typeAliases>
        <!-- 其實就是將bean的替換成一個短的名字-->
        <typeAlias type="me.mybatis.entity.User" alias="_User"/>
    </typeAliases>
    <!--對事務的管理和連線池的配置-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED"><!--POOLED:使用Mybatis自帶的資料庫連線池來管理資料庫連線-->
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--mapping檔案路徑配置-->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>

</configuration>

4、建立資料庫表對應的實體類

src/java下新建一個包me.mybatis.entity,然後在該包下建立一個java檔案,檔名User,增加程式碼如下 :

package me.mybatis.entity;

/**
 * User 表所對應的實體類
 */
public class User {
    //實體類的屬性和表的欄位名稱一一對應
    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
}

實體類的屬性必須和表的欄位一一對應?

這裡寫圖片描述

5、定義操作user表的sql對映檔案UserMapper.xml

src/main/resources下建立一個資料夾mapper,在該資料夾下建立一個UserMapper.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,namespace的值習慣上設定成包名+實體類名/sql對映檔名,這樣就能夠保證namespace的值是唯一的
        例如namespace="me.mybatis.entity.User"就是me.mybatis.entity(包名)+User(實體類名),應為mapper在Resources目錄下,
        故沒有用SQL對映檔案做namespace
    -->
<mapper namespace="me.mybatis.entity.User">
    <!-- 在select標籤中編寫查詢的SQL語句, 設定select標籤的id屬性為getUserById,id屬性值必須是唯一的,不能夠重複
    使用parameterType屬性指明查詢時使用的引數型別,resultType屬性指明查詢返回的結果集型別
    resultType="me.mybatis.entity.User"就表示將查詢結果封裝成一個User類的物件返回
    User類就是users表所對應的實體類
    -->
   <!--
       根據id查詢得到一個User物件
   -->
    <select id="getUserById" parameterType="int" resultType="me.mybatis.entity.User">
        SELECT * FROM User WHERE id=#{id}
    </select>
</mapper>

6、在MyBatis配置檔案mybatis-config.xml中註冊UserMapper.xml檔案

<!--mapping檔案路徑配置-->
<mappers>
    <mapper resource="mapper/UserMapper.xml"/>
</mappers>

7、編寫測試程式碼:執行定義的select語句

src/main/java下建立一個包me.mybatis.test,在該包下建立UserTest.java檔案,程式碼如下

package me.mybatis.test;

import me.mybatis.entity.User;
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.Reader;

public class UserTest {
    public static void main(String[] args) {
        String resource = "mybatis-config.xml";
        Reader reader = null;
        try {
            reader = Resources.getResourceAsReader(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            SqlSession session = sqlSessionFactory.openSession();

            User user = session.selectOne("getUserById", 2);
            session.commit();
            System.out.println(user.getName()); # 張三
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

程式碼地址