【入门】 jpa--实体管理器的基本应用

1.新建Jpa项目

2.引入所需的jar 包

3.创建实体类

package com.watchfree.entity;

import javax.persistence.Entity;
import javax.persistence.Id;
/**
 *  创建实体类
 * @author watchfree
 * @date 2016年12月6日下午7:12:43
 */
@Entity
public class Employee {

    @Id private int id ;
    private String name ;
    private long salary ;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public long getSalary() {
        return salary;
    }
    public void setSalary(long salary) {
        this.salary = salary;
    }
  public Employee() {

    }

    public Employee(int id){
        this.id = id ;
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "employee: id: "+this.id + " ,name: "+this.name + " ,saray: "+this.salary;
    }

}

4.配置JPA Content 下的 persistence.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="EmployeeService"
        transaction-type="RESOURCE_LOCAL">
        <class>com.watchfree.entity.Employee</class>
        <properties>
        <!-- 数据库连接操作 -->
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/jpa" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="root" />

            <!-- 配置 JPA 实现产品的基本属性. 配置 hibernate 的基本属性 -->
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>
    </persistence-unit>
</persistence>

5.创建操作Employee实体的服务类

package com.watchfree.service;

import javax.persistence.EntityManager;

import com.watchfree.entity.Employee;

/**
 * 操作Employee实体的服务类
 *
 * @author watchfree
 * @date 2016年12月6日下午6:47:42
 */
public class EmployeeService {
    protected EntityManager entityManager;

    public EmployeeService(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    /**
     * 创建Employee方法
     *
     * @param id
     * @param name
     * @param salary
     * @return
     */
    public Employee createEmployee(int id, String name, long salary) {
        Employee employee = new Employee(id);
        employee.setName(name);
        employee.setSalary(salary);
        entityManager.persist(employee);
        return employee;
    }

    /**
     * 删除
     *
     * @param id
     */
    public void removeEmployee(int id) {
        Employee employee = findEmployee(id);
        if (employee != null) {
            entityManager.remove(employee);
        }
    }

    /**
     * 查找
     *
     * @param id
     * @return
     */
    public Employee findEmployee(int id) {
        return entityManager.find(Employee.class, id);
    }
    /**
     * 更新
     * @param id
     * @param raise
     * @return
     */

    public Employee raiseEmployeeSalary(int id, long raise) {
        Employee employee = entityManager.find(Employee.class, id);
        if (employee != null) {
            employee.setSalary(employee.getSalary() + raise);
        }
        return employee;
    }

/**
    * 查詢所有
    * @return
    */
      public List<Employee> findAllEmployees() {
         TypedQuery<Employee> query = entityManager.createQuery("SELECT e FROM Employee e",Employee.class);
        return query.getResultList();
       }

}

6.创建测试类

package com.watchfree.test;

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

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

import com.watchfree.entity.Employee;
import com.watchfree.service.EmployeeService;

public class EmpoyeeTest {

    private EntityManagerFactory entityManagerFactory ;
    private EntityManager entityManager ;
    private EntityTransaction transaction ;
    private EmployeeService employeeService ;

    @Before
    public void init() {
        entityManagerFactory = Persistence.createEntityManagerFactory("EmployeeService") ;
        entityManager = entityManagerFactory.createEntityManager() ;
        transaction = entityManager.getTransaction() ;
        employeeService = new EmployeeService(entityManager) ;
    }

    @After
    public void destory(){
        entityManager.close();
        entityManagerFactory.close();
    }

}

6.1测试添加操作

  /**
     * 创建测试
     */
    @Test
    public void createTest() {
        transaction.begin();
        Employee employee = employeeService.createEmployee(158, "watchfree", 35000);
        transaction.commit();
        System.out.println(employee.toString());
    }

6.1.2  控制台输出:

6.1.3 查看数据库信息

6.2测试查询

/**
     * find
     */
    @Test
    public void findTest() {
      Employee employee = employeeService.findEmployee(158);
      System.out.println(employee.toString());
    }

6.2.1控制台输出

6.3 测试查询所有数据库数据

/**
     * 查詢所有
     * @return
     */
    public List<Employee> findAllEmployees() {
        TypedQuery<Employee> query = entityManager.createQuery("SELECT e FROM Employee e",Employee.class);
        return query.getResultList();
    }

6.3.1控制台输出

6.4 更新操作测试

/**
     * 更新測試
     */
    @Test
    public void updateTest (){
        transaction.begin();
        Employee employee = employeeService.raiseEmployeeSalary(158, 1000);
        transaction.commit();
        System.out.println(employee);
    }

6.4.1控制台输出

6.4.2数据库信息

6.5删除数据测试

/**
     * 刪除測試
     */
    @Test
    public void deleteTest() {
        transaction.begin();
        employeeService.removeEmployee(158);
        transaction.commit();
        System.out.println("remove Employee 158");
    }

6.5.1控制台输出

6.5.3查看数据库信息 id为158的记录被删除

参考资料:《Peo JPA2 Mastering the Java Persistence API》

时间: 2024-12-22 16:52:15

【入门】 jpa--实体管理器的基本应用的相关文章

JPA初体验系列(三) 实体管理器简介

EntityManager 是用来对实体Bean 进行操作的辅助类.他可以用来产生/删除持久化的实体Bean,通过主键查找实体Bean,也可以通过EJB3 QL语言查找满足条件的Bean.实体Bean 被EntityManager管理时,EntityManager跟踪他的状态改变,在任何决定更新实体Bean的时候便会把发生改变的值同步到数据库中. 实体管理器是JPA中很重要的部分,它的具体功能和作用如下: 从图中可以看出,实体管理器与数据库交互主要体现在两方面: 一是负责将Java中的实体对象操

持久化API(JPA)系列(四)管理器EntityManager--执行数据库更新

EntityManager是应用访问持久化上下文中的实体的接口,用来对实体Bean进行操作.我们可以使用它来创建.删除.修改持久化的实体,以体现到数据库中:也可以从数据库中查询得到实体或实体列表.所有的这些操作都是通过实体管理器进行的. 本文将首先讲解EntityManager对象的引用方式,然后讲解使用EntityManager的操作函数实现数据库的各种操作,包括以下内容. 持久化实体persist():往数据表中插入数据. 删除实体remove():从数据表中删除记录. 更新实体merge(

JPA实体继承的映射

注:文章中据说的实体指的是被@Entity注解的类. JPA中对象关系映射通常情况下是一个实体对应一个表,两个实体之间没有任何关系.如果两个实体之间是继承关系,那么该如何映射呢? JPA中的实体支持继承映射,多态关联,多态查询.抽象类和具体的类都可以是实体,且都可以使用@Entity来注解,映射成实体,并查询封装成一个实体.实体类可以继承非实体类,非实体类也可以继承实体类. JPA的继承映射有如下几种情况: 一.实体类继承抽象(具体)实体类 抽象类可以指定成为一个实体,抽象实体和具体实体的唯一区

Java SE环境中测试JPA实体的简单方法

Java SE环境中测试JPA实体的简单方法 出于软件质量的考虑,理论上来说我们写的一切代码都要经过测试.JPA的测试不像普通的组件那么方便,因为JPA涉及到数据库,所以集成测试必不可少,像Arquillian这样的测试框架能处理比较复杂的集成测试,但是它的配置相对也更复杂一点,所以本篇文章主要讲一下在Java SE环境中较简单地测试JPA实体(Entity)的方法. 我们需要实现的目标有:1.不需要mysql这样需要额外安装的数据库:2.在SE环境中可以直接测试. 相关工具我们主要用到JUni

Android基础入门教程——10.9 WallpaperManager(壁纸管理器)

Android基础入门教程--10.9 WallpaperManager(壁纸管理器) 标签(空格分隔): Android基础入门教程 本节引言: 本节给大家带来的是WallpaperManager(壁纸管理器),如其名,就是手机壁纸相关的 一个API,在本节中我们会描述下WallpaperManager的基本用法,调用系统自带的 壁纸选择功能,将Activity的背景设置为壁纸背景,以及写一个定时换壁纸的例子~ 好了,不BB,开始本节内容~ 官方API文档:WallpaperManager 1

Android基础入门教程——10.2 SmsManager(短信管理器)

Android基础入门教程--10.2 SmsManager(短信管理器) 标签(空格分隔): Android基础入门教程 本节引言: 本节带来的是Android中的SmsManager(短息管理器),见名知意,就是用来管理手机短信的, 而该类的应用场景并不多,一般是我们发短信的时候才会用到这个API,当然这种短信是 文字短信,对于彩信过于复杂,而且在QQ微信各种社交APP横行的年代,你会去发1块钱一条的 彩信吗?所以本节我们只讨论发送普通文字短信! 官方文档:SmsManager 1.调用系统

Android基础入门教程——10.1 TelephonyManager(电话管理器)

Android基础入门教程--10.1 TelephonyManager(电话管理器) 标签(空格分隔): Android基础入门教程 本节引言: 本章节是Android基础入门教程的最后一章,主要讲解是一些零零散散的一些知识点,以及一些遗漏 知识点的补充,这些零散的知识点包括,各种系统服务的使用,比如本节的电话管理器,短信管理器, 振动器,闹钟,壁纸等等,还有传感器之类的东西!乱七八糟什么都有哈!好的,本节我们要学习的 是TelephonyManager,见名知义:用于管理手机通话状态,获取电

Expression Blend实例中文教程(11) - 视觉管理器快速入门Visual State Manager(VSM)

Visual State Manager,中文又称视觉状态管理器(简称为VSM),是Silverlight 2中引进的一个概念.通过使用VSM,开发人员和设计人员可以轻松的改变项目控件的视觉效果,在项目中VSM主要用于创建自定义控件以及控件模板.为了能够打造个性绚丽的Silverlight项目,学习掌握VSM是非常必要的.本文将介绍VSM的快速入门知识以及VSM在Blend中的使用方法. 在学习VSM前,首先,了解以下几个基本概念: 正如前文所说,VSM视觉管理器是用户控制项目控件的视觉效果,S

Android基础入门教程——10.3 AudioManager(音频管理器)

在多媒体的第一节,我们用SoundPool写了个Duang的示例,小猪点击一个按钮后,突然发出”Duang”的 一声,而且当时的声音很大,吓死宝宝了,好在不是上班时间,上班时间偷偷写博客给经理知道 会作死的~嗯,好的,说到这个声音大小就得介绍下Android为我们提供的(音量大小控制)的API: AudioManager(音频管理器)了,该类位于Android.Media包下,提供了音量控制与铃声模式相关操作!... www.mafengwo.cn/i/4012346.htmlwww.mafen

Node.js包管理器Yarn的入门介绍与安装

FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT. 就在昨天, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm .咱虽然是个半桶水的咸鱼前端,不过也得跟上 Javascript 这股潮 (hong) 流 (huang) 的脚步,所以便有了下面这篇文章.大概的浅尝了一下这个自称是又快又可信赖又安全的包管理,所以写的内容不会很详细,更多的可能只是针对这个全新的包管理与 npm 的不同之处来对比.也可能有些地方写得不对