JPA学习--JPA的第一个小例子
来源:互联网 发布:淘宝联盟显示订单失效 编辑:程序博客网 时间:2024/06/07 17:09
前言
JPA的第一个小Demo,涉及到的知识点很多,每一步都很重要,可以说,任何一步出错都无法成功的实现。
运行环境
JPA + maven + postgreSQL
配置文件
pom.xml
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.edu.sdut.softlab.HelloWorldJPA</groupId> <artifactId>jpa</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>HelloWorldJPA Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.atomikos</groupId> <artifactId>transactions</artifactId> <version>3.9.3</version> </dependency> <!-- most recent cdi api version is 1.2 by now --> <dependency> <groupId>javax.enterprise</groupId> <artifactId>cdi-api</artifactId> <version>1.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.0.0.Final</version> </dependency> <!-- slf4j simple --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.13</version> </dependency> <!-- jsf2 support --> <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-api</artifactId> <version>2.2.12</version> <scope>provided</scope> </dependency> <!-- 添加primefaces依赖 --> <dependency> <groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> <version>5.0</version> </dependency> <!-- slf4j simple --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.13</version> </dependency> </dependencies> <build> <finalName>jpa</finalName> <plugins> <!-- war package support --> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.2</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> <!-- wildfly deploy support see also:https://docs.jboss.org/wildfly/plugins/maven/latest/index.html --> <plugin> <groupId>org.wildfly.plugins</groupId> <artifactId>wildfly-maven-plugin</artifactId> <version>1.1.0.Alpha5</version> </plugin> </plugins> </build></project>
persistence.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?><persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <!-- name可以自定义 --> <persistence-unit name="Person" transaction-type="RESOURCE_LOCAL"> <description> Persistence unit for HelloWorldJPA </description> <jta-data-source>java:/jboss/labDS</jta-data-source> <!-- 持久化类 --> <class>cn.edu.sdut.softlab.model.Person</class> <exclude-unlisted-classes>true</exclude-unlisted-classes> <properties> <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" /> <property name="hibernate.show_sql" value="true" /> <!-- update 表不存在的时候,它会创建数据库表 --> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" /> </properties> </persistence-unit></persistence>
数据源
数据源的配置参见我的另一篇博文:
http://blog.csdn.net/qq_33429968/article/details/53525150
代码设计
Model层–Person类
package cn.edu.sdut.softlab.model;import javax.inject.Named;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;@Named("person")@Entitypublic class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) // auto是默认值,可不写 private Long id; private String name; private String password; // 构造器 public Person() { } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
Controller层–PersonController类
package cn.edu.sdut.softlab.controller;import javax.enterprise.context.RequestScoped;import javax.inject.Named;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;import javax.transaction.HeuristicMixedException;import javax.transaction.HeuristicRollbackException;import javax.transaction.RollbackException;import javax.transaction.SystemException;import cn.edu.sdut.softlab.model.Person;@Named("controller")@RequestScopedpublic class PersonController { EntityManagerFactory emf = null; EntityManager em = null; private Person newPerson = new Person(); // newPerson的getter和setter方法 public Person getNewPerson() { return newPerson; } public void setNewPerson(Person newPerson) { this.newPerson = newPerson; } // login方法 public void login() throws IllegalStateException, SecurityException, HeuristicMixedException, HeuristicRollbackException, RollbackException, SystemException { try { emf = Persistence.createEntityManagerFactory("Person"); em = emf.createEntityManager(); // 断点测试 System.out.println("打印输出newPerson: " + newPerson.toString()); System.out.println("打印输出em: " + em.toString());// 测试结果,EntityManager注入失败 em.getTransaction().begin();// 至关重要的一步:开启事务 em.persist(newPerson); em.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); } finally { em.close(); emf.close(); System.out.println("存入成功!"); } }}
前台页面–index.xhtml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"><h:head></h:head><h:body> <h1>第一个JPA小例子</h1> <h:form>输入姓名:<h:inputText value="#{controller.newPerson.name}" /> <br />输入密码:<h:inputText value="#{controller.newPerson.password}" /> <br /> <h:commandButton value="登录" action="#{controller.login}" /> </h:form></h:body></html>
易错点
参考资料
0 0
- JPA学习--JPA的第一个小例子
- JPA学习笔记---JPA理解---第一个JPA程序
- JPA小例子
- JPA应用小例子
- 第一个JPA程序
- JPA之第一个JPA程序
- spring Jpa 的例子
- JPA+Hibernate 3.3 学习小结——第一个JPA程序
- 第一个jpa程序及jpa基础注解
- 简单的JPA注解例子
- JPA学习--JPA中的UserTransaction的理解
- Hibernate学习--Hibernate的第一个小例子
- RN学习之我的第一个RN小例子
- JPA的学习
- 开发第一个 Open JPA 应用
- JBoss中的第一个JPA程序
- JPA入门例子(采用JPA的hibernate实现版本)
- JPA入门例子(采用JPA的hibernate实现版本)
- strcpy 库函数 实现
- CSU - 1803 2016 (a*b%2016的个数)
- 2017 linkedin中国人才报告
- poj2418——Hardwood Species(stl+map)
- 用虚拟 router 连通 subnet - 每天5分钟玩转 OpenStack(141)
- JPA学习--JPA的第一个小例子
- java http 双向认证代码
- NOIP1998 幂次方
- BZOJ 1050: [HAOI2006]旅行comf 贪心,并查集
- Tensorflow download and setup
- ionic2常见问题-启动后白屏问题
- istringstream、ostringstream、stringstream 类介绍
- [oracle]百思不得其解:wmsys.wm_concat的用法与数据库版本的问题
- Linux内核同步机制之(四):spin lock