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();

 

}

 

}

 

  项目结构

posted on 2018-01-31 18:44  東風★破  阅读(139)  评论(0)    收藏  举报

导航