Spring的 date JPA系列 :01

#### ORM 思想的框架的额 认知 : #####
----- 类似 操作数据库 的 java 连接数据库conection 代码的演示
Springdata

问题的分析:

—期望 : 调用对象 去完成 的 操作 数据库
==== 用ORM 解决的思路:
操作实体类就相当于 操作数据库表 – 对象的引用 打点 调用方法
***: 建立 2个关系的 映射:
实体类和表的映射关系
实体类中属性和表中字段的映射关系
基于ORM 思想的 的 框架:myBatis 与 Hibernate
java语言 的 都是 基于 JDBC的 模式 Connection 来 操作数据库 的

之前---- MyBatise 框架:算是半个 ORM 框架 是的, 还是自己写的额sql  语句 的额  :   所以 他是 
之前---- Hibernate 框架 它对JDBC进行了非常轻量级的对象封装,将POJO与数据库表建立映射关系,是一个全自动的orm框架

1:每次的操做 都要使用
2:占位符赋值 麻烦 如何解决

****===== 重点的 主角是 ORM: 对象 的 关系映射:
关键点的是 ===========》 反射

ORM 的实现 ---- 当最后 我们说到的是 Hibernate 的 :面向接口开发里 就 可以灵活 的
------===== JPA的=====-----
===*** 因为 有 JPA的ORM规范 来解决 面向接口的规范 ,来解决
------- 我们 实际开发中的是 面向接口的开发的 优势原因的是:

 一个Hibernate框架 的 用SSH 很火的 倒逼 sun公司推出来 的 JPA接口 、来解耦各个 框架就行

到入的约束 的 复制 :了

各个 数据库 之间 会有的 不同的事务啊 所以就要用 -------- 分布式的JPA 的
JPA的实现方式
1: persistence_unit:有一个持久化是的单元 名称 : myJpa
2: JPA的实现方式 :provider
3: 核心的配置软件 :propertise>
—连接数据库的 信息 property name="" 4个 属性 是JPA 指定方式是
**** :映射 我们调用的是注解 来配置的
========入

门案例:创建maven工程导入坐标

无需 依赖 archetype 的 maven 额的 项目 并到入 是 坐标



junit
junit
4.12
test

    <!-- hibernate对jpa的支持包 -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>${project.hibernate.version}</version>
    </dependency>

    <!-- c3p0 -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-c3p0</artifactId>
        <version>${project.hibernate.version}</version>
    </dependency>

    <!-- log日志 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

    <!-- Mysql and MariaDB -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>
</dependencies>

创建 与配置jpa的核心配置文件

1:在resource 里创建 的 META-INF 里 继续创建的是propertise.xml 的
***************在IDEA里就有 模板 的 : 如何找到模板: 点击光标在当前要改的—鼠标右键 new---- Edit File Template ---- 就会点出的Other里 找到API 点出 Deployment descriptors下面 里的 就有 perisstence_2_0.xml:
2:<?xml version="1.0" encoding="UTF-8"?>





org.hibernate.jpa.HibernatePersistenceProvider

    <properties>
        <property name="javax.persistence.jdbc.user" value="root"/>
        <property name="javax.persistence.jdbc.password" value="root"/>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql:///jpa"/>
        <!--是否打印SQL show-->
        <property name="hibernate.show_sql" value="true" />
        <!--是否格式化SQL format-->
        <property name="hibernate.format_sql" value="true" />
        <!--DDL语句设置
       create: 有表 , 程序运行在创建 ,先删再建
        自动更新 update
        none :不会创建表 null:
        ===== 我们先从 create  在试制 update 
        -->
        <property name="hibernate.hbm2ddl.auto" value="update" />
    </properties>
</persistence-unit>

----- 配置的 是 :
之间的注解: 主键 生成 策略: mysql 有主键自增 Oracle 的是 序列, 还有自己写的额

。。。: 注意 在有坐标的额 时候 一定要 下载 在有网的 时候 =点击 “环形箭头”刷新 即可;(干菜打字的 hibernate报红 )

creste:直接的就创建 了
update: 有表 就更新 ------- 就 创建 新的表 :
none : 可 为 空

========

代码 展示

package com.fhw.domain;

import javax.persistence.*;

/**

  • 编者:封红卫
  • @Classname Customer
  • @Description TODO
  • @Date 2019/2/12 19:32
  • @Created by Administrator
  • ====== 使用 配置 映射关系
    1: 实体类与 表的关系 :javax.persistence.Entity;
    @Entity : 声明实体类
    @Table(name=“cst_customer”) : 配置实体类与表 映射关系
    ---- 参数:name=""就是 配置数据库表的 名称 ;
    2: 实体类中属性与 表中 的字段的 映射关系
    ==。。。:注意:实体类的配置,表名和属性名的映射可以省略,但是@Id和@Entity的配置不能省略
    ---- 也就是可以通过 主键id 属性 的唯一 来查找
    /
    @Entity
    @Table(name=“cst_customer”)
    public class Customer {
    /
    实体类的是
    ‘客户名称(公司名称)’,
    ‘客户信息来源’,
    ‘客户所属行业’,
    ‘客户级别’,
    ‘客户联系地址’,
    ‘客户联系电话’,

/
/

* @Id//声明当前私有属性为主键
@GeneratedValue(strategy= GenerationType.IDENTITY)//配置主键我自增的
*/
@Id//声明当前私有属性为主键
@GeneratedValue(strategy= GenerationType.IDENTITY)//配置主键的生成策略
@Column(name=“cust_id”) //指定和表中cust_id字段的映射关系
private long custId;
@Column(name=“cust_name”)//指定和表中cust_id字段的映射关系
private String custName;
@Column(name=“cust_source”)//…如上一行
private String custSource;//客户信息来源
@Column(name="cust_industry ")//…如上一行
private String custIndustry;//客户所属行业
@Column(name=“cust_level”)//…如上一行
private String custLevel;//'客户级别
@Column(name=“cust_address”)//…如上一行
private String custAddress;//联系地址
@Column(name=“cust_phone”)//…如上一行
private String custPhone;//联系电话

public long getCustId() {
    return custId;
}

public void setCustId(long custId) {
    this.custId = custId;
}

public String getCustName() {
    return custName;
}

public void setCustName(String custName) {
    this.custName = custName;
}

public String getCustSource() {
    return custSource;
}

public void setCustSource(String custSource) {
    this.custSource = custSource;
}

public String getCustIndustry() {
    return custIndustry;
}

public void setCustIndustry(String custIndustry) {
    this.custIndustry = custIndustry;
}

public String getCustLevel() {
    return custLevel;
}

public void setCustLevel(String custLevel) {
    this.custLevel = custLevel;
}

public String getCustAddress() {
    return custAddress;
}

public void setCustAddress(String custAddress) {
    this.custAddress = custAddress;
}

public String getCustPhone() {
    return custPhone;
}

public void setCustPhone(String custPhone) {
    this.custPhone = custPhone;
}

}
测试:

package com.fhw.test;

import com.fhw.domain.Customer;
import org.junit.Test;

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

/**

  • 编者:封红卫
  • @Classname JapTest
  • @Description TODO
  • @Date 2019/2/12 20:51
  • @Created by Administrator
  • 测试 jpa的保存 步骤
  • 1:加载配置文件 创建工厂( 实体管里类 ) 对象
  • 2:通过实体管理器工厂 获取实体管理器
  • 3:获取事务对象 , 开启事务
  • 4:完成 增删改查
  • 5: 提交事务
  • 6:释放资源
  • 案例 : 保存
    

*/
public class JapTest {
@Test
public void testSave(){
// 1:加载配置文件 创建工厂( 实体管里类 ) 对象
EntityManagerFactory factory = Persistence.createEntityManagerFactory(“myJpa”);
// 2:通过实体管理器工厂 获取实体管理器
EntityManager em = factory.createEntityManager();
// 3:获取事务对象 , 开启事务
EntityTransaction tc = em.getTransaction();
tc.begin(); // begin () 开启事务
// 4:完成 增删改查
Customer customer = new Customer();
customer.setCustName(“封红卫”);
customer.setCustIndustry(“演示javaJAP”);
//保存 传参封装即可
em.persist(customer);
// 5: 提交事务
tc.commit();
// 6:释放资源
em.close();
factory.close();

}

}

Spring的 date JPA系列 :01

导入

如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。