jap笔记

一、   jpa映射单个对象

1.右键项目,选择myeclipse,添加Jpa支持

2.添加之后,在src下面会生成一个META-INF 文件夹

   编写里面的persistence.xml文件

   创建相应的数据库

<persistence-unitname="jpaPU"transaction-type="RESOURCE_LOCAL">
   <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <properties>
        <propertyname="hibernate.dialect"value="org.hibernate.dialect.MySQLDialect"/>
        <propertyname="hibernate.connection.driver_class"value="com.mysql.jdbc.Driver"/>
        <propertyname="hibernate.connection.url"value="jdbc:mysql:///db_39"/>
        <propertyname="hibernate.connection.username"value="root"/>
        <propertyname="hibernate.connection.password"value="eminem"/>   
        <propertyname="hibernate.hbm2ddl.auto"value="create"/>
        <propertyname="hibernate.show_sql"value="true"/>
      </properties>
   </persistence-unit>

 

3.实体User里面

/*
 * @Entity 告诉数据库是放在数据库里面
 * @Table 对应的是什么表。也可以不写,不写的话就是和类命一样
 * @Id  说明是主键
 * @GeneratedValue()  括号里面不写值会自动选择一个主键策略相当于hibernate里面的native
 *              strategy=GenerationType. 点出对应的策略
 * @Column()          里面的值有   nullable=true  是否为空
 *                   name=""  对应的数据库里面的列名
 *                   unique=true  唯一
 */

@Entity
@Table(name="user")
publicclass User {

   @Id
   @GeneratedValue()
   privateintid;
   private Stringname;
   private Datebirthday;

   publicint getId() {
      returnid;
   }

   publicvoid setId(int id) {
      this.id = id;
   }

   public String getName() {
      returnname;
   }

   publicvoid setName(String name) {
      this.name = name;
   }

   public Date getBirthday() {
      returnbirthday;
   }

   publicvoid setBirthday(Date birthday) {
      this.birthday = birthday;
   }
}


4.工具类里面JpaUtil

publicfinalclass JpaUtil {

   privatestatic EntityManagerFactoryemf;
  
   static {
      //jpaPU 对应的是persistence.xml里面的persistence-unit的name的值
      emf =Persistence.createEntityManagerFactory("jpaPU");
   }
  
   publicstatic EntityManager getEntityManager(){
      returnemf.createEntityManager();
   }
}


5.测试,添加数据,编写测试类JpaTest

 

publicclassJpaTest{
   publicstaticvoid main(String[] args) {
      User user  = new User();
      user.setBirthday(new Date());
      user.setName("james");
      addUser(user);
   }
   static void addUser(User user){
        EntityManager em = null;
        EntityTransaction tx = null;
        try{
           em = JpaUtil.getEntityManager();
           tx = em.getTransaction();
           tx.begin();
           em.persist(user);
           tx.commit();
        }finally{
           if(em!=null){
              em.close();
           }
        }
   }
}


 

 

 

 

 

 

二、   jpa映射关联与继承

1.多这一方Employee(父类)

 

/*

 * SINGLE_TABLE,一张表映射一颗继承树     确定采用单表策略

 * @DiscriminatorColumn 配置鉴别器。鉴别器的名称为type

 * @DiscriminatorValue  设置鉴别器的值

 */

@Entity

@Inheritance(strategy=InheritanceType.SINGLE_TABLE)

@DiscriminatorColumn(name="type")

@DiscriminatorValue("0")

 

publicclass Employee {

   @Id

   @GeneratedValue

   privateintid;

   private Stringname;

   @ManyToOne()

   private Departmentdepart;

 

   省略相关setget方法

}


2.子类 Skiller

@Entity

@DiscriminatorValue("1")

publicclass SkillerextendsEmployee{

   private Stringskill;

 

   public String getSkill(){

   returnskill;

   }

   publicvoid setSkill(String skill){

   this.skill = skill;

   }

}


3.一这一方 Department

@Entity
publicclass Department {
   @Id
   @GeneratedValue
   privateintid;
   private Stringname;

   /*
    * targetEntity  目标实体是什么
    * cascade       级联
    * CascadeType   你需要什么方法级联,就选择
    * fetch      抓取策略    FetchType.LAZY  延迟加载
    * mappedBy   值对应的是Employee里面的Department属性名
    */
   @OneToMany(targetEntity = Employee.class, cascade = { CascadeType.MERGE,
        CascadeType.PERSIST }, fetch = FetchType.LAZY, mappedBy = "depart")
   privateSet<Employee>emps;

   对应的setget方法省略

}


4.添加方法至 JpaTest 修改main

staticvoid addDepart(){
      EntityManager em = null;
      try{
        em = JpaUtil.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();     
        Department depart = new Department();
        depart.setName("技术部");      
        Skiller emp1 = new Skiller();
        emp1.setDepart(depart);
        emp1.setName("张三");
        emp1.setSkill("c");
      
        Employee emp2 = new Employee();
        emp2.setDepart(depart);
        emp2.setName("李四");
      
        Set<Employee> emps = new HashSet<Employee>();
        emps.add(emp2);
        emps.add(emp1);
        
        depart.setEmps(emps);
      
        em.persist(depart);
        tx.commit();
      }finally{
        if(em!=null){
           em.close();
        }
      }
   }
   publicstaticvoid main(String[] args) {
      addDepart();
   }


Department表里面的数据

                             1             技术部

Employee表里面的数据

                             1             1             张三                c                     1

                             0             2             李四               null                  1

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值