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