MyBatis 入門Demo

 

新建數據庫my_db,新建表student_tb

 id爲主鍵,不自動遞增java

 

 


 

 

下載MyBatis

https://github.com/mybatis/mybatis-3/releasesmysql

解壓。git

 

 


 

 

新建Java項目,什麼都不用勾選(若是要在IDEA中操做數據庫,可勾選SQL Support)。

 

勾選後,IDEA右側會有一個Database的工具,可在IDEA中直接操做數據庫。github

 

 


 

 

導入mybatis全部的jar包、數據庫驅動

mybatis.jar是必需的。sql

lib是mybatis依賴的第三方jar包,根據須要選擇,嫌麻煩或者小白,可所有導入lib中的jar。數據庫

pdf是mybatis的文檔。apache

 

 


 

設置MyBatis的日誌

在src下新建文件 log4j.properties ,內容以下:session

# Global logging configuration 
log4j.rootLogger=ERROR, stdout,A
# MyBatis logging configuration... 
log4j.logger.org.mybatis.example.BlogMapper=TRACE 
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
# File output...
log4j.appender.A = org.apache.log4j.DailyRollingFileAppender
log4j.appender.A.File = D:/log.txt
log4j.appender.A.Append = true
log4j.appender.A.Threshold = ERROR
log4j.appender.A.layout = org.apache.log4j.PatternLayout
log4j.appender.A.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
log4j.appender.A.encoding=UTF-8

可到 mybatis.pdf   8.1.1.2小節複製來修改。mybatis

 

 


 

 

src下新建包com.chy.pojo,包下新建POJO類Student:

package com.chy.pojo;

public class Student {
    private int id;
    private String name;
    private int age;
    private int score;

    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;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }
}
POJO(Plain Ordinary Java Object)簡單的Java對象,實際就是普通的JavaBean,有一些屬性及其getter、setter方法,能夠有一些簡單方法,好比toString(),但不能有處理業務邏輯的方法,有時可當作DTO(Data Transform Object)來使用。
咱們把數據庫實體對應的類都放在pojo包下。

 

 


 

 

src下新建包com.chy.mapper,mapper下建立實體-數據表的映射文件  StudentMapper.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.chy.mapper.StudentMapper">
    <insert id="insertStudent" parameterType="Student">
        INSERT INTO student_tb(id,name,age,score)VALUES (#{id},#{name},#{age},#{score})
    </insert>

    <select id="queryById" parameterType="int" resultType="Student">
        SELECT * FROM student_tb WHERE id=#{id}
    </select>

    <update id="updateStudent" parameterType="Student">
        UPDATE student_tb SET name=#{name},age=#{age},score=#{score} WHERE id=#{id}
    </update>

    <delete id="deleteStudent" parameterType="int">
        DELETE FROM student_tb WHERE id=#{id}
    </delete>
</mapper>

 能夠到mybatis.pdf  2.1.5小節複製來修改。oracle

咱們把映射文件都放在mapper包下,常以 實體類名+Mapper 命名。

<mapper>的namespace常設置爲此映射文件的路徑。

 

經過id調用相應的sql語句,parameterType指定參數類型,resultType指定要把結果集記錄映射到哪一種數據類型(只有<select>有這個屬性)。

#{}至關於sql語句中的佔位符?,{}中寫對應實體類的成員變量,會自動把參數轉換爲指定的成員變量。

 

 


 

 

src下新建數據庫配置文件mysql.properties:

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/my_db?serverTimezone=GMT
username=chy
password=abcd

 對應信息要換爲本身的。

最好在文件名中註明是哪一種數據庫,若是公司要換數據庫,好比從mysql換爲oracle,好區分這個是哪一個數據庫的配置。

 

 

src下新建mybatis的核心(全局)配置文件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"></properties>

    <!--指定日誌實現使用的是log4j-->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>

    <!--指定實體類-->
    <typeAliases>
        <typeAlias type="com.chy.pojo.Student" alias="Student"/>
    </typeAliases>
    
    <!--指定數據庫配置文件中的變量名-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--指定映射文件的位置-->
    <mappers>
        <mapper resource="com/chy/mapper/StudentMapper.xml"/>
    </mappers>
    <!-- Continue going here -->

</configuration>

可到mybatis.pdf  2.1.2小節複製來改。

 <configuration>的子元素是有必定順序的,順序不對會報紅。

 

 


  

 

src下新建包com.chy.test,包下新建測試類Test:

package com.chy.test;

import com.chy.pojo.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.Reader;

public class Test {
    public static void main(String[] args) throws IOException {
        //加載mybatis的全局配置文件
        String resources="mybatis-config.xml";
        Reader reader = Resources.getResourceAsReader(resources);
        
        //根據配置文件構建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //經過SqlSessionFactory建立SqlSession
        SqlSession sqlSession=sqlSessionFactory.openSession();

        //
        Student student = new Student();
        student.setId(1);
        student.setName("chy");
        //第一個參數對應映射文件中的id,經過id調用相應的sql語句,第二個參數是傳給sql語句的
        sqlSession.insert("insertStudent", student);
        
        //修改數據庫(增、刪、改)後,須要commit()提交給數據庫,纔會同步本次會話作的修改。只有查詢的,能夠不commit()。
        sqlSession.commit();
        //關閉會話
        sqlSession.close();
    }
}

 

     //
        Student student = new Student();
        student.setId(1);
        student.setName("chenghongyong");
        sqlSession.update("updateStudent", student);

 

        //
        Student student=sqlSession.selectOne("queryById", 1);
        System.out.println(student);    

若是本次session期間,只有查詢,能夠不用commit()。

 

        //
        sqlSession.delete("deleteStudent", 1);    

 

 


 

 

說明

(1)版本聲明部分,最好不要複製其餘人的,若是你和ta用的mybatis庫版本不一樣,會出錯。最好到mybatis.pdf中去複製。

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

 

 

(2)配置文件的文件名問題

log4j.properties這個文件名是約定的,不能本身取。

映射文件、數據庫配置文件須要在mybatis全局配置文件中指定,它們的文件名能夠本身取。

mybatis全局配置文件要在程序中指定,文件名能夠本身取。

 

 

 

(3)配置文件的位置問題

配置文件必須放在資源根目錄下。常見的作法有2種:

  • 在項目的根目錄下新建文件夾resource,右鍵標識爲資源根目錄

注意是Resource Root,不是Source Root。

在裏面放配置文件:

 

  • 也能夠像demo中同樣放置在src下,由於src就是默認的資源根目錄。

 

mapper中的映射文件放哪兒都行,只要路徑配置對得上就ok。

log4j.properties必須直接放在資源根目錄下(不能放在子文件夾裏)。

相關文章
相關標籤/搜索