Mybatis介绍:
MyBatis的前身就是iBatis,iBatis本是apache的一个开源项目,2010年5月这个项目由apahce sofeware foundation 迁移到了google code,并且改名为MyBatis。
iBATIS 一词来源于“internet”和“abatis”(铁丝网)的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plan Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
-
Mybatis 结构图
-
Mybatis 配置
-
mybatis配置
SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。 -
通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
-
由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
-
mybatis底层自定义了Executor接口操作数据库,Executor接口有两个实现,一个是基本实现、一个是缓存实现。
-
Mapped Statement也是mybatis一个底层对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
-
Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过 Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
-
Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过 Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
- 开发环境
引入log4j打印mybatis执行sql的日志信息
mybatis-3.2.2.jar mybatis核心包
mysql-connector-java-5.1.28-bin.jar mysql jdbc驱动
junit-4.9.jar 单元测试
# mybatis依赖包,在mybatis.zip中提供
asm-3.3.1.jar
cglib-2.2.2.jar
commons-logging-1.1.1.jar
javassist-3.17.1-GA.jar
log4j-1.2.17.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
- 引入DTD文件提示
增加:
- 引入log4j打印SQL语句
在classpath中建立一个名叫log4j.properties的文件,内容如下:
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t]
- 创建核心配置文件sqlMapConfig.xml
---- 1. 配置事务
JDBC直接使用jdbc的事务
MANAGED 容器管理事务,mybatis 什么都不要做。
---- 2. 数据源DataSource
UNPOOLED 非池化的
POOLED 池化的
JNDI 方式
---- 3.核心配置文件 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="test">
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/chat?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
这就是mybatis的一个典型的配置文件。在这个配置文件中,我们可以清楚得看到一些关键信息。
第一,有一个environments这个元素,在这个元素里面配置的是一个一个的environment元素,每一个environment元素有一个id做为名字,
而environments元素上面有一个default属性,引用environment元素的名称,很容易想象出他们之间的关系。在environments里面可以定义多个enviroment元素,使用default属性指定一个默认的environment。而在environment里面,定义了一组数据库相关的东西,包括transactionManager,这个元素代表着怎么去管理事务,而下面的dataSource就很明显了,代表连接数据库的相关信息。在这里,dataSource有一个属性type,这里我们写的是POOLED,很明显,使用连接池来做mybatis的连接提供。在dataSource里面,配置了四个属性,做为数据库连接信息配置
- POJO对象
public class TUser {
private int id;
private String name;
private Integer age;
private Integer roleId;
//此处省略getter/setter方法
}
- 创建映射文件 TUserMapper.xml
在mybatis中,需要自己去控制sql,所以我们的配置文件会像下面这样。在User的同级包下,添加一个XML文件,起名为UserMapper.xml,代表这个文件是User对象的映射文件
<?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.feian.pojo">
<select id="find" resultType="com.feian.pojo.TUser">
select * from t_user
</select>
</mapper>
- 在sqlMapConfig.xml 声明TUserMapper.xml
<!-- 声明xml文件 -->
<mappers>
<mapper resource="com/feifan/pojo/TUserMapper.xml" />
</mappers>