1. 程式人生 > >MyBatis入門(IDEA+maven+mybatis+mysql)

MyBatis入門(IDEA+maven+mybatis+mysql)

前言:寫本文前,博主已經是通過黑馬程式設計師的視訊大致地學過了一遍mybatis了,但無奈當時進度太快,沒來得及好好總結,以致腦海中裡只留下稀薄的印象。因此,為了更好地總結,博主跟著mybatis的官方文件回顧了一下mybatis,並以此博文記錄。

概念:博主看了官方文件的入門部分後特意作了一幅概念圖,能大概反映出mybatis的使用流程

以下是基於maven+IDEA+mysql的mybatis入門開發:

1、建立maven專案

    由於本程式只是一個簡單入門,因此是否使用骨架無傷大雅(本文沒有使用)。


    附上專案結構圖:

    

2、pom檔案

因為本文重點是mybatis的使用,因此博主儘量少地用到其他jar包。

<?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>Kanject</groupId>
<artifactId>MyMybatis</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <!--mybatis核心包--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>
3.3.0</version> </dependency> <!--MySQLJDBC驅動包--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.29</version> </dependency> <!--junit單元測試包--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies> </project>

本程式用到的jar包有3個:mybatis核心包、mysql核心驅動包、junit單元測試包。

    接下來正式開始mybatis的開發~

3、Person、PersonMapper、Person.xml

    首先準備Person.java、PersonMapper.java、Person.xml三個檔案。

    Person.java

package pojo;
public class Person {

    private int id;
    private String userName ;
    private int age ;
    private String mobilePhone ;
    public Person(){}
    public Person(int id, String userName, int age, String mobilePhone) {
        this.id = id;
        this.userName = userName;
        this.age = age;
        this.mobilePhone = mobilePhone;
}

    public String getUserName() {
        return userName;
}
    public int getId() {
        return id;
}

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

    public int getAge() {
        return age;
}

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

    public String getMobilePhone() {
        return mobilePhone;
}

    public void setMobilePhone(String mobilePhone) {
        this.mobilePhone = mobilePhone;
}

    @Override
public String toString() {
        return "Person{" +
                "userName='" + userName + '\'' +
                ", age=" + age +
                ", mobilePhone='" + mobilePhone + '\'' +
                '}';
}
}

    PersonMapper.java

package mapper;
import pojo.Person;
public interface PersonMapper {
    void insertPerson(Person person);
Person queryById(int id);
    void updatePerson(int id);
}

    Person.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="mapper.PersonMapper">
    <insert id="insertPerson" parameterType="pojo.Person" >
INSERT INTO PERSON(ID,USERNAME,AGE,MOBILEPHONE)VALUES (#{id},#{userName},#{age},#{mobilePhone})
    </insert>
    <select id="queryById" parameterType="int" resultType="pojo.Person">
SELECT * FROM PERSON WHERE ID=#{id}
    </select>
    <update id="updatePerson">
UPDATE PERSON SET USERNAME=#{userName},AGE=#{age},MOBILEPHONE=#{mobilePhone} WHERE ID=#{id}
    </update>
</mapper>

    然後解釋下三者的區別:

        Person.java:對實體的描述,包含了若干個實體的屬性值。

        PersonMapper.java:實體在資料庫有哪些行為(博主簡稱為“實體行為”)的介面,對實體行為的大概描述。

        Person.xml:實體行為在資料庫操作上的具體實現,包含了 SQL 程式碼和對映定義資訊。

    三者的關聯:

        Person.xml通過

<mapper namespace="mapper.PersonMapper">

        綁定了PersonMapper.java

        Person.java是在程式中呼叫mapper方法後封裝返回的結果。

4、mybatis-config.xml

根據概念圖,mybatis-config.xml是mybatis的全域性配置檔案,為SqlSessionFactoryBuilder建立SqlSessionFactory服務。而 SqlSessionFactoryBuilder 除了可以從 XML 配置檔案也可以從一個預先定製的 Configuration 的例項構建出 SqlSessionFactory 的例項(本文采取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"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="123"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/Person.xml"/>
    </mappers>
</configuration>

    上面包含了2大塊內容:資料庫連線配置、Person類的mapper對映器

5、測試程式碼

    完成上述步驟後,已完成mybatis大體的配置,現在進行程式碼測試。

import mapper.PersonMapper;
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 pojo.Person;
import java.io.IOException;
import java.io.InputStream;
public class Test {

    @org.junit.Test
public void testInsertPerson() throws IOException {
        //獲取mybatis全域性配置檔案
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//讀取配置檔案的配置資訊,利用SqlSessionFactoryBuilder建立sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//利用sqlSessionFactory開啟與資料庫的會話
SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);//通過sqlSession得到mapper
Person person = new Person();
person.setAge(3);
person.setMobilePhone("33333333");
person.setUserName("333");
personMapper.insertPerson(person);//呼叫mapper的方法
sqlSession.commit();//若是增、刪、改操作,不新增此語句則資料庫不更改
} finally {
            sqlSession.close();
}
    }

    @org.junit.Test
public void testQueryById() throws IOException {
        //獲取mybatis全域性配置檔案
String resouces = "mybatis-config.xml";
InputStream in = Resources.getResourceAsStream(resouces);
//讀取配置檔案的配置資訊,利用SqlSessionFactoryBuilder建立sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//利用sqlSessionFactory開啟與資料庫的會話
SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);//通過sqlSession得到mapper
Person person = personMapper.queryById(10000);//呼叫mapper的方法
//只讀操作不需要sqlSession.commit()
System.out.println(person);
} finally {
            sqlSession.close();
}

    }
    
}

進行測試,程式正確執行:


小結:本文只是一個很基礎的mybatis入門程式,裡面的配置博主是能少則少地新增。本文展示的也是概念圖中的其中一種實現方式,有興趣的同學參照文件用其他方式實現。希望同學能能夠通過這篇文章對mybatis有個大致的瞭解,有興趣可以自行學習。

後記:本文是博主的第一篇博文,有許多不足,希望大家能多多支援和鼓勵。文章若有錯漏也歡迎大家指正。