共计 3293 个字符,预计需要花费 9 分钟才能阅读完成。
一、Mybatis 介绍
MyBatis 是一款一流的支持自定义 SQL、存储过程和高级映射的持久化框架。MyBatis 几乎消除了所有的 JDBC 代码,也基本不需要手工去设置参数和获取检索结果。MyBatis 能够使用简单的 XML 格式或者注解进行来配置,能够映射基本数据元素、Map 接口和 POJOs(普通 java 对象)到数据库中的记录。
二、MyBatis 工作流程
(1) 加载配置并初始化
触发条件:加载配置文件
配置来源于两个地方,一处是配置文件,一处是 Java 代码的注解
(2)接收调用请求
触发条件:调用 Mybatis 提供的 API
传入参数:为 SQL 的 ID 和传入参数对象
处理过程:将请求传递给下层的请求处理层进行处理。
(3) 处理操作请求 触发条件:API 接口层传递请求过来
传入参数:为 SQL 的 ID 和传入参数对象
处理过程:
(A) 根据 SQL 的 ID 查找对应的 MappedStatement 对象。
(B)根据传入参数对象解析 MappedStatement 对象,得到最终要执行的 SQL 和执行传入参数。
(C)获取数据库连接,根据得到的最终 SQL 语句和执行传入参数到数据库执行,并得到执行结果。
(D)根据 MappedStatement 对象中的结果映射配置得到的执行结果进行转换处理,并得到最终的处理结果。
(E)释放连接资源。
(4) 返回处理结果将最终的处理结果返回。
三、orm 工具的基本思想
无论是用过的 hibernate,mybatis, 你都可以法相他们有一个共同点:
从配置文件 (通常是 XML 配置文件中) 得到 sessionfactory.
由 sessionfactory 产生 session
在 session 中完成对数据的增删改查和事务提交等.
在用完之后关闭 session。
在 java 对象和 数据库之间有做 mapping 的配置文件,也通常是 xml 文件。
四、功能架构
Mybatis 的功能架构分为三层:
API 接口层:提供给外部使用的接口 API,开发人员通过这些本地 API 来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
数据处理层:负责具体的 SQL 查找、SQL 解析、SQL 执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。
需要添加的驱动包:
五、快速入门:
1,实体类 User:
[Java] 纯文本查看 复制代码
?
public class User {
private String id;
private String name;
private int age;
public String getId() {return id;}
public void setId(String id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public int getAge() {return age;}
public void setAge(int age) {this.age = age;}
@Override
public String toString() {return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
2, 映射文件 UserMapping.xml
[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”>
<mapper namespace=”com.oumyye.mapping.UserMapping”>
<!-- 在 select 标签中编写查询的 SQL 语句,设置 select 标签的 id 属性为 getUser,id 属性值必须是唯一的,不能够重复
使用 parameterType 属性指明查询时使用的参数类型,resultType 属性指明查询返回的结果集类型
resultType="com.oumyye.model.User" 就表示将查询结果封装成一个 User 类的对象返回
User 类就是 users 表所对应的实体类
-->
<!--
根据 id 查询得到一个 user 对象
-->
<select id="getUser" parameterType="String"
resultType="com.oumyye.model.User">
select * from user where id=#{id}
</select>
</mapper>
3、资源文件 mybatis.xml
[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>
<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/mybatis" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/oumyye/mapping/userMapping.xml"/>
</mappers>
</configuration>
4,测试类:
[Java] 纯文本查看 复制代码
?
public class Tests {
@Test
public void test(){
String resource = "mybatis.xml";
// 使用类加载器加载 mybatis 的配置文件(它也加载关联的映射文件)InputStream is = Tests.class.getClassLoader().getResourceAsStream(resource);
// 构建 sqlSession 的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession();
/**
* 映射 sql 的标识字符串,* com.oumyye.mapping.UserMapping 是 userMapper.xml 文件中 mapper 标签的 namespace 属性的值,* getUser 是 select 标签的 id 属性值,通过 select 标签的 id 属性值就可以找到要执行的 SQL
*/
String statement = "com.oumyye.mapping.UserMapping.getUser";// 映射 sql 的标识字符串
// 执行查询返回一个唯一 user 对象的 sql
User user = session.selectOne(statement, "1123");
System.out.println(user.toString());
}
}