释义
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录
简单来概括,MyBatis就是将JDBC变得更加灵活、更加高效。避免了传统JDBC的sql语句高度重复的缺点,大大提高了代码的效率。
下载
MyBatis最先属于Apache,后来转到Google code下,于2013年迁移到GitHub。
可到MyBatis官网进行下载,个人建议不要下最新版的MyBatis,老一点的版本更加稳定安全。MyBatis
使用
MyBatis既可单独使用,也可以与其他框架共同使用进行开发。
如SSM(Spring MVC、Spring、MyBatis),使后台程序的开发变得增加高效统一
图解组成
config.xml文件
config.xml文件是配置MyBatis需要的数据库驱动包以及数据库的各种信息等
<?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>
<typeAliases>
<package name="com.how2java.pojo"/>
</typeAliases>
<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/数据库名?characterEncoding=UTF-8"/>
<property name="username" value="admin"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/how2java/pojo/Category.xml"/>
</mappers>
</configuration>
配置文件
配置文件节点顺序不能颠倒
配置文件xml
configuration:根节点
properties:属性
settings:设置
typeAliases:类型命名
typeHandlers:类型处理器
objectFactory:对象工厂
plugins:插件
environments:配置环境
environment:环境变量
transactionManager:事务管理器
dataSource:数据源
databaseIdProvider:数据库厂商标识
mappers:对象映射器
Mapper映射文件
MyBatis强大的一个原因就是因为它的映射的功能,可以减少传统的JDBC 90%的代码
映射器,由java和xml文件构成,构造映射规则,发送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">
<mapper namespace="com.how2java.pojo">
<resultMap type="Category" id="categoryBean">
<id column="cid" property="id" />
<result column="cname" property="name" />
<!-- 一对多的关系 -->
<!-- property: 指的是集合属性的值, ofType:指的是集合中元素的类型 -->
<collection property="products" ofType="Product">
<id column="pid" property="id" />
<result column="pname" property="name" />
<result column="price" property="price" />
</collection>
</resultMap>
<!-- 关联查询分类和产品表 -->
<select id="listCategory" resultMap="categoryBean">
select c.*, p.*, c.id 'cid', p.id 'pid', c.name 'cname',
p.name 'pname' from category_ c left join product_ p on c.id = p.cid
</select>
</mapper>
typeHandler:类型转换器
用于承担 数据库与java之间的类型转换,jdbcType–javaType,mybatis会进行自动处理
生命周期
SqlSessionFactoryBuilder用于创建SqlSessionFactory,创建成功后即失效 SqlSessionFactory等同于多个数据库的连接池(整个mysql),在整个mybatis的生命周期中,如果创建多个,则会耗光连接池,造成应用崩溃,所以一般为单例模式,整个应用进行共享
SqlSession对应单个数据库进行的命令操作,如果使用完,则会把链接返还给SqlSessionFactory连接池
Mapper由session创建, 一个mapper请求对应一个业务处理
总结
MyBatis框架在公司大量重复性极高的开发代码中起到了极大的作用,它大大减少了繁重的重复代码量,提高了代码的效率。
同时MyBatis也是现在程序开发中最热门的框架之一,学习MyBatis对于我们开发大型项目带来了不可估量的作用。