当前位置: 首页 > news >正文

JPA的配置文件

一、引入包

 <dependencies>
        <!-- https://mvnrepository.com/artifact/org.hibernate.javax.persistence/hibernate-jpa-2.1-api -->
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.1-api</artifactId>
            <version>1.0.0.Final</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.8-dmr</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.17.Final</version>
        </dependency>

    </dependencies>

 

二、配置resources/META-INF/persistence.xml的书写

<?xml version="1.0" encoding="utf-8" ?>
<!--导入schema约束,此约束来源:复制hibernate-core:5.2.16.Final包下的/org/hibernate/jpa/persistence_2_0.xsd文件中的这一段出来即可。-->
<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:用于指定持久化单元的名称
        transcation-type:指定事务的类型。
                      JTA:Java Transcation API
                      RESOURCE_LOCAL:指的是本地代码事务
    -->

    <persistence-unit name="myPersistenceUnit" transaction-type="RESOURCE_LOCAL">
        <!--JPA规范提供商,可以不写-->
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <!--指定Jpa注解的实体类型位置,可以不写-->
        <class>com.demo.domain.Customer</class>
        <!--连接相关的一些配置,都是用hibernate的。-->
        <properties>
            <!--第一部分,连接数据库信息-->
            <property name="hibernate.connection.driver_class" value="com.mysql.cj.jdbc.Driver"></property>
            <property name="hibernate.connection.url" value="jdbc:mysql://127.0.0.1:3306/jpademodb?characterEncoding=utf8&amp;useUnicode=true&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai"></property>
            <property name="hibernate.connection.username" value="root"></property>
            <property name="hibernate.connection.password" value="123456"></property>
            <!--说明:数据库的方言,用于存放不同数据库之间的SQL语句差异。-->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL57Dialect"></property>

            <!--第二部分,hibernate的可选配置-->
            <!--是否显示hiberante的生成的SQL语句-->
            <property name="hibernate.show_sql" value="true"></property>
            <!--是否使用格式化输出SQL语句到控制台-->
            <property name="hibernate.format_sql" value="false"></property>
            <!--采用何种方式生成DDL语句,update表示检测实体类的映射配置与数据库表结构是否一致,不一致,则更新数据库。-->
            <property name="hibernate.hbm2ddl.auto" value="update"></property>
            <!--连接池的配置,这里使用的是c3p0连接池,常用的还有阿里的-->
            <property name="hibernate.connection.provider_class" value="org.hibernate.c3p0.internal.C3P0ConnectionProvider"></property>
        </properties>
    </persistence-unit>
</persistence>

 

三、实体类写法

package domains;


import org.hibernate.annotations.DynamicUpdate;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;

@Entity
@Table(name = "student")
@DynamicUpdate(true)
public class Student {

    @Id
    @GeneratedValue(generator = "uuid2")
    @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
    @Column(name = "id",length = 36)
    private String id;
    @Column(name = "name", length = 255)
    private String name;
    @Column(name = "age")
    private Integer age;
    @ManyToOne(targetEntity = Teacher.class)
    @JoinColumn(name = "teacherId", referencedColumnName = "id")
    private Teacher teacher;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Teacher getTeacher() {
        return teacher;
    }

    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }
}
package domains;

import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;

@Entity
@Table(name = "teacher")
public class Teacher {
    @Id
    @GeneratedValue(generator = "uuid2")
    @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
    @Column(name = "id",length = 36)
    private String id;
    @Column(name = "name", length = 255)
    private String name;

    @OneToMany(targetEntity = Student.class, mappedBy = "teacher")
    private Set<Student> students = new HashSet<Student>(0);

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set<Student> getStudents() {
        return students;
    }

    public void setStudents(Set<Student> students) {
        this.students = students;
    }
}

四、调用处

package business;

import domains.Teacher;

import javax.persistence.*;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        EntityManagerFactory entryManagerFactory = Persistence.createEntityManagerFactory("testdb-persistence-unit");
        EntityManager manager = entryManagerFactory.createEntityManager();
        Query query = manager.createNativeQuery("select * from student");
        List result = query.getResultList();
        System.out.println(result);
        EntityTransaction trans = manager.getTransaction();
        trans.begin();
        Teacher t = new Teacher();
        t.setName("李老师");
        manager.persist(t);
        trans.commit();
        manager.close();
    }
}

 

相关文章:

  • 简单了解JS中的几种遍历
  • Go语言中的反射机制reflect
  • 面试题:servlet jsp cook session 背1
  • linux下安装redis扩展
  • 总结:设计模式之Template Method模式
  • 深入浅出以太坊智能合约
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • 第一个博客,南沙的星星
  • IO创建Socket通信中慎用BufferReader中的readLine()
  • lambda表达式的简单入门
  • 提交表单且不刷新页面
  • selenium+python 优化测试报告
  • Kylin性能调优记——业务技术两手抓
  • 编译时
  • 详解PHP魔术函数、魔术常量、预定义常量
  • 5、React组件事件详解
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Java多态
  • Joomla 2.x, 3.x useful code cheatsheet
  • Just for fun——迅速写完快速排序
  • spark本地环境的搭建到运行第一个spark程序
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • TypeScript实现数据结构(一)栈,队列,链表
  • vuex 学习笔记 01
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • zookeeper系列(七)实战分布式命名服务
  • 包装类对象
  • 构建工具 - 收藏集 - 掘金
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 批量截取pdf文件
  • 使用Swoole加速Laravel(正式环境中)
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  •  一套莫尔斯电报听写、翻译系统
  • ionic入门之数据绑定显示-1
  • ionic异常记录
  • 阿里云API、SDK和CLI应用实践方案
  • 移动端高清、多屏适配方案
  • ​secrets --- 生成管理密码的安全随机数​
  • ​香农与信息论三大定律
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • ${ }的特别功能
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (二)构建dubbo分布式平台-平台功能导图
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (篇九)MySQL常用内置函数
  • (四) 虚拟摄像头vivi体验
  • (推荐)叮当——中文语音对话机器人
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)scrum常见工具列表
  • *Django中的Ajax 纯js的书写样式1
  • .Net CF下精确的计时器