4.17 MyBatis
4_17

MyBatis回顾

ORM介绍
1.Hibernate框架的作用:
-- 能让程序员以面向对象的方式来操作数据库,从而简化持久层的开发。
-- 它底层可以跨数据库. (程序人员开发项目不用关心项目用得是什么数据库).
2.ORM:Object Relation Mapping 对象关系映射.
-- Object: 对象指得是面向对象的编程语言.
-- Relation: 关系指得是关系型数据库.
-- Mapping: 面向对象的编程语言与关系型数据库之间的映射.
3.ORM思想:它是用来解决面向对象的编程语言与关系型数据库之间的映射.
-- ORM它只是一种思想,不是指具体的某个框架.
-- ORM框架:Hibernate5、TopLink、JDO等.
MVC: Model View Controller 它也是一种思想,不是指具体的某个框架.
具体实现框架: webwork、Struts1、Struts2、SpringMVC.
4.JPA:Java Persistence Api (java持久化api).
-- JPA 与 ORM 之间的关系:
JPA是sun公司根据ORM思想制订出来的持久化层的规范.(提供了一套标准的持久化api)

JDBC: Java DataBase Connection java数据库连接的规范.
JDBC它是sun为各个数据库厂商制订的连接数据库的规范.(提供了一套标准的数据库连接api).

-- JPA的实现商:Hibernate、TopLink、JDO等.
由于JPA出现的时间比Hibernate晚,所以我们既要学习Hiberante框架,又要学***A.
目前企业一般用JPA的注解来写持久化类,所以我们只学***A注解持久化类部分的内容。
5.ORM映射思想:
面向对象的编程语言(java) 关系型数据库
类 表
对象 一行数据
属性 列名
Hibernate介绍
Hibernate是目前最流行的ORM框架,同时也是JPA的实现商。
框架下载:
-- 它的官方网站:http://www.hibernate.org
-- Hibernate5最新版本:5.*.Final
-- 它属于Jboss公司的产品.
-- 下载hibernate-release-5.*.Final.zip压缩包.
hibernate目录结构
解压后文件夹说明:

-- documentation : 全部的文档
-- mappingGuide : 映射指南.
-- javadocs : api文档.
-- userGuide : 用户指南.
-- quickstart : 快速开始.
-- lib: 存放了所有的jar(第三方的、自己的).
-- required : 必须要的jar.
-- jpa : jpa实现的jar.
-- optional: 可选的.
-- c3p0 : 连接池(现在企业用得最多的连接池).
-- ehcache : 缓存框架.
-- proxool : 连接池.
-- project : 存放了Hibernate框架的源码、测试用例、资源文件、示例.
-- project/etc : 存放了配置文件的模版.
快速入门
第一步:拷贝jar
-- lib\required\所有jar包
-- lib\jpa\所有jar包
-- lib\optional\c3p0\所有jar包
-- mysql驱动
注意:hibernate5已经支持JDK8的,但也兼容JDK6
如果需要使用JDK8,需要配套添加hibernate_java8.jar即可
第二步:写全局的配置文件.
src/hibernate.cfg.xml
cfg: configuration
第三步:写持久化类(普通的javaBean + jpa注解)
第四步:hibernate编程
-- Configuration
-- SessionFactory
-- Session
-- Transaction
环境搭建(基于XML方式)
导入jar包
lib\required\所有jar包
-- antlr-2.7.7.jar
-- dom4j-1.6.1.jar
-- geronimo-jta_1.1_spec-1.1.1.jar
-- hibernate-commons-annotations-5.*.Final.jar
-- hibernate-core-5.*.Final.jar
-- hibernate-jpa-2.1-api-1.0.0.Final.jar
-- jandex-1.2.2.Final.jar
-- javassist-3.18.1-GA.jar
-- jboss-logging-3.3.0.Final.jar
lib\jpa\所有jar包
-- hibernate-entitymanager-5.*.Final.jar
lib\optional\c3p0\所有jar包
-- c3p0-0.9.2.1.jar
-- hibernate-c3p0-5.*.Final.jar
-- mchange-commons-java-0.2.3.4.jar
注意:hibernate5已经支持JDK8的,但也兼容JDK6
如果需要使用JDK8,需要配套添加lib\java8\hibernate-java8-5.*.Final.jar即可
mysql驱动
-- mysql-connector-java-5.1.37.jar
配置hibernate.cfg.xml文件
该配置文件可以参考:
-- project\etc\hibernate.cfg.xml
-- project\etc\hibernate.properties (全局属性配置模版)
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 数据库方言(告诉Hibernate4项目用到是什么数据库)
如果使用的mysql5数据库版本在5.5之后的话,方言通常建议使用MySQL5InnoDBDialect
MySQLDialect 不支持事务
MySQLInnoDBDialect 支持事务
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<!-- 配置是否支持自动创建表(不要指望Hibernate创建数据库)
create-drop 在创建SessionFatory时候就会自动创建数据库表,当SessionFatory关闭的时候会将创建的表删除
create 每次创建SessionFactory时先删除上次创建的数据库中表,然后再创建对应数据库表。
update 每次创建SessionFactory时先检查是否已有数据库表,如果没有表就会自动创建表,
如果有表就会修改的表,但是不会影响原来的数据 (通常用这个)
validate 每次创建SessionFactory的时候会验证表结构。
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 显示SQL语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化SQL语句(配置了show_sql属性才生效) -->
<property name="hibernate.format_sql">true</property>
<!-- 数据库驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 连接数据库url-->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_db</property>
<!-- 连接数据库用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 连接数据库密码 -->
<property name="hibernate.connection.password">root</property>
<!-- 配置最大连接数 -->
<property name="hibernate.c3p0.max_size">10</property>
<!-- 配置最小连接数 -->
<property name="hibernate.c3p0.min_size">2</property>
<!-- 配置持久化类 -->
<mapping class="com.yayadou.domain.Person"/>
<mapping resource="com/yayadou/domain/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
写持久化的类
持久化类 = pojo + xxx.hbm.xml.(旧的方式)
持久化类 = pojo + annotation注解. (@Entity)
普通的pojo + User.hbm.xml
pojo: Plain Old Java Object 最简单最传统的java对象.
写pojo类时要注意下面四点:
-- 必须有一个无参的构造器.
-- 所有的属性必须有setter与getter方法.
-- 所有的属性不能用final修饰.
-- 必须有一个唯一的标识属性.(生成表中的主键列).
xxx.hbm.xml文件模版位置:
hibernate-release-5.*.Final\project\hibernate-core\src\test\resources\org\hibernate\test\annotations\Boat.hbm.xml.
User类
package com.yayadou.domain;
/**
* User
*/
public class User {
private Integer id;
private String name;
private String phone;
/** setter and getter method */
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
User.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.yayadou.domain">
<class name="User" table="t_user">
<!-- id属性作为表的主键列,列名为user_id -->
<id name="id" column="user_id">
<!-- 指定主键生成策略 native指定让hibernate5根据方言自己选择数据库相关生成器-->
<generator class="native"/>
</id>
<!-- name属性作为表中的user_name列 -->
<property name="name" column="user_name"/>
<!-- phone属性作为表中的user_phone列 -->
<property name="phone" column="user_phone"/>
</class>
</hibernate-mapping>
写测试类
开发步骤:
1.创建Configuration配置信息对象
2.创建SessionFactory
3.获取Session
4.开启事务Transaction
5.调用Session的方法完成所有的持久化操作
6.事务提交commit()或回滚rollback()
7.关闭Session与SessionFactory
UserTest原来的方式
public static void main(String[] args) {
//1:创建Configuration
Configuration configuration = new Configuration() // 加载hibernate.properties
.configure(); // 加载hibernate.cfg.xml
//2:创建SessionFactory (它底层封装了数据源DataSource)
SessionFactory sessionFactory = configuration.buildSessionFactory();
//3:创建Session (它底层封装了数据库连接Connection)
Session session = sessionFactory.openSession();
//4:开启事务得到事务对象
Transaction t = session.beginTransaction();
User u = new User();
u.setName("hanfeili");
u.setPhone("13688888888");
//5 将对象u保存到数据库表中
session.save(u);
//6.事务提交commit()或回滚rollback()
t.commit();
//7.关闭session与SessionFactory
session.close();
sessionFactory.close();
}
UserTest类
package com.yayadou.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import com.yayadou.domain.User;
/**
* UserTest
*/
public class UserTest {
public static void main(String[] args) throws Exception {
/** 第一步:创建Configuration */
Configuration configuration = new Configuration() // 默认加载hibernate.properties属性文件
.configure(); // 默认加载hibernate.cfg.xml文件
//配置需要加载操作的类
configuration.addClass(User.class);
/** 第二步:创建注册服务对象 */
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties()).build();
/** 第三步:创建SessionFactory */
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
/** 第四步:获取Session */
Session session = sessionFactory.openSession();
/** 第五步:开启事务,获取事务对象 */
Transaction transaction = session.beginTransaction();
/** 第六步:调用Session的方法完成所有的持久化操作 */
User u = new User();
u.setName("hanfeili");
u.setPhone("13688888888");
// 将对象u保存到数据库表中
session.save(u);
/** 第七步:事务提交commit()或回滚rollback() */
transaction.commit();
/** 第八步:关闭Session与SessionFactory */
session.close();
sessionFactory.close();
}
}
项目结构

浙公网安备 33010602011771号