hibernate 5.2.10 的使用

hibernate 5.2.10 的使用
* 全自动的ORM框架 位于持久层
* ORM的思想:将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作。 ORM
* 采用元数据来描述对象-关系映射细节, 元数据通常采用 XML 格式, 并且存放在专门的对象-关系映射文件中.
*
* hibernate 和myBatis区别?
* Hibernate: 非常优秀、成熟的 ORM 框架。 完成对象的持久化操作 Hibernate 允许开发者采用面向对象的方式来操作关系数据库。
* 消除那些针对特定数据库厂商的 SQL 代码
* myBatis: 相比 Hibernate 灵活高,运行速度快
* 开发速度慢,不支持纯粹的面向对象操作,需熟悉sql语 句,并且熟练使用sql语句优化功能
*
* 配置细节
* jar包 ,maven 工程,
*
org.hibernate
hibernate-core
5.2.10.Final

    获取 sessionFactory 的方式也有了较大的变化
    StandardServiceRegistry  标准注册服务 

    hibernate 的开发步骤 

    1 实体类 --> .hbm.xml(这两个文件是对应的,一个是实体类 , 一个是数据库的映射)
    --> hibernate.cfg.xml (hibernate的配置文件 )
 * 
 * hibernate.cfg.xml中
 *   <!-- 需要配置数据库方言 -->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
 *      5.2.10 需要选择这个版本的方言,或者不配置 ,不然会报错, 
 *      选这个方言,在建表时会采用InnoDB 引擎 ,支持事务
 *      
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.youv.app.yang.domain.user.User;

public class Crud {

    Session session = null;
    Transaction transaction = null;

    @Before
    public void befoer() {
        // 1,先得到session工厂
        SessionFactory sessionFactory = null;
        // 2 创建标准服务注册对象, .configure() 不指定文件,默认取类路径下的 hibernate,cfg.xml
        StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure("hyang.cfg.xml")
                .build();
        // 3 获取session工厂
        sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
        session = sessionFactory.openSession();
        transaction = session.beginTransaction();
    }

    @After
    public void fin() {
        session.close();
    }

    /**
     * 面向对象编程, 对实体类进行操作,hibernater 自动执行
     *
     * 增 session.save();
     *  删 先将数据取出,然后再删除 session.delete(对象)
     *  改 先将数据取出,然后再更改 session.update(对象);
     *  查 get() , load();
     */

    @Test
    public void add() {
        User user = new User();
        user.setUserName("李三");
        user.setUserPsw("2343");
        session.save(user);
        transaction.commit();
    }

    @Test
    public void del() {
        // 1 根据id获取对像
        User user = session.get(User.class, "402881e85d73d1bf015d73d1c25b0000");
        // 然后删除对象
        session.delete(user);
        transaction.commit();
    }

    @Test
    public void update() {
        // 1 根据id获取对像
        User user = session.get(User.class, "402881e85d73d332015d73d335e80000");
        // 然后对对象进行修改
        user.setUserName("二狗");
        session.update(user);
        transaction.commit();
    }

    /**
     * 获取数据 ,有两种方式 1 get , 2 load
     * 
     * 1.get()采用立即加载方式,而load()采用延迟加载; get()方法执行的时候,会立即向数据库发出查询语句,
     * 而load()方法返回的是一个代理(此代理中只有一个id属性),只有等真正使用该对象属性的时候,才会发出sql语句 2
     * .如果数据库中没有对应的记录,get()方法返回的是null.而load()方法出现异常ObjectNotFoundException
     * 
     */
    @Test
    public void get() {
        User user = session.get(User.class, "402881e85d73d332015d73d335e80000");
        User user1 = session.load(User.class, "402881e85d73d332015d73d335e80000");
        System.out.println(user);
        System.out.println(user1);
        // user1 的不会有执行语句, 因为两个方法获取的是同一对象, load 不会去查数据库
        // 而是会去查缓存 session 是一级缓存

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值