一、MyBatis安装及下载地址
下载路径:https://github.com/mybatis/mybatis-3/releases
文档:http://mybatis.github.io/mybatis-3/zh/getting-started.html
国内镜像地址:http://maven.aliyun.com/nexus/#nexus-search;quick~mybatis
Maven配置:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
二、MyBatis 简介
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
三、Hibernate与MyBatis
Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握, Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执行。
iBATIS 的着力点,则在于POJO 与SQL之间的映射关系。然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。 相对Hibernate“O/R”而言,iBATIS 是一种“Sql Mapping”的ORM实现。
四、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>
<!-- 读取JDBC配置文件 -->
<properties resource="cn/et/springmvc/util/jdbc.properties"></properties>
<!-- 当从数据库取到空值时,如果没有此配置在浏览器将会显示为 undefined,配置了则会直接显示为"" -->
<settings>
<setting name="callSettersOnNulls" value="true"/>
</settings>
<!-- 配置数据库的环境 (开发环境) -->
<environments default="development">
<environment id="development">
<!-- 将事务交给JDBC来处理 commit rollback -->
<transactionManager type="JDBC" />
<!-- 数据源(dataSource) 用来获取连接 connection 连接池(dbcp、c3p0、druid) -->
<dataSource type="POOLED">
<!-- 数据源四要素:一、驱动类 -->
<property name="driver" value="${driverName}" />
<!-- 数据源四要素:二、URL -->
<property name="url" value="${url}" />
<!-- 数据源四要素:三、用户名 -->
<property name="username" value="${uname}" />
<!-- 数据源四要素:四:密码 -->
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- 这里使用的是接口注解映射 -->
<mappers>
<mapper class="cn.et.springmvc.dao.EmpDao"/>
</mappers>
</configuration>
使用配置文件映射:
mybatis-config.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>
<!-- 读取JDBC配置文件 -->
<properties resource="jdbc.properties">
</properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- 引用其他的映射文件 这里可以引用多个文件配置文件 -->
<mappers>
<mapper resource="com/ib/UserInfoMapper.xml" />
<mapper resource="........" />
</mappers>
</configuration>
映射配置文件:
com/ib/UserInfoMapper.xml内容:
<?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="org.ib.UserInfo">
<select id="selectUserInfo" resultType="com.ib.UserInfo">
select id from hib_user_info where id = #{id}
</select>
</mapper>
通过接口直接映射Sql(XML)
接口定义:
package com.ib;
import org.apache.ibatis.annotations.Select;
public interface UserMapper {
public UserInfo selectUserInfo(String id);
}
mybatis-config.xml内容:
<mappers>
<mapper resource="com/ib/UserInfoMapper.xml" />
<mapper class="com.ib.UserMapper"/>
</mappers>
UserInfoMapper.xml
<mapper namespace=" com.ib.UserMapper ">
<select id="selectUserInfo" resultType=" UserInfo " parameterType="java.lang.String" >
select id from hib_user_info where id=#{id}"
</select>
</mapper>
通过接口直接映射Sql(注解)
接口定义:
package com.ib;
import org.apache.ibatis.annotations.Select;
public interface UserMapper {
@Select("select id from hib_user_info where id=#{id}")
public UserInfo selectUserInfo(String id){
}
mybatis-config.xml内容:
<mappers>
<mapper class="com.ib.UserMapper"/>
</mappers>
通过接口调用:
//获取资源文件的路径
String resource = "mybatis-config.xml";
//加载资源文件获取输入流
InputStream inputStream = Resources.getResourceAsStream(resource);
//通过输入流获取实现接口的会话的工厂类
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//开启回话
SqlSession session=sqlSessionFactory.openSession();
//通过回话获取接口实例
UserMapper um=session.getMapper(UserMapper.class);