MyBatis简介
1.1 MyBatis历史
1)MyBatis是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation 迁移到了Google Code,随着开发团队转投Google Code旗下, iBatis3.x 正式更名为MyBatis ,代码于2013年11月迁移到Github。
2)iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。 iBatis 提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
1.2 MyBatis简介
1) MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。
2) MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
3) MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
4) Mybatis 是一个 半自动的ORM(Object Relation Mapping)框架。
1.3 如何下载MyBatis
1) 下载网址
https://github.com/mybatis/mybatis-3/
1.4 为什么要使用MyBatis – 现有持久化技术的对比
1) JDBC
① SQL夹在Java代码块里,耦合度高导致硬编码内伤
② 维护不易且实际开发需求中sql有变化,频繁修改的情况多见
2) Hibernate和JPA
① 长难复杂SQL,对于Hibernate而言处理也不容易
② 内部自动生产的SQL,不容易做特殊优化
③ 基于全映射的全自动框架,大量字段的POJO进行部分映射时比较困难。导致数据库性能下降
3) MyBatis
① 对开发人员而言,核心sql还是需要自己优化
② sql和java编码分开,功能边界清晰,一个专注业务、一个专注数据
MyBatis HelloWorld
开发环境的准备
1) 导入MyBatis框架的jar包、Mysql驱动包、log4j的jar包
myBatis-3.4.1.jar
mysql-connector-java-5.1.37-bin.jar
log4j.jar
2) 导入log4j 的配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n"/>
</layout>
</appender>
<logger name="java.sql">
<level value="debug"/>
</logger>
<logger name="org.apache.ibatis">
<level value="info"/>
</logger>
<root>
<level value="debug"/>
<appender-ref ref="STDOUT"/>
</root>
</log4j:configuration>
创建测试表
-- 创建库
CREATE DATABASE test_mybatis;
-- 使用库
USE test_mybatis;
-- 创建表
CREATE TABLE tbl_employee(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
last_name VARCHAR(50),
email VARCHAR(50),
gender CHAR(1)
);
创建javaBean
public class Employee {
private Integer id ;
private String lastName;
private String email ;
private String gender ;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + "]";
}
创建MyBatis的全局配置文件
1) 参考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>
<!-- 数据库连接环境的配置 -->
<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/mybatis_1129" />
<property name="username" value="root" />
<property name="password" value="1234" />
</dataSource>
</environment>
</environments>
<!-- 引入SQL映射文件,Mapper映射文件 -->
<mappers>
<mapper resource="EmployeeMapper.xml" />
</mappers>
</configuration>
创建Mybatis的sql映射文件
1) 参考MyBatis的官方手册
<?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="suibian">
<select id="selectEmployee" resultType="com.atguigu.myabtis.helloWorld.Employee">
select id ,last_name lastName ,email ,gender from tbl_employee where id = #{id}
<!-- select * from tbl_employee where id = #{id} -->
</select>
</mapper>
测试
1) 参考MyBatis的官方手册
@Test
public void test() throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
System.out.println(sqlSessionFactory);
SqlSession session = sqlSessionFactory.openSession();
try {
Employee employee =
session.selectOne("suibian.selectEmployee", 1001);
System.out.println(employee);
} finally {
session.close();
}
}
Mapper接口开发MyBatis HelloWorld
1) 编写Mapper接口
public interface EmployeeMapper {
public Employee getEmployeeById(Integer id );
}
2) 完成两个绑定
① Mapper接口与Mapper映射文件的绑定:
在Mppper映射文件中的标签中的namespace中必须指定Mapper接口的全类名
② Mapper映射文件中的增删改查标签的id必须指定成Mapper接口中的方法名.
3) 获取Mapper接口的代理实现类对象
@Test
public void test() throws Exception{
String resource = "mybatis-config.xml";
InputStream inputStream =
Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder()
.build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
try {
//Mapper接口:获取Mapper接口的 代理实现类对象
EmployeeMapper mapper =
session.getMapper(EmployeeMapper.class);
Employee employee =
mapper.getEmployeeById(1006);
System.out.println(employee);
} finally {
session.close();
}
}