day49 MyBatis_1

本文详细介绍了MyBatis和Hibernate两大持久层框架的特点与区别。MyBatis轻量级,易于上手,允许更灵活的SQL编写,但需要手动管理SQL;而Hibernate功能强大,提供了对象关系映射,但学习成本较高。同时,文章给出了MyBatis的配置文件示例,并提及了日志配置和测试注解的使用。此外,还介绍了MyBatis的Mapper接口使用方式以及工具类的创建。
摘要由CSDN通过智能技术生成

什么是 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();
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值