什么是 MyBatis?
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plan Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
MyBatis与Hibernate的区别
MyBatis :
1 入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。
2 可以进行更为细致的SQL优化,可以减少查询字段。
3 缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。
4 二级缓存机制不佳
整体 : 小巧、方便、高效、简单、直接(SQL操作)、半自动
Hibernate :
1 功能强大,数据库无关性好,对象关系(O/R)映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。
2 有更好的二级缓存机制,可以使用第三方缓存
3 缺点就是学习门槛不低,要精通门槛更高,而且怎么设计对象关系(O/R)映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行
形象举例 :
mybatis:机械工具,使用方便,拿来就用,但工作还是要自己来作,不过工具是活的,怎么使用,由我决定。
hibernate:智能机器人,但研发它(学习、熟练度)的成本很高,工作都可以拜托给他了,但仅限于它能做的事
如何使用
中文官网
https://mybatis.org/mybatis-3/zh/configuration.html
导入JAR包
https://wwa.lanzoui.com/b09y1c1yh
密码:4pwp
创建配置文件
在src下创建 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>
<!-- 链接数据库只需要一个属性来配置文件,就会自动解析 -->
<properties resource="jdbc.properties" />
<!-- 设置别名,然后就可以使用别名来代替前面的路径 -->
<typeAliases>
<typeAlias type="com.tledu.zrz.model.User" alias="User"/>
<typeAlias type="com.tledu.zrz.model.Address" alias="Address"/>
</typeAliases>
<!-- 设置环境,development是开发环境 -->
<environments default="development">
<environment id="development">
<!-- 事务管理器,由JDBC实现,靠JDBC提供 -->
<transactionManager type="JDBC" />
<!-- 数据源,就是数据库连接池,至于怎么实现的,不需要咱们管 -->
<dataSource type="POOLED">
<!-- ${} 在jsp中是EL表达式,这里是OGNL表达式 -->
<!-- 自动获取jdbc.properties里面的值,设置到连接池中
name="driver" 这个driver不能更改
value="${driver}" 这个driver需要和jdbc.properties中一致
-->
<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/tledu/zrz/model/User.xml" />
</mappers>
</configuration>
src下创建jdbc.properties配置数据库
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/_08_
username=root
password=root
日志文件
log4j.properties 把这个文件放到src下即可,因为我们导入了log4j的包,再加上这个配置文件,就可以在控制台做一些记录说明
导入JUNIT依赖
右键项目-》biud path -》add library
@Test 对应的方法只能是成员方法,相当于main()方法一样,会被自动调用执行
@Before 对应的方法只能是成员方法,在@Test方法执行之前执行
@After 对应的方法只能是成员方法,在@Test方法执行之后执行
并且 以上两个都是有多少个 @Test 就执行多少次
@BeforeClass 对应的方法只能是静态方法,在执行第一个 @Test 之前执行,并且只执行一次,在 @Befor 之前执行
@AfterClass 同上,在最后执行,并在 @After 之后
我们可以把测试代码放到 @Test 中,测试代码需要准备的数据或措施放到 @Before 和 @After 中,比如开始事务和事务提交,把全局需要的数据和措施放到 @BeforeClass 和 @AfterClass 中 比如创建连接和关闭链接
获取SqlSessionFactory
String resource = "mybatis-config.xml";
// 读取总配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
// 获取session工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取session
SqlSession session = sqlSessionFactory.openSession();
session.commit();
session.close();
Mapper三种形式
第一种 : sqlSession执行对应语句,就是我们上面测试的那种
第二种 : 使用注解(基本不用)
第三种 : 利用接口代理(常用)
1.创建一个接口,接口名与xml一样,接口与xml放在一起,一个xml对应一个接口
2.在接口中定义抽象方法,返回值就写你想要的,方法名就是xml中语句的 id
(xml中namespace的值是接口的全路径)
工具类
public class MyBatisUtil {
private MyBatisUtil() {
}
private static SqlSessionFactory sessionFactory = null;
static {
String resource = "mybatis-config.xml";
// 读取总配置文件
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
// 获取session工厂
sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static SqlSession getSession() {
return sessionFactory.openSession();
}
public static void closeSession(SqlSession session) {
if (session != null) {
session.close();
}
}
}