之前讲过一个ORM框架,了解到Hibernate有许多优点,比如开源、轻量级封装、可扩展性高等优点。但是Hibernate存在着门槛高的问题,开发代价比较高,虽然其功能比较强大,自动化程度较高,但是正是由于其将sql语言进行封装,才导致后期维护比较困难,sql编写不够灵活等问题。因此,Hibernate适用于开发稳定的项目,而不是适合后期维护比较多的项目。因此,随着互联网的发展,软件包括应用等迭代升级是不可避免的,那么这时候使用Hibernate就会显得代价过高。因此,引入了另一个持久层框架:MyBatis。
1.何谓MyBatis
2.Mybatis与Hibernate对比
3.MyBatis架构
//读取MyBatis配置文件
InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
//初始化mybatis,创建SqlSessionFactory类的实例。
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
3.获取SqlSession:通过
SqlSessionFactory的openSession()方法获取SqlSession,如下所示:
//创建Session实例
SqlSession session=sqlSessionFactory.openSession();
4.mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
5.Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
6.Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
7.Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
4.配置文件
<?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">
<!-- XML配置文件包含对MyBatis系统的核心设置 -->
<configuration>
<!-- 指定MyBatis所用日志的具体实现 -->
<settings>
<setting name="logimpl" value="LOG4J"/>
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="..." value="..."/>
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="org.gjt.mm.mysql.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com.mybatis.mapper.UserMapper.xml"/>
</mappers>
</configuration>
2.log4j.properties:上面的全局配置中,日志文件使用的是LOG4J,因此这里需要配置一个log4j.properties的文件,例如:
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
3.Mapper文件:Mapper文件就是数据库的映射文件,并且其中定义要执行的SQL语句,并且定义相应的mapper接口的位置,完成映射,例如如下:
<?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="UserMapper">
<insert id="insertUser" parameterType="com.mybatis.model.impl.User" useGeneratedKeys="true"
keyProperty="id">
insert into TB_USER(name,sex,age)
values(#{name},#{sex},#{age})
</insert>
</mapper>