MyBatis框架入门

1、框架的作用

集成、约束。

提高开发效率,降低运营维护成本。规范开发行为,便于团队之间协作。

SSM:Spring(解耦,IOC、AOP)、SpringMVC、 Mybatis(ORM)

2、Mybatis框架的作用

Mybatis框架:ORM(Object Relationship Mapping)、持久层框架。

ORM:Object-Relationl Mapping,对象关系映射,它的作用是在关系型数据库和对 象之间作一个映射处理。

 

JDBC 的缺点:需要手动的完成面向对象的 Java 语言、 面向关系的数据库之间数据的

转换,代码繁琐无技术含量,影响了开发效率。

二、Mybatis框架简介

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、 存储过程以及高级映射。

MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使

用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary

Java Object,普通的 Java 对象)映射成数据库中的记录。

面试题:Mybatis框架和Hibernate框架的区别?

 

简单的说:MyBatis 是一个半自动 ORM 框架,其本质是对 JDBC 的封装。使用 MyBatis

重点需要程序员编写 SQL 命令,不需要写一行 JDBC 代码。

Hibernate 是一个全自动 的 ORM 框架。 因为 Hibernate 创建了 Java 对象和数据库表

之间的完整映射,可以完全以面向对象的思想来操作数据库,程序员不需要手写 SQL 语句,

而 MyBatis 中还需要手写 SQL 语句,所以是半 自动化的,工作量要大于 Hibernate。

为什么半自动化的 Mybatis 比自动化的 Hibernate 受欢迎?

MyBatis 需要手写 SQL 语句,所以工作量要大于 Hibernate。 但是也正是由于自定义

SQL 语句,所以其灵活性、 可优化性就超过了 Hibernate。

Hibernate 封装了 SQL 语句,由开发者对对象操作,Hibernate 来生成 SQL 语句。 虽 然也可以通过映射配置来控制生成的 SQL 语句,但是对于要生成复杂的 SQL 语句,很难实现,或者实现后导致性能的丢失。

而 MyBatis 将手写 SQL 语句的工作丢给开发者,可以更加精确的定义 SQL,更加灵活, 也便于优化性能。 完成同样功能的两条 SQL 语句的性能可能相差十几倍到几十倍,在高并发、 快响应要求下的互联网系统中,对性能的影响更明显。

MyBatis 对存储过程可提供很好的支持。 另外 MyBatis 的开发工作量大不意味着学习 成本大。对于新手,学习 Hibernate 时间成本比 Mybatis 大很多,Mybatis 很快就上手了。

总之,因为 MyBatis 具有封装少、 映射多样化、 支持存储过程、 可以进行 SQL 语句优化等特点,符合互联网高并发、 大数据、 高性能、 高响应的要求,使它取代 Hibernate 成为了 Java 互联网中首选的持久框架。 而对于对性能要求不高的比如内部管理系统、 ERP 等可以使用 Hibernate。使用场景

三、Mybatis框架入门

1、回顾JDBC开发的步骤

1、Connection con = DiverManager.getConnection(url, username, pwd);

2、Statement st = con.PreparedStatement();

3、ResultSet rs = st.executeQuery();

类比学习,下图是Mybatis核心API工作流程。

 

2、建立数据库连接

SqlSessionFactoryBuilder→SqlSessionFactory(类比连接池)主配置文件

SqlSessionFactory→ SqlSession(类比连接)

2.1 项目准备

新建项目,引入Mybatis和数据库连接的jar,并且添加到项目构建路径下。

 

启动Oracle数据库服务。

2.2 主配置文件设置数据库连接参数

mybatis_config.xml主配置文件。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
	PUBLIC "-//mybatis.org//DTDConfig3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="db.properties"></properties>
	<environments default="dev">
		<environment id="dev">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="oracle.jdbc.OracleDriver"/>
				<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
				<property name="username" value="scott"/>
				<property name="password" value="tiger"/>
			</dataSource>
		</environment>
		<environment id="test">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driver}"/>
				<property name="url" value="${jdbc.url}"/>
				<property name="username" value="${jdbc.username}"/>
				<property name="password" value="${jdbc.password}"/>
			</dataSource>
		</environment>
	</environments>
</configuration>

db.properties配置文件内容如下:

jdbc.driver=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.username=scott
jdbc.password=tiger

报错提示,如下图所示。

 

2.3 测试连接

写一个测试类TestMybatis,读取mybatis_config.xml配置文件,建立与数据库之间的连接。

public class TestMybatis {
	public static void main(String[] args) throws IOException {
		SqlSessionFactoryBuilder buider = new SqlSessionFactoryBuilder();
		InputStream in = Resources.getResourceAsStream("mybatis_config.xml");
		SqlSessionFactory factory = buider.build(in);
		SqlSession connection = factory.openSession();
		System.out.println(connection);
	}
}

测试结果

 

切换开发环境,测试,检验使用properties配置文件中的连接配置,建立与数据库的连接。

 

四、实现查询

1、表和实体类的对应

在此使用Oracle数据库中默认的表格dept。建议备份一个dept_bak表。

CREATE TABLE dept_bak AS SELECT * FROM dept;
SELECT * FROM dept_bak;

 

查询实际是将数据库中的行数据映射为Java中的对象。

根据查询结果建立实体类。

public class Dept {
	private Integer deptno;
	private String dname;
	private String loc;
	// 其它方法自行添加
}

2、DAO(接口、mapper配置)

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
	PUBLIC "-//mybatis.org//DTDMapper3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dyh.dao.DeptMapper">
	<select id="query" resultType="com.dyh.pojo.Dept">
		SELECT * FROM dept_bak
	</select>
</mapper>

注意:xml配置中select元素中的id属性值需要与DAO接口中的方法名保持一致!!

在mybatis_config.xml主配置文件中增加mapper关联,如下所示:

<mappers>
        <!-- 会自动扫描这个包下面的所有类  -->
        <package name="com.dyh.dao"/>
    </mappers>

3、测试查询

在测试类中增加查询的代码。

public class TestMybatis {
	public static void main(String[] args) throws IOException {
		SqlSessionFactoryBuilder buider = new SqlSessionFactoryBuilder();
		InputStream in = Resources.getResourceAsStream("mybatis_config.xml");
		SqlSessionFactory factory = buider.build(in);
		SqlSession connection = factory.openSession();
		System.out.println(connection);
		DeptMapper mapper = connection.getMapper(DeptMapper.class);
		List<Dept> depts = mapper.query();
		for (Dept dept : depts) {
			System.out.println(dept);
		}
	}
}

运行结果如下:

总结

SQLSessionFactoryBuilder→SqlSessionFactory(类比连接池)→SqlSession(类比连接)→Mapper(映射关系)。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值