JPA的个人小结

JPA的个人小结

原生Jpa的概念和操作

什么是原生Jpa

JPA的全称是Java Persistence API, 即Java 持久化API,是SUN公司推出的一套基于ORM的规范,内部是由一系列的接口和抽象类构成。

JPA通过JDK 5.0注解描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

Jpa 的入门

一,创建Maven 工程导入Pom.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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>Jpa-test</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.hibernate.version>5.0.7.Final</project.hibernate.version>
    </properties>
    <dependencies>
        <!-- junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!-- 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>

</project>
二,在META-INF 中创建名为"Persistence.xml"资源配置文件
<?xml version="1.0" encoding="UTF-8"?>
<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:持久化单元名称
		transaction-type:事务类型
		 	RESOURCE_LOCAL:本地事务管理 我们当前是为本地操作
		 	JTA:分布式事务管理 -->
    <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
        <!--配置JPA规范 服务提供商-->
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <properties>
            <!--配置数据库-->
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <!-- 数据库地址 -->
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/customer" />
            <!-- 数据库用户名 -->
            <property name="javax.persistence.jdbc.user" value="root" />
            <!-- 数据库密码 -->
            <property name="javax.persistence.jdbc.password" value="1024" />
			<!-- 因为hibernate 提供了JPA的实现也可以配置Hibernate 中属性-->
            <property name="hibernate.show_sql" value="true" /> <!-- 显示sql -->
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="update" /><!--创建生成策略 -->
        </properties>
    </persistence-unit>
</persistence>

log4j配置文件

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
三,配置实体类属性

在实体类中要配置实体类属性和表中对应的属性,这里我以我创建的客户表为例

@Entity

​ 作用:指定当前类是实体类。

@Table

​ 作用:指定实体类和表之间的对应关系。

​ 属性:

​ name:指定数据库表的名称

@Id

​ 作用:指定当前字段是主键。

@GeneratedValue

​ 作用:指定主键的生成方式。。

​ 属性:

strategy :指定主键生成策略。

@Column

​ 作用:指定实体类属性和数据库表之间的对应关系

​ 属性:

name:指定数据库表的列名称。

​ unique:是否唯一

​ nullable:是否可以为空

​ inserttable:是否可以插入

​ updateable:是否可以更新

​ columnDefinition: 定义建表时创建此列的DDL

​ secondaryTable: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字搭建开发环境[重点] *这个不清楚

package com.wym.Entity;

import javax.persistence.*;

@Entity
@Table(name = "customer_table")
public class Customer {
    @Id//声明当前私有主键
    @GeneratedValue(strategy = GenerationType.IDENTITY)//主键生成策略
    @Column(name = "id")
    private Integer id;
    @Column(name = "name")
    private String name;
    @Column(name = "sex")
    private String sex;
    @Column(name = "tell")
    private Integer tell;
    @Column(name = "addr")
    private String addr;
    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Integer getTell() {
        return tell;
    }

    public void setTell(Integer tell) {
        this.tell = tell;
    }

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }

    @Override
    public String toString() {
        return "Customer{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", tell=" + tell +
                ", addr='" + addr + '\'' +
                '}';
    }
}

四,配置Jpa 的管理器
     //获取配置文件得到Factory
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
        //创建实体类管理对象
        EntityManager em = factory.createEntityManager();
        //获取事务对象
        EntityTransaction transaction = em.getTransaction();
        //开启事务
        transaction.begin();
        Customer customer=new Customer();
        customer.setName("廖伟");
        customer.setAddr("井冈山");
        em.persist(customer);//添加数据
        //提交事务
        transaction.commit();
        //释放资源
        em.close();
        factory.close();
五,优化Jpa 的创建过程 抽取一个工具类
package com.wym.Entity.Utils;

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

/**
 * Jpa工具类
 */
public class JpaUtil {
    // JPA的实体管理器工厂:相当于Hibernate的SessionFactory
    private static EntityManagerFactory factory=null;
    // 使用静态代码块赋值
    static{
      factory = Persistence.createEntityManagerFactory("myJpa");
    }

    /**
     * 提供一个方法管理对象
     */
    public static EntityManager getFactory(){
        return  factory.createEntityManager();
    }

}

Jpa的CRUD 操作


    /**
     * EntityManager:提供了crud 的方法
     * getTransaction : 获取事务对象
     * 	persist : 保存操作
     * 	merge : 更新操作
     * 	remove : 删除操作
     * 	find/getReference : 根据id查询
     */

上面我们创建了JpaUtils下面我们使用这个JpaUtils 工具类

一 ,保存操作persist
 @Test
    public  void  testUtil(){
        EntityManager me = JpaUtil.getFactory();
        EntityTransaction transaction = me.getTransaction();
        transaction.begin();
        try {
            Customer customer = new Customer();
            customer.setName("wengyanmin");
            customer.setSex("男");
            customer.setAddr("江西");
            customer.setTell(19312312);

            me.persist(customer);//保存
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            transaction.rollback();
        }
        me.close();
    }
二,更新数据merge
 @Test
    public void testMerge(){
        EntityManager me = JpaUtil.getFactory();
        EntityTransaction transaction = me.getTransaction();
        transaction.begin();
        try {
            //查询前要先查询出对象
            Customer customer = me.find(Customer.class, 1l);
            customer.setAddr("深圳");
            //修改
            me.merge(customer);
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            transaction.rollback();
        }
        me.close();
    }
三,删除数据remove
    @Test
    public void testDelete(){
        EntityManager me = JpaUtil.getFactory();
        EntityTransaction transaction = me.getTransaction();
        transaction.begin();
        try {
            //查询前要先查询出对象
            Customer customer = me.find(Customer.class, 1l);
            //删除
            me.remove(customer);
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            transaction.rollback();
        }
        me.close();
    }
四,查询find 和 getReference
   /**
     * 查询 根据id
     * find :直接获取对象本体
     * getReference:延迟加载
     */
@Test
    public void testFind(){
        EntityManager me = JpaUtil.getFactory();
        EntityTransaction transaction = me.getTransaction();
        transaction.begin();
        try {
            //查询前要先查询出对象
            //Customer customer = me.find(Customer.class, 1l);
            Customer c1 = me.find(Customer.class, 1L);
            Customer c2 = me.find(Customer.class, 1L);
            System.out.println(c1==c2);
            //返回true 有缓存
            //getReference:延迟加载
            Customer reference = me.getReference(Customer.class, 1l);
            //删除
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            transaction.rollback();
        }
        me.close();
    }

Jpa的复杂查询

jpa提供了一套复杂查询的 方式,就是使用JPQl,下面使用JPQL 来进行复杂的查询,JPQL 的语法是使用实体类中属性来进行语句的书写

一, 查询所有
@Test
    public  void test1(){
        EntityManager manager = JpaUtil.getFactory();
        EntityTransaction tx = manager.getTransaction();

        tx.begin();
        String jql="from  Customer ";
        Query query = manager.createQuery(jql);
        List resultList = query.getResultList();
        for (Object cus:resultList
             ) {
            System.out.println(((Customer)cus));
        }
        tx.commit();

        manager.close();
    }
二,分页查询
 @Test
    public  void testLimit(){
        EntityManager manager = JpaUtil.getFactory();
        EntityTransaction tx = manager.getTransaction();

        tx.begin();
        String jql="from  Customer ";
        Query query = manager.createQuery(jql);
        //起始索引
        query.setFirstResult(1);
        //每页显示条数
        query.setMaxResults(2);

        List resultList = query.getResultList();
        for (Object cus:resultList
        ) {
            System.out.println(((Customer)cus));
        }
        tx.commit();
        manager.close();
    }
三,条件查询
模糊查询:
 @Test
    public void testFindCondition(){
        EntityManager manager = JpaUtil.getFactory();
        EntityTransaction tx = manager.getTransaction();

        tx.begin();
        String jql="from Customer where  name like ?";
        Query query = manager.createQuery(jql);
        //站位符
        query.setParameter(1, "weng%");

        //返回对象
        Object singleResult = query.getSingleResult();
        System.out.println(singleResult);
        tx.commit();
        manager.close();
    }
 /**
     * 下面的不写了:
     * 
     * 排序查询:
     *  jql: from Customer order by id desc
     *  统计查询:
     *  jql
     *  select count(id) from Customer
     */

以上是我在学习jpa 后进行的学习小结,希望能帮助到在学习的朋友们

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、项目介绍 该居民社区管理系统是一个基于Spring Boot框架的Web应用程序,用于管理居民的个人信息和社区信息。系统提供用户登录、查询居民信息、修改居民信息等功能。该系统采用前后端分离的方式进行开发,使用Vue.js作为前端框架。 二、技术选型 1. 后端技术 - Spring Boot - Spring Data JPA - MySQL - Swagger 2. 前端技术 - Vue.js - Element UI - Axios 三、系统功能 1. 用户登录 用户输入用户名和密码进行登录,系统进行身份验证后,允许用户访问系统功能。 2. 查询居民信息 用户可以根据居民姓名、身份证号码等信息进行查询,系统将返回符合条件的居民信息。 3. 居民社区楼栋号 用户可以查询和修改居民所在的楼栋号,系统会根据输入的信息进行查询和验证。 4. 社区和村所属 用户可以查询和修改居民所在的社区和村所属,系统会根据输入的信息进行查询和验证。 5. 个人信息回显 用户可以查看个人信息,系统将回显居民的个人信息,包括姓名、身份证号码、联系电话等信息。 6. 修改居民人员信息 用户可以修改居民的个人信息,包括姓名、身份证号码、联系电话等信息。 四、系统架构 1. 后端架构 该系统采用Spring Boot框架进行开发,使用Spring Data JPA进行数据持久化。采用MySQL作为数据库,使用Swagger进行API文档管理。 2. 前端架构 该系统采用Vue.js作为前端框架,使用Element UI进行前端UI设计,使用Axios进行后端数据接口访问。 五、部署和运行 1. 后端部署和运行 - 安装MySQL数据库,并创建数据库和表。 - 安装JDK和Maven。 - 将代码clone到本地,使用Maven进行构建。 - 修改配置文件,配置MySQL数据库连接信息。 - 启动Spring Boot应用程序。 2. 前端部署和运行 - 安装Node.js和npm。 - 将代码clone到本地。 - 进入项目目录,使用npm安装依赖。 - 修改配置文件,配置后端API接口地址。 - 使用npm启动Vue.js应用程序。 六、总结 本文介绍了一个基于Spring Boot框架的居民社区管理系统的设计和实现过程,包括系统功能、技术选型、系统架构、部署和运行等内容。该系统具有实用性和可扩展性,可为居民社区管理提供一定的帮助和支持。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值