一、Mybatis简介
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java对象)映射成数据库中的记录。
每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。
二、入门
1.创建表
2.导入jar包
3.创建实体类
准备实体类Category,用于映射数据库中的表category。
1 package mybatis.pojo; 2 3 public class Category { 4 private int id; 5 private String name; 6 7 public int getId() { 8 return id; 9 } 10 11 public void setId(int id) { 12 this.id = id; 13 } 14 15 public String getName() { 16 return name; 17 } 18 19 public void setName(String name) { 20 this.name = name; 21 } 22 23 }
4.配置文件mybatis-config.xml
在src目录下创建mybatis的主配置文件mybatis-config.xml (相当于hibernate.cfg.xml,如果没有hibernate基础请忽略本句)。
其作用主要是提供连接数据库用的驱动,数据库名称,编码方式,账号密码。
1 <property name="driver" value="com.mysql.jdbc.Driver" /> 2 <property name="url" value="jdbc:mysql://localhost:3306/test2?characterEncoding=UTF-8" /> 3 <property name="username" value="root" /> 4 <property name="password" value="123456" />
以及别名,自动扫描mybatis.pojo下的类型,使得在后续配置文件Category.xml中使用resultType的时候,可以直接使用Category,而不必写全mybatis.Category
1 <typeAliases> 2 <package name="mybatis.pojo" /> 3 </typeAliases>
映射Category.xml
1 <mappers> 2 <mapper resource="mybatis/pojo/Category.xml" /> 3 </mappers>
mybatis-config.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <typeAliases> 7 <package name="mybatis.pojo" /> 8 </typeAliases> 9 <environments default="development"> 10 <environment id="development"> 11 <transactionManager type="JDBC" /> 12 <dataSource type="POOLED"> 13 <property name="driver" value="com.mysql.jdbc.Driver" /> 14 <property name="url" 15 value="jdbc:mysql://localhost:3306/test2?characterEncoding=UTF-8" /> 16 <property name="username" value="root" /> 17 <property name="password" value="123456" /> 18 </dataSource> 19 </environment> 20 </environments> 21 <mappers> 22 <mapper resource="mybatis/pojo/Category.xml" /> 23 </mappers> 24 </configuration>
5.配置文件Category.xml
在包mybatis.pojo下,新建文件Category.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 6 <mapper namespace="mybatis.pojo"> 7 <select id="listCategory" resultType="Category"> 8 select * from category 9 </select> 10 </mapper>
namespace="mybatis.pojo"表示命名空间是mybatis.pojo,在后续调用sql语句的时候,会用到它里面定义了一条sql语句:select * from category。这条sql语句用id: listCategory 进行标示以供后续代码调用。resultType="Category" 表示返回的数据和Category关联起来,这里本应该使用的是 mybatis.pojo.Category, 但是因为上一步配置了别名,所以直接使用Category就行了。
6.测试
<1>根据配置文件mybatis-config.xml得到sqlSessionFactory
<2>然后根据sqlSessionFactory得到session
<3>最后通过session的selectList方法,调用sql语句listCategory,listCategory这个就是在配置文件Category.xml中那条sql语句设置的id。执行完毕之后,得到一个Category集合,遍历即可看到数据。
1 package mybatis.test; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.util.List; 6 7 import org.apache.ibatis.session.SqlSession; 8 import org.apache.ibatis.session.SqlSessionFactory; 9 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 10 11 import mybatis.pojo.Category; 12 13 public class test { 14 public static void main(String[] args) throws IOException { 15 String resource = "mybatis-config.xml"; 16 InputStream inputStream = org.apache.ibatis.io.Resources.getResourceAsStream(resource); 17 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 18 SqlSession session = sqlSessionFactory.openSession(); 19 List<Category> cs = session.selectList("listCategory"); 20 for (Category c : cs) { 21 System.out.println(c.getName()); 22 } 23 24 } 25 }
三、基本原理图
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集合