0
点赞
收藏
分享

微信扫一扫

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!

MyBatis框架是什么?



MyBatis 框架:

MyBatis 本是apache 的一个开源项目 iBatis, 2010 年这个项目由apache software foundation 迁移到了google code,并且改名为 MyBatis 。2013 年 11 月迁移到Github。

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

通过本文章的学习,可以在最短的时间内学会使用持久层框架MyBatis,该文章的讲解不是学术性研究,项目中用什么,这里就讲什么,如果您现在项目中马上要使用MyBatis框架,那么您只需要学习完,就可以顺利的使用MyBatis开发了。



MyBatis解决的主要问题

减轻使用JDBC 的复杂性,不用编写重复的创建Connetion , Statement ; 不用编写关闭资源代码。

直接使用java 对象,表示结果数据。让开发者专注 SQL 的处理。 其他分心的工作由MyBatis 代劳。

MyBatis 可以完成:


  1. 注册数据库的驱动,例如Class.forName(“com.mysql.jdbc.Driver”))
  2. 创建JDBC 中必须使用的 Connection , Statement, ResultSet 对象
  3. 从xml 中获取sql,并执行sql 语句,把ResultSet 结果转换java 对象


List<Student> list = new ArrayLsit<>();

ResultSet rs = state.executeQuery(“select * from student”);

while(rs.next){

Student student = new Student();

student.setName(rs.getString(“name”));

student.setAge(rs.getInt(“age”));

list.add(student);

}
复制代码

  1. 关闭资源


​ResultSet.close() , Statement.close() , Conenection.close()​



入门案例


  • MyBatis 开发准备
  • 搭建MyBatis 开发环境,实现第一个案例


使用Mybatis 准备

下载 mybatis ​​github.com/mybatis/myb…​​

搭建MyBatis 开发环境

(1) 创建 mysql 数据库和表

数据库名 ssm ;表名student

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_数据库

CREATE TABLE `student` (

`id` int(11) NOT NULL ,

`name` varchar(255) DEFAULT NULL,

`email` varchar(255) DEFAULT NULL,

`age` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码

(2) 创建 maven 工程

创建maven 工程,信息如下:

模板:

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_xml_02

工程坐标:

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_java_03

(3) 删除默认创建的 App 类文件

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_xml_04

(4) 加入 maven 坐标

pom.xml 加入maven 坐标:

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_xml_05

(5) 加入 maven 插件

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_java_06

(6) 编写 Student 实体类

创建包 com.bjpowernode.domain, 包中创建Student 类

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_sql_07

(7) 编写 Dao 接口 StudentDao

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_xml_08

(8) 编写 Dao 接口 Mapper 映射文件 StudentDao.xml

要求:


  1. 在dao 包中创建文件StudentDao.xml
  2. 要StudentDao.xml 文件名称和接口StudentDao 一样,区分大小写的一样。


Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_数据库_09

(9) 创建 MyBatis 主配置文件

项目src/main 下创建 resources 目录,设置 resources 目录为 resources root

创建主配置文件:名称为mybatis.xml

说明:主配置文件名称是自定义的,内容如下:

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_maven_10

支持中文的url

​jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8​

(10) 创建测试类 MyBatisTest

src/test/java/com/bjpowernode/ 创建MyBatisTest.java 文件

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_数据库_11

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_sql_12

(11) 配置日志功能

mybatis.xml 文件加入日志配置,可以在控制台输出执行的sql 语句和参数

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_maven_13



insert 操作

(1) StudentDao 接口中增加方法

​int insertStudent(Student student);​

(2) StudentDao.xml 加入 sql 语句

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_maven_14

(3) 增加测试方法

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_数据库_15



MyBatis 对象分析



对象使用

​SqlSession , SqlSessionFactory 等​

(1) Resources 类

Resources 类,顾名思义就是资源,用于读取资源文件。其有很多方法通过加载并解析资源文件,返回不同类型的IO 流对象。

(2) SqlSessionFactoryBuilder 类

SqlSessionFactory 的创建,需要使用 SqlSessionFactoryBuilder 对象的build()方法。由于SqlSessionFactoryBuilder 对象在创建完工厂对象后,就完成了其历史使命,即可被销毁。所以,一般会将该 SqlSessionFactoryBuilder 对象创建为一个方法内的局部对象,方法结束,对象销毁。

(3) SqlSessionFactory 接口

SqlSessionFactory 接口对象是一个重量级对象(系统开销大的对象),是线程安全的,所以一个应用只需要一个该对象即可。创建 SqlSession 需要使用SqlSessionFactory 接口的的openSession()方法。

openSession(true):创建一个有自动提交功能的 SqlSession openSession(false):创建一个非自动提交功能的 SqlSession,需手动提交 openSession():同 openSession(false) (4) SqlSession 接口

SqlSession 接口对象用于执行持久化操作。一个 SqlSession 对应着一次数据库会话,一次会话以 SqlSession 对象的创建开始,以 SqlSession 对象的关闭结束。

SqlSession 接口对象是线程不安全的,所以每次数据库会话结束前,需要马上调用其 close()方法,将其关闭。再次需要会话,再次创建。 SqlSession 在方法内部创建,使用完毕后关闭。



创建工具类

(1) 创建 MyBatisUtil 类

​package com.bjpowernode.common;​

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_数据库_16

(2) 使用 MyBatisUtil 类

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_java_17



MyBatis 使用传统 Dao 开发方式



使用Dao 的实现类,操作数据库

Dao 开发

(1) 创建 Dao 接口实现类

public class StudentDaoImpl implements StudentDao

(2) 实现接口中 select 方法

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_数据库_18

测试查询操作:

MyBatisTest 类中创建StudentDaoImpl 对象

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_数据库_19

(3) 实现接口中 insert 方法

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_xml_20

测试insert

Mybatis教程|实战看这一篇,分分钟吊打面试官!!!_java_21



传统Dao 开发方式的分析

在前面例子中自定义Dao 接口实现类时发现一个问题:Dao 的实现类其实并没有干什么实质性的工作,它仅仅就是通过 SqlSession 的相关 API 定位到映射文件mapper 中相应 id 的 SQL 语句,真正对 DB 进行操作的工作其实是由框架通过mapper 中的 SQL 完成的。

所以,MyBatis 框架就抛开了Dao 的实现类,直接定位到映射文件mapper 中的相应 SQL 语句,对DB 进行操作。这种对Dao 的实现方式称为Mapper 的动态代理方式。

Mapper 动态代理方式无需程序员实现Dao 接口。接口是由 MyBatis 结合映射文件自动生成的动态代理实现的。


举报

相关推荐

0 条评论