MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。
一.MyBatis的优点:
1.简化JDBC编程
MyBatis和Hibernate都是优秀的持久层框架,发明它们的目的之一就是简化jdbc编程。这些框架封装了JDBC操作的细节过程,大大简化了开发,让开发人员更好的集中精力实现业务逻辑。
2.易于SQL优化
Hibernate完全的O/R映射使得我们没法根据实际业务优化SQL语句,所以无法满足特殊的业务需求和高性能业务,MyBatis正好弥补了这个空白。
确切点说MyBatis最重要的就是写好SQL,包括写好SQL语句和写好SQL映射。
·SQL语句就是标准的SQL语句(可以在当前选用的数据库产品下,根据需求使用该产品下的SQL函数)
·SQL映射包括:参数映射和返回值映射(返回值只针对查询,增删改是没有返回值的)
●【参数映射】(也叫做【输入映射】)
MyBatis将java对象传入给SQL语句参数的过程。
●【返回值映射】(也叫做【输出映射】)
MyBatis将SQL查询的结果集处理成一个java对象并返回给java程序的过程。
●【java对象】
如果传递单个参数,变量可以是简单类型:int、long、float、String、Integer、Long、Boolean、Float等。
如果传递多个参数,必须使用实体类封装,封装后再传给sql。有一个名词叫pojo(Plain Ordinary Java Object),里面有许多属性以及它们的getter/setter方法。
实体类==Java bean==pojo,它们没有区别,就是换种叫法而已。
● SQL语句以及映射写在xml或注解中。
二.MyBatis访问数据库的核心构成
从这个结构图要明确知道MyBatis访问数据库的核心构成包括三个核心类和两种配置文件。
三个核心类:SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession;
两种配置文件:MyBatis核心配置文件(一个)、MyBatis映射文件(多个)。
了解了核心构成,下面主要学习的就是SQL的映射规范了,也就是在MyBatis中如何写SQL。只要按照规范写SQL,MyBatis就能自动的帮助我们完成具体的映射工作。
三.MyBatis小demo环境搭建
第一步:创建数据库表
第二步:创建工程
创建一个普通java工程。
第三步:导入jar包
这里我们用到【MyBatis的jar包】和【mysql的jar包】。
第四步:框架的配置文件
1.核心配置文件
在config下创建MyBatisConfig.xml(也有人叫SqlMapConfig.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:当前默认使用的数据库环境
-->
<environments default="dev">
<!-- 开发数据库环境的配置 -->
<!--
environment:表示一个数据库环境配置的标签
id:表示唯一标识一个数据库环境
-->
<environment id="dev">
<!-- 事务管理的配置 -->
<!--
transactionManager:表示事务管理的配置标签
type:表示事务管理的类型,由于MyBatis是对JDBC的封装,所以通常使用JDBC的事务
-->
<transactionManager type="JDBC"/>
<!-- 数据源配置:driver, url, username, password -->
<!--
dataSource:表示数据源的配置标签
type:表示数据源的类型,标识是否支持数据库连接池
POOLED:表示支持数据库连接池的数据源
UNPOOLED:表示不支持数据库连接池的数据源
-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<!-- 配置映射文件 -->
<mappers>
<!-- 通过映射文件在编译后类目录下的相对路径加载映射文件
resource:用来指定映射文件的相对路径
-->
<mapper resource="cn/itcast/mapper/UserMapper.xml" />
</mappers>
</configuration>
这个文件就是MyBatis的核心配置文件,里面主要配置连接数据库的数据源、事务管理以及MyBatis的映射文件有哪些。
这里大概知道里面配置的是数据库信息就可以了,因为到实际项目中框架整合后就不用这么配置了,所以它的实用价值不大,这里只是临时这么用一下。
2.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">
<!-- namespace:是一个SQL映射文件的唯一标识,不能重名 -->
<mapper namespace="user">
<!-- SQL映射 -->
</mapper>
第六步:测试环境
public class MyTest {
@Test
public void envTest() throws Exception {
SqlSession sqlSession = null;
try {
// 1. 读取配置文件(MyBatis有专门读取配置文件的工具类Resources)
InputStream inputStream = Resources.getResourceAsStream("MyBatisCofig.xml");
// 2. 根据主配置文件创建会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 3. 根据会话工厂创建会话对象
// 业务层通过SqlSession对象来访问数据库进行CRUD操作,每个执行方法中会话对象要私有
sqlSession = sqlSessionFactory.openSession();
System.out.println(sqlSession);
} catch(Exception e) {
e.printStackTrace();
throw e;
} finally {
// 关闭会话
sqlSession.close();
}
}
}