自我控制是最强者的本能。——萧伯纳
目录
Mybatis简介
什么是Mybatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
也就是说MyBatis通过一些配置后,只需要关注SQL语句即可,而不用花费大量的时间精力去编写一些复杂的重复的代码,如:注册驱动,获取连接,获取传输器,处理结果集等等。这一切得复杂的代码都被MyBatis给封装集成了,大大的减少了开发过程中的代码量与出错的概率。
总结:Mybatis对JDBC访问数据库的过程进行了封装,简化了JDBC代码,解决JDBC将结果集封装为Java对象的麻烦。
为什么使用Mybatis
Mybatis对JDBC访问数据库的过程进行了封装,那么在不使用Mybatis的情况下,JDBC是如何的呢?
使用传统方法访问数据库
(1)使用JDBC访问数据库有大量重复代码(比如注册驱动、获取连接、获取传输器、释放资源等);
(2)JDBC自身没有连接池,会频繁的创建连接和关闭连接,效率低;
(3)SQL是写死在程序中,一旦修改SQL,需要对类重新编译;
(4)对查询SQL执行后返回的ResultSet对象,需要手动处理,有时会特别麻烦;
使用Mybatis
(1)Mybatis对JDBC对了封装,可以简化JDBC代码;
(2)Mybatis自身支持连接池(也可以配置其他的连接池),因此可以提高程序的效率;
(3)Mybatis是将SQL配置在mapper文件中,修改SQL只是修改配置文件,类不需要重新编译。
(4)对查询SQL执行后返回的ResultSet对象,Mybatis会帮我们处理,转换成Java对象。
由上面可以看出,JDBC中的问题(复杂的代码,连接的创建,结果集的处理)几乎都被Mybatis解决了。
Mybatis的架构
(1)mybatis-config.xml是Mybatis的核心配置文件,通过其中的配置可以生成SqlSessionFactory,也就是SqlSession工厂
(2)基于SqlSessionFactory可以生成SqlSession对象
(3)SqlSession是一个既可以发送SQL去执行,并返回结果,类似于JDBC中的Connection对象,也是Mybatis中至关重要的一个对象。
(4)Executor是SqlSession底层的对象,用于执行SQL语句
(5)MapperStatement对象也是SqlSession底层的对象,用于接收输入映射(SQL语句中的参数),以及做输出映射(即将SQL查询的结果映射成相应的结果)
了解了这些,那就往下看看Mybatis如何使用吧。
Mybatis入门
准备数据
在此呢,以代码为例进行展示
创建数据库、创建表、并插入数据
1、创建数据库
create database if not exists userdb charset utf8;--userdb数据库不存在的话创建,指定编码utf8
use userdb; -- 选择userdb数据库
2、如果存在user表的话删除
drop table if exists user;
3、创建user表
create table user(
id int primary key auto_increment,
name varchar(50),
job varchar(50),
age int
);
4、插入数据
insert into user values(null, '张飞', '匹夫', 22);
insert into user mp values(null, '刘备', '老大', 29);
insert into user values(null, '关羽', '马夫', 24);
insert into user values(null, '赵子龙', '愣头青', 25);
insert into user values(null, '华雄', '小喽啰', 18);
数据都是乱写的,莫要认真哈
创建工程
1、创建Maven的Java工程
2、导入Junit、mysql、mybatis等开发包
<dependencies>
<!-- junit单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<!-- 整合log4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.4</version>
</dependency>
</dependencies>
3、创建测试类并提供一个方法
编写实体类User
此处需要注意一点:实体类的属性名应该与数据库表的字段名一致,不然会出现错误。
当然表的字段名不推荐使用驼峰,两个字母之间使用下划线连接,而实体类的属性是驼峰规则,此时,就需要有额外的配置使得属性名与字段名相匹配。(这个方法此处就不多说了,百度,不止一种方法)
package com.demo.pojo;
import java.io.Serializable;
/*
* 实体类用于封装数据库中的每一条信息
* 为了防止信息丢失,一般都会实现序列化
*/
public class User implements Serializable{
private static final long serialVersionUID = -2261716295130942575L;
//声明实体类的属性
private Integer id;