mybatis

mybatis是一個開源框架,能夠把java的pojo映射成數據庫的中的記錄;java

demo

建立實體類,用於映射數據表mysql

package com.how2java.pojo;
 
public class Category {
    private int id;
    private String name;
    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;
    }
     
}

配置文件mybatis-config.xml,主要是爲了提供連接數據庫所用的帳號密碼等。sql

<?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>
    <typeAliases>
      <package name="com.how2java.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>
    <mappers>
        <mapper resource="com/how2java/pojo/Category.xml"/>
    </mappers>
</configuration>
View Code

配置文件Category.xml,這個是與數據表Category所對應的配置文件,其內部能夠定義sql語句數據庫

<?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.how2java.pojo">
        <select id="listCategory" resultType="Category">
            select * from   category_     
        </select>
    </mapper>

測試類apache

package com.how2java;
 
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.how2java.pojo.Category;
 
public class TestMybatis {
 
    public static void main(String[] args) throws IOException {
        //根據配置文件獲得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方法,調用配置文件Category.xml中的sql語句,sql語句的id就是selectList方法的參數
        List<Category> cs=session.selectList("listCategory");
        for (Category c : cs) {
            System.out.println(c.getName());
        }
         
    }
}

一級緩存

Mytabis的一級緩存在session上,只要第一次經過session查詢數據,就會放在session上;下次再查詢相同id的數據,直接從緩存中取出來,不用再去數據庫中取。緩存

public static void main(String[] args) throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session1 = sqlSessionFactory.openSession();
        //同一個id=1的Category,在相同的session下,第二次查詢沒有啓動數據庫
        Category c1 = session1.selectOne("getCategory", 1);
        System.out.println(c1);
        Category c2 = session1.selectOne("getCategory", 1);
        System.out.println(c2);
 
        session1.commit();
        session1.close();
         
    }

二級緩存

mybatis的二級緩存是SessionFactory,這就比一級緩存範圍更大了一些;由於session都是基於SessionFactory產生的;session

二級緩存不是默認開啓的,須要配置mybatis-config.xml和Category.xml,另外還須要讓pojo類實現序列化接口Serializable;mybatis

這時再運行測試類,發現即便不是同一個session,但屬於同一個SessionFactory,也會開啓緩存,省掉第二次的數據庫訪問;app

相關文章
相關標籤/搜索