1概述
原是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache
Software Foundation 迁移到了 Google Code,随着开发团队转投Google Code 旗下, iBatis3.x正式更名为MyBatis。
MyBatis 是一款优秀的持久层框架。
MyBatis 避免了几乎所有的 JDBC 代码手动设置参数以及手动获取结果集的操作。
2特性
1)支持定制化sql,存储过程以及高级映射的优秀的持久层框架。
2)避免了几乎所有的 JDBC 代码手动设置参数以及手动获取结果集的操作。
3)MyBatis 可以使用 XML 或注解来配置和映射,将数据库中的记录映射成
Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)。
4)是一种 半自动的ORM(ORM Object Relational Mapping 对象关系映射)实现。
ORM就是将实体类对象与关系数据库创建映射关系。
3mybatis下载
Mybatis 中文官网 https://mybatis.org/mybatis-3/zh/getting-started.html
Mybatis 源码下载 https://github.com/mybatis/mybatis-3/releases
4与其它持久层技术对比
JDBC
sql夹杂在java代码中耦合性高,导致硬编码内伤。
维护不易且实际开发需求中sql有变化,频繁修改的情况多见。
代码冗长,开发效率低
Mybatis
轻量级,性能出色
SQL和java编码分开,功能边界清晰。java代码专注业务,sql语句专注数据。
开发效率略逊色hibernate,但是完全能够接受
5MyBatis 环境搭建
1)导入 MyBatis jar 包,mysql 数据库驱动包
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>
2)创建 MyBatis 全局配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<environments default="development">
<environment id="development">
<dataSource type="POOLED">
<property name="driver" value="" />
<property name="url" value="" />
<property name="username" value="" />
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
</configuration>
3)创建 sql 映射文件
<?xml version="1.0" encoding="UTF-8"?>
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="接口地址">
定义 sql 语句
</mapper>
4)定义接口
在接口中定义方法
public interface UserDao{
}
Mybatis映射文件中要有两个一致:
1.namespace要有dao接口的全类名一致
2.sql语句的id要与dao接口的方法名一致
表--实体类--dao接口--映射文件
6测试MyBatis
**读取配置文件
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
创建 SqlSessionFactory
SqlSessionFactory sessionFactory = **new SqlSessionFactoryBuilder().build(reader);
创建 SqlSession
SqlSession sqlSession = sessionFactory.openSession();
获得接口代理对象
sqlSession.getMapper(接口.class);
sqlSession .close();关闭
API 接口说明
SqlSessionFactory 接口
使用 SqlSessionFactory 来创建 SqlSession,一旦创建 SqlSessionFactory 就
会在整个应用过程中始终存在。由于创建开销较大,所以没有理由去销毁再创建
它,一个应用运行中也不建议多次创建 SqlSessionFactory。
SqlSession 接口
Sqlsession 意味着创建与数据库链接会话,该接口中封装了对数据库操作的方
法,与数据库会话完成后关闭会话。
Mybatis-Dao 层 Mapper 接口化开发
Mapper 接口开发方式只需要程序员编写 Mapper 接口,由 Mybatis 框架创建接
口的动态代理对象,使用 sqlsession.getMapper(接口.class);获得代理对象.
Mapper 接口开发需要遵循以下规范:
1) Mapper.xml 文件中的 namespace 与 mapper 接口的类路径相同.
2) Mapper 接口方法名和 Mapper.xml 中定义的每个 statement 的 id 相同.
3) Mapper 接口方法的输入参数类型和 mapper.xml 中定义的每个 sql 的
parameterType 的类型相同.
4) Mapper 接口方法的输出参数类型和 mapper.xml 中定义的每个 sql 的
resultType 的类型相同
7Mybatis获取参数值的两种方式
${}本质字符串拼接
#{}本质占位符赋值
Mybatis获取参数值的各种情况:
1)dao接口方法的参数为单个字面量类型
可以通过&{}和#{}以任意的字符串获取参数值,但是需要注意${}的单引号问题 ‘${}’ 其实括号里面的值无所谓,但要规范,见名知意
2)dao接口方法的参数为多个时
此时Mybatis会把这些参数放在一个map集合中,以两种方式存储
a。以arg0,arg1...为键,以参数为值
b。以param0,param1...为键,以参数为值
因此只需要通过&{}和#{}以键的方式访问值即可,但是需要注意${}的单引号问题
3)若dao接口方法的参数有多个时,可以手动将这些参数放一个map里面存储
4)mapper接口方法参数是一个实体类类型的参数
只需要通过&{}和#{}以属性的方式访问属性值即可,但是需要注意${}的单引号问题
5)使用@Param命名参数
此时Mybatis会把这些参数放在一个map集合中,以两种方式存储
a。以arg0,arg1...为键,以参数为值
b。以param0,param1...为键,以参数为值
因此只需要通过&{}和#{}以键的方式访问值即可,但是需要注意${}的单引号问题
8Mybatis的各种查询功能
1.若查询的数据只有一条
a。可以通过实体类对象接收
b。可以通过list集合接收
c。可以通过map集合接收
2.若查询的数据有多条
a。可以通过list集合接收
b。可以通过list集合接收
c。可以在dao接口的方法上添加@MapKey注解,此时就可以将每条数据转换的map集合作为值,以某个字段的值作为键,放在同一个map集合里面
注意:一定不能通过实体类对象接收,此时会抛异常TooManyResultsException
Mybatis中设置了默认的类型别名
java.lang.Integer-->int,integer
int-->_int,_integer
Map-->map
String-->string