hibernate

本文介绍如何使用Hibernate进行对象关系映射,包括添加依赖、配置环境、定义实体类及测试方法等步骤,帮助读者快速掌握Hibernate的基本用法。


Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用

1.添加依赖

hibernate的包
   <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.4.30.Final</version>
    </dependency>
 hibernate所使用的连接池
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-c3p0</artifactId>
        <version>5.4.30.Final</version>
   </dependency>

2.配置

resources中创建文件夹META-INF中创建一个persistence.xml文件


<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
             version="2.0">
    <!--配置持久化单元。name持久化单元名称,transaction-type事务类型,值RESOURCE_LOCAL表示本地事务管理,JTA表示分布式事务管理 -->
    <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
        <!--配置JPA规范的服务提供商 -->
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>com.yan.entity.UserBean</class>
        <properties>
            <!-- 数据库驱动 -->
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <!-- 数据库地址 -->
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC"/>
            <!-- 数据库用户名 -->
            <property name="javax.persistence.jdbc.user" value="root"/>
            <!-- 数据库密码 -->
            <property name="javax.persistence.jdbc.password" value="123456"/>
            <!--jpa提供者的可选配置:JPA规范的提供者为hibernate,所以jpa的核心配置中兼容hibernate的配置 -->
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
        </properties>
    </persistence-unit>
</persistence>

3.定义实体类

import lombok.Data;
import org.hibernate.annotations.DynamicInsert;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
@Data
@Entity //JPA中的注解,用于声明当前类是一个实体类
@Table(name="t_users")//配置当前类所对应的表名称
@DynamicInsert  //支持动态插入操作,不插入null属性值
public class UserBean implements Serializable {
    @Id  //声明标识属性---主键
    @GeneratedValue(strategy= GenerationType.IDENTITY)  //声明主键的生成机制  auto_increment
    private Long id;  //标识属性
    @Column(length = 32,nullable = false,unique = true) //声明username属性所对应的列
    /*
    name用于定义列名称,如果和属性名一致则无需配置
    length是针对String类型的长度配置,nullable是否允许为空,unique用于配置唯一性约束
     */
    private String username;
    @Column(length = 32,nullable = false)
    private String password;
    @Column(columnDefinition = "datetime default now()")
    //columnDefinition用于配置这个列的创建DDL,和当前数据库耦合
    private Date birth;
    @Column(columnDefinition = "boolean default 1")
    private Boolean sex;
    @Column(precision=8,scale=2)
    private Double salary;
}

4.测试

import com.yan.entity.UserBean;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

public class A1 {
    public static void main(String[] args) {
        //创建实体管理类工厂,借助Persistence的静态方法获取。其中传递的参数为持久化单元名称,需要jpa配置文件中指定
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
        //通过实体管理器工厂创建对应的实体管理器,所谓的实体管理器实际上用于提供CRUD方法
        EntityManager em=factory.createEntityManager();
        //一般的ORM框架默认对修改提供的是回滚操作,所以如果需要修改生效,则必须手动提交事务
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        //创建实体对象
        UserBean ub=new UserBean();
        ub.setUsername("yanjun");
        ub.setPassword("123456");
        em.persist(ub);
        tx.commit();  //提交事务,使修改生效;如果需要撤销操作,则不提交事务或者手工回滚tx.rollback();
        em.close();
        factory.close();
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值