mybatis是一個開源框架,能夠把java的pojo映射成數據庫的中的記錄;java
建立實體類,用於映射數據表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>
配置文件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