MyBatis系列之--Java 項目(非SpringBoot)集成MyBatis

工作中常常寫一些服務,基本上會與MySQL關聯上,如何快速的從MySQL中獲取數據?大家可能都會選用SpringBoot來集成MyBatis,這樣做的原因一個是簡單,另外一個是封裝的好,基本上開箱即用。

遺憾的是,這裏想介紹的跟SpringBoot 沒有關係,這裏用一個與SpringBoot無關的Java Maven 項目,來與MyBatis結合做數據查詢。

對MyBatis簡單介紹

MyBatis是一個輕量級的持久層框架,能很好的解析自定義SQL,高效的完成數據的添加、刪除、查詢等操作。
MyBatis幾乎免除了所有的JDBC代碼,以及設置參數和獲取結果的工作。可以通過XML或註解的方式來配置和映射原始類型、接口和POJO爲數據庫中的記錄。

核心接口SqlSessionFactory

MyBatis主要和數據庫進行交互,少不了創建數據庫連接,其中SqlSessionFactory是主要的核心。

官網總結
上面這張圖是對官網簡介的一個總結,通過這個簡單的描述可以回答下面兩個問題:

  1. 如何創建SqlSessionFactory?

    SqlSessionFactory(簡稱SSF) 通過 SqlSessionFactoryBuilder (簡稱SSFB)創建。

    SSFB創建SSF的過程中,需要一些數據庫JDBC的信息,這些信息可以通過XML文件或Java的Configuration對象來獲取。

  2. 如何使用SqlSessionFactory?

    SSF 創建好之後,基本上就保證它應用級別的作用域,不對其進行重複的創建和銷燬操作。

    最簡單的是通過單例模式或靜態單例模式來達到應用級別的作用域。

實戰

1. Maven創建Java項目

本地需要安裝Maven,然後才能執行下面的代碼。

 mvn archetype:generate -DgroupId=com.botao -DartifactId=pure-mybatis -DarchetypeArtifactId=maven-archetype-quickstart

2. 添加依賴

pom.xml 文件中添加下面的依賴

  <dependencies>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.2</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.44</version>
    </dependency>
  </dependencies>

3. 配置JDBC屬性

resources目錄下創建 application.properties文件,並輸入下面的配置信息。

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/university?characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456

4. 配置MyBatis需要的配置文件

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="application.properties"/>

  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <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>
  <mappers>
    <mapper resource="mapper/PersonMapper.xml"/>
  </mappers>
</configuration>

注意:
1. 開頭部分聲明是xml文件
2. <properties resource="application.properties"/> 聲明本文中的屬性從 application.properties中獲取
3. <mapper resource="mapper/PersonMapper.xml"/> 聲明與數據庫表的映射接口文件位置

5. 準備數據

CREATE DATABASE `university` ;

CREATE TABLE `person` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 ;

INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (1, 'poter1', 10);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (2, 'poter2', 20);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (3, 'poter3', 30);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (4, 'poter4', 40);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (5, 'poter5', 50);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (6, 'poter6', 60);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (7, 'poter7', 70);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (8, 'poter8', 80);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (9, 'poter9', 90);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (10, 'poter10', 100);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (11, 'poter11', 110);

6. 創建數據庫表對應的POJO

package com.botao.pojo;

public class Person {
    private int id;
    private String name;
    private int age;

    public Person() {
    }

    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 "PersonMapper{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

6. 創建Mapper接口

package com.botao.mapper;

import com.botao.pojo.Person;

public interface PersonMapper {

    Person selectPersonById(Integer id);
}

7. 創建XML的Mapper文件

在resources/mapper目錄下創建PersonMapper.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="com.botao.mapper.PersonMapper">
  <select id="selectPersonById" resultType="com.botao.pojo.Person">
    select * from Person where id = #{id}
  </select>
</mapper>

好了,到目前位置,我們的工程就完成了,可以創建一個main方法,或用Junit來測試下。

這裏寫一個Main方法做下測試:

package com.botao;

import com.botao.mapper.PersonMapper;
import com.botao.pojo.Person;
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;

public class App {
    public static void main(String[] args) throws IOException {
        System.out.println("use mybatis connect to database ... ");

        // 根據 mybatis-config.xml 配置的信息得到 sqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 然後根據 sqlSessionFactory 得到 session
        SqlSession session = sqlSessionFactory.openSession();

        PersonMapper mapper = session.getMapper(PersonMapper.class);

        Person person = mapper.selectPersonById(1);
        System.out.println(person);

    }
}

測試結果:

C:\app\java\jdk1.8.0_131\bin\java.exe  ...
use mybatis connect to database ... 
PersonMapper{id=1, name='poter1', age=10}

Process finished with exit code 0

OK!這就是所有內容了,如果對上面的說明有任何疑問,歡迎留言與我交流。

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