1. 程式人生 > >七、持久層框架(MyBatis)

七、持久層框架(MyBatis)

ide 編碼方式 2.4 OS conn import lis 表示 gif

一、MyBatis學習

  平時我們都用JDBC訪問數據庫,除了自己需要寫SQL,還要操作Connection,Statement,ResultSet這些。

  使用MyBatis,只需要自己提供SQL語句,其他的工作,建立數據庫連接,Statement等一些JDBC相關異常處理工作都交給了MyBatis去做了。只關心增刪改查操作層面上。

1、建立數據庫

create database demo

2、創建實體類

技術分享圖片
package com.demo.pojo;

public class Category{
    private int id;
    private String name;
    
//屬性的getter/setter方法 publci int getId(){ return id; } public vodi setId(int id){ this.id=id; } public String getName(){ return name; } public vodi setName(String name){ this.name=name; } }
View Code

3、配置文件mybatis-config.xml

  相當於hibernate.cfg.xml

作用:提供鏈接數據庫用的驅動,數據庫名稱,編碼方式,密碼賬號

<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/demo?characterEncoding=UTF-8"/>
<property name="username" value="root">
<property name="password" value="admin">

具體配置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>
<!--自動掃描com.demo.pojo下的類型,使得在後續配置文件Category.xml種使用resultType的時候,可以直接使用Category,而不必寫全cmo.demo.pojo.Category-->
    <typeAliases>
      <package name="com.demo.pojo"/>
    </typeAliases>
    <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/how2java?characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="admin"/>
            </dataSource>
        </environment>
    </environments>
    <!--映射Category.xml-->
    <mappers>
        <mapper resource="com/dmeo/pojo/Category.xml"/>
    </mappers>
</configuration>
View Code

4、配置文件Category.xml

  在包com.demo.pojo下,新建文件Category.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">
<!--命名空間com.demo.pojo,在後續調用sql語句的時候,會用到它裏面的sql語句-->
    <mapper namespace="com.demo.pojo">
    <!--sql語句用id:listCategory進行標示,以供後續代碼調用。resultType="Category"表示返回數據和Category關聯起來。-->
    <!--這裏本應該使用com.demo.pojo.Category,但是在mybatis-config.xml中的配置了<typeAliases><package name="com.demo.pojo"/></typeAliases>,所以可以直接使用Category-->
        <select id="listCategory" resultType="Category">
            select * from   category_      
        </select>
    </mapper>
View Code

5、測試類TestMyBatis

技術分享圖片
package com.demo;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

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 com.demo.pojo.Category;

public class TestMyBatis{
    public static void main(String[] args) throw IOException{
    //根據配置文件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();
        //根據session的selectList()方法,調用sql語句listCategory,listCategory這個就是在Category.xml種那條sql語句設置的id。
        List<Category> cs=session.selectList("listCategory");
        //List<Category> cs=session.selectList("com.demo.pojo.listCategory");效果一樣,只是比較臃腫,建議用上面那個
        for(Category c:cs){
            System.out.println(c.getName());
        }
    }
}
View Code

二、MyBatis的基本原理

1、應用程序找到MyBatis要的數據

2、MyBatis從數據庫找到數據

  2.1、通過mybatis-config.xml定位哪個數據庫

  2.2、通過Category.xml執行對應的select語句

  2.3、根據Category.xml把返回的數據庫記錄封裝在Category對象中

  2.4、把多個Category對象裝在一個Category集合中

3、返回一個Category集合

七、持久層框架(MyBatis)