ruijiege

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

JPA概念

Java Persistence API:是一种规范(接口),这里我们使用hibernate去实现JPA

JPA使用步骤

1导包

在pox.xml中配置我们需要的东西

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>jpa</artifactId>
        <groupId>cn.jiedada</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>jpa_day01</artifactId>
    <dependencies>
        <!--配置JPA的核心配置-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.8.Final</version>
        </dependency>
        <!--配置JPA的实现类的包-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.8.Final</version>
        </dependency>
        <!--配置数据库驱动连接-->
        <dependency>
               <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.6</version>
         </dependency>
        <!--junit测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

    </dependencies>

</project>
View Code

 

2.设置配置文件

在资源文件中配置

 

 

 

 制动生成这样的配置文件

现在开始配置我们连接数据库需要的东西

 

 在这个文件中有hibernate给我们写好的列子,直接在里面粘贴复制就可以了

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="day01">
    <properties>
        <!--配置4大金刚
        #hibernate.dialect org.hibernate.dialect.MySQLDialect
        #hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
        #hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
        #hibernate.connection.driver_class com.mysql.jdbc.Driver
        #hibernate.connection.url jdbc:mysql:///test
        #hibernate.connection.username gavin
        #hibernate.connection.password
        -->
        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"></property>
        <property name="hibernate.connection.url" value="jdbc:mysql:///jpa"></property>
        <property name="hibernate.connection.username" value="root"></property>
        <property name="hibernate.connection.password" value="123456"></property>
        <!--配置方言属性-->
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"></property>
        <!--配置可选属性-->
        <!--配置制动生成键
        #hibernate.hbm2ddl.auto create-drop
        #hibernate.hbm2ddl.auto create
        #hibernate.hbm2ddl.auto update
        #hibernate.hbm2ddl.auto validate
        -->
        <!--<property name="hibernate.hbm2ddl.auto" value="create"></property>-->
        <!--配置是否显示SQL
        #hibernate.show_sql true
        -->
        <property name="hibernate.show_sql" value="true"></property>
        <!--漂亮SQL
        hibernate.format_sql true
        -->
        <property name="hibernate.format_sql" value="true"></property>
    </properties>
</persistence-unit>
</persistence>
View Code

 

 

实体类创建

//标记为实体类
@Entity
//表名
@Table(name = "t_user")
public class User {
//主键
@Id
//自增加
@GeneratedValue
package cn.jiedada.domain;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

//标记为实体类
@Entity
//表名
@Table(name = "t_user")
public class User {
    //主键
    @Id
    //自增加
    @GeneratedValue
    private Long id;
    private String name;

    public User() {
    }

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}
View Code

 

JPA连接CRUD

//获取工厂
factory = Persistence.createEntityManagerFactory("day01");
//获取连接对象
manager = factory.createEntityManager();
//开启事务
transaction = manager.getTransaction();
transaction.begin();
//设置语句
这里是需要我们写入的
//提交事务
transaction.commit();
//关闭流
manager.close();
package cn.jiedada.domain;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import javax.persistence.*;

import java.util.List;

import static org.junit.Assert.*;

public class UserTest {
    EntityManagerFactory factory;
    EntityManager manager;
    EntityTransaction transaction;
    @Before
    public void berfore() {
        //获取工厂
        factory = Persistence.createEntityManagerFactory("day01");
        //获取连接对象
        manager = factory.createEntityManager();
        //开启事务
        transaction = manager.getTransaction();
        transaction.begin();
        //设置语句
    }
    @After
    public void after() {
        //提交事务
        transaction.commit();
        //关闭流
        manager.close();
    }
    @Test
    public void testAdd() {
        User user = new User();
        user.setName("杰帅");
        //添加
        manager.persist(user);
    }
    @Test
    public void testQuery() {
        //单个查询
        User user = manager.find(User.class, 1l);
        System.out.println(user);
    }
    @Test
    public void testQueryAll() {
        //这里需要使用jpql面向对象的sql的语句
        String jpql="select u from User u";
        Query query = manager.createQuery(jpql);
        List<User> list = query.getResultList();
        list.forEach(e->{
            System.out.println(e);
        });
    }
    @Test
    public void testDel() {
       //因为是面向对象的jpql所以删除的时候需要找打在删除
        //找到要删除的对象
    User user = manager.find(User.class, 1l);
        manager.remove(user);
}
    @Test
    public void testUpdate() {
       //因为是面向对象的jpql所以删除的时候需要找打在删除
        //找到要删除的对象
        User user = manager.find(User.class, 2l);
        user.setName("小黄");
        //这里我们先把这个方法看作修改,但是实际上不是修改
        manager.merge(user);
    }

}
View Code

 

posted on 2019-09-24 22:25  哦哟这个怎么搞  阅读(370)  评论(0编辑  收藏  举报