1.为什么使用MyBatis框架?
A、每一个请求对应的使用Dao中的方法,每一个方法中都需要连接数据库,这样我们连接数据库的代码就需要写好多次。
B、如果我们做的是查询的操作,从rs中取值是一个比较麻烦,而且影响开发效率的问题。
解决方案:
(1) 提取DBUtil工具类即可
优点:不用在每一次书写连接数据库的操作
缺点:传统的JDBC连接数据库的效率非常慢
(2) 使用数据库连接池连接数据库
优点:连接数据库的速度比较快
缺点:没有办法实现SQL语句和java代码之间的解耦
(3)使用MyBatis框架优势如下
[1]解决了SQL语句和java代码之间的耦合
[2]连接数据库的效率也比较快
[3]取值问题就会变得非常的简单
2.MyBatis框架简介
介绍MyBatis框架之前,先了解一下框架的概念是什么?简而言之就是直接别人封装好的代码,框架包括jar包、API和源码。
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
MyBatis是一个半自动的ORM框架(ORM: Object Relational Mapping,作用解决数据库发展和面向对象发展不一致的问题)
[注]: O:面向对 R:关系型数据库 M:映射
半自动:MyBatis框架是需要我们自己手写sql语句,MyBatis框架不依赖于服务器。
3.MyBatis框架的搭建
(1)导包,包括MyBatis的核心包、依赖包和数据库驱动包
(2)在src下新建各种层
(3)书写mybatis.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">
<!--文档约束 作用就是规定了xml中标签书写的内容-->
<configuration>
<environments default="mysql">
<!--连接的是mysql数据库-->
<environment id="mysql">
<!--mybatis中的事务和jdbc的事务是一致的-->
<transactionManager type="JDBC"></transactionManager>
<!--POOLED;底层使用数据库连接池连接数据库-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis4"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</dataSource>
</environment>
<!--以下部分是连接的oracle数据库
<environment id="orcl">
<transactionManager type=""></transactionManager>
<dataSource type=""></dataSource>
</environment>-->
</environments>
<!--扫描mapper文件-->
<mappers>
<!--resource:里面写是xml所在文件的目录-->
<mapper resource="com/bjsxt/mapper/FlowerMapper.xml"></mapper>
</mappers>
</configuration>
(4)书写对应的XXXMapper.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="a.b">
<!--
public List<Flower> selectAll();
<mapper >中namespace=""值相当于接口名
id:方法名称
resultType:返回值类型
如果返回的是一个对象书写对象的类型全路径即可
如果返回的是一个集合需要书写集合的泛型的全路径即可
parameterType:参数类型,如果没有参数省略该属性.
-->
<select id="selectAll" resultType="com.bjsxt.pojo.Flower" >
select * from flower
</select>
</mapper>
(5)解析执行xml文件
public static void main(String[] args) throws Exception {
//[1]读取mybatis.xml文件
InputStream inputStream = Resources.getResourceAsStream("MyBatis.xml");
//[2]获得session工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
//[3]获得session对象
SqlSession session = factory.openSession();
//[4]调用指定的查询方法
List<Flower> list = session.selectList("a.b.selectAll");
System.out.println(list);
//[5]关闭资源
session.close();
}
4.MyBatis框架详解
jar包目录
jar包目录依次介绍
java文件解析包.spring依赖这个包
动态代理包.mybatis不需编写实现类
日志包.spring依赖这个包
字节码解析助手,处理.class文件
日志包
日志包
日志包
mybatis核心包
数据库驱动包
日志