一、基本概念和介绍
数据持久化的概念
数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。例如,文件的存储、数据的读取等都是数据持久化操作。数据模型可以是任何数据结构或对象模型、XML、二进制流等。
当我们编写应用程序操作数据库,对表数据进行增删改查的操作的时候就是数据持久化的操作。
Mybatis框架简介
MyBatis框架是一个开源的数据持久层框架。它的内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis作为持久层框架,其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件当中,实现SQL的灵活配置。这样做的好处是将SQL与程序代码分离,可以在不修改代码的情况下,直接在配置文件当中修改SQL。
ORM
ORM(Object/Relational Mapping)即对象关系映射,是一种数据持久化技术。它在对象模型和关系型数据库直接建立起对应关系,并且提供一种机制,通过JavaBean对象去操作数据库表的数据,如下图。
在我们实际的开发当中,我们使用对象的技术操作数据库,而当存储数据时,使用的却是关系型数据库,这样造成了很多的不便。ORM在对象模型和关系型数据库的表之间建立了一座桥梁。有了ORM,我们就不用再使用SQL语句操作数据库中的表,使用API直接操作JavaBean对象就可以实现数据的增删改查等的操作。MyBatis通过简单的XML或者注解的方式进行配置和原始映射,将实体类和SQL语句之间建立映射关系,是一种半自动(之所以说是半自动,因为我们要自己写SQL)的ORM实现。
二、MyBatis框架的优缺点及其适用的场合
MyBatis的优点
(1)与JDBC相比,减少了50%以上的代码量。
(2)MyBatis是最佳的持久层框架,小巧并且简单易学。
(3)MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML文件里,从程序代码中彻底分离,降低耦合度,便于统一的管理和优化,并可重用。
(4)提供XML标签,支持编写动态的SQL,满足不同的业务需求。
(5)提供映射标签,支持对象与数据库的ORM字段关系映射。
MyBatis的缺点
(1)SQL语句的编写工作量较大,对开发人员编写SQL的能力有一定的要求。
(2)SQL语句依赖于数据库,导致数据库不具有好的移植性,不可以随便更换数据库。
MyBatis框架的适用场合
MyBatis专注于SQL自身,是一个足够灵活的DAO层解决方案。对性能的要求很高,或者需求变化较多的项目,例如Web项目,那么MyBatis是不二的选择。
三、实操(简单例子)
目的:通过MyBatis实现对我数据库中已经存在的表进行操作,包括向表中插入、修改、查询和删除数据。
1.准备数据库和表
create database if not exists my_test charset utf8;#创建数据库my_test
use my_test; #使用数据库
create table student(Id int primary key auto_increment,Name varchar(20),Age int,Gender char(10)); #创建表student
可以看到现在数据库中已经有表student了,但是表示空的。
2.下载MyBatis需要的jar文件
通过github下载,下载地址是 https://github.com/mybatis/mybatis-3/releases,我选择的是3.4.5的版本,注意要根据自己的jdk来选择,可能高版本的不符合。
下载mysql数据库驱动jar文件,下载地址是 http://central.maven.org/maven2/mysql/mysql-connector-java
3.在Eclipse中新建JavaWeb项目,在lib目录下导入下载好的jar
4.创建MyBatis的核心配置文件,mybatis-config.xml,内容如下。其中mysql.properties 文件是引入的,在该文件内配置的是数据库相关的信息,包括数据库驱动、链接数据库的url、数据库用户名和密码。
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
接着,配置 mysql.properties文件,内容如下
Driver=com.mysql.jdbc.DriverUrl=jdbc:mysql:///my_test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=falseUsername=rootPassword=root
5.定义实体类,这里的变量和数据库的字段是相对应的,以及生成有参构造方法
1 package com.ydy.entiy; 2 3 import java.io.Serializable; 4 5 public class Student implements Serializable{ 6 7 /** 8 * 9 */10 private static final long serialVersionUID = 1L;11 private int Id;12 private String Name;13 private int Age;14 private String Gender;15 public Student(String name, int age, String gender) {16 super();17 Name = name;18 Age = age;19 Gender = gender;20 }21 public Student(int id, String name, int age, String gender) {22 super();23 Id = id;24 Name = name;25 Age = age;26 Gender = gender;27 }28 public String toString() {29 return "Student [Id=" + Id +