⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jpa入门.txt

📁 jpa的入门文章
💻 TXT
字号:
JPA日志:The logging utility is based on the java.util.logging. This utility provides you with nine levels of logging control over the amount and detail of the log output. Note that, as logging is not part of the JPA specification, the information the log output provides is TopLink JPA-specific.
要培植在persistence.xml中
<property name="toplink.logging.level" value="FINE" /> 

一、课程目标
  ORM概念
  JPA入门

二、引入持久化
    well框架是怎么样写的呢?dao/db/po,数据是怎么样保存到数据库中去的呢?dao.save(po)方法,其中save方法是用sql保存进去的。
    这个就叫持久化,持久(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中。
    持久化还有哪些技术呢?
    1. jdbc,well框架中用过
    2. io流,将对象写到文件中去,当然也可以存储在磁盘文件中、XML数据文件中等等。
    
三、什么叫持久层呢
    与持久化相关的一个概念就是持久层,处理持久化的一个逻辑层面。它是由多个类与接口组成的,目的就是实现持久化。譬如我们的well框架的数据层就是持久层。
    
四、ORM。
  1. 持久层的烦恼
    关系型数据库中的数据基本都是以一行行的数据进行存取的,而程序运行却是一个个对象进行处理,jjdbc保存时,就得把VO对象变成insert语句插入,查询时,又要将结果集ResultSet组装成VO对象。所以为解决这一困难,就出现 ORM 这一个对象和数据之间映射技术。
  2. 概念
    ORM-Object/Relational Mapper
    即“对象-关系型数据映射组件”。对于O/R,即 Object(对象)和 Relational(关系型数据),表示必须同时使用面向对象和关系型数据进行开发。
  3. 原理
    面向对象概念	面向关系概念
	类		表
	对象		记录
	属性		字段
	属性		主键
  4. 优点 
    不用写sql对数据进行操作,直接对对象进行操作
    不用写复杂的sql,用映射可以方便处理表与表之间的关系。
    灵活性,改表与字段不用改程序。
  5. orm的实现方式有两种:
    映射文件、注释。哪个更好呢?
    中小型项目100张表左右,或者开发团中无专人做映射,安全性高的用注释
    否则用映射文件
  6. 常用框架
    映射文件:Hibernate
    注释:JPA,EJB

五、JPA介绍
  1. 概念
    JPA(Java Persistence API),是JavaEE企业级应用规范,是开源的,基于ORM的用于实现数据的持久化。  作为Java EE 5.0平台标准的ORM规范,将得到所有Java EE服务器的支持。
    Sun这次吸取了之前EJB规范惨痛失败的经历,在充分吸收现有ORM框架的基础上,得到了一个易于使用、伸缩性强的ORM规范。从目前的开发社区的反应上看,JPA受到了极大的支持和赞扬,JPA作为ORM领域标准化整合者的目标应该不难实现。
    Sun引入新的JPA ORM规范出于两个原因:
      其一,简化现有Java EE和Java SE应用的对象持久化的开发工作;
      其二,Sun希望整合对ORM技术,实现天下归一。  
  2. glassfish介绍
    需要j2ee服务器的支持,到目前为止,有哪些j2ee服务器呢?Tomcat/Resin/JBOSS/GlassFish/WAS/WLS
   由SUN公司的GlassFish社团开发,Glassfish JPA - 一个基于 Oracle’s TopLink ORM framework 的开源项目。GlassFish(水晶鱼)是一个免费、开放源代码的应用服务,它实现了Java EE 5。 Java EE 5 平台包括了以下最新技术:EJB 3.0,JSF 1.2,Servlet 2.5,JSP 2.1,JAX-WS 2.0,JAXB 2.0, Java Persistence 1.0, Common Annonations 1.0, StAX 1.0 等。

   GlassFish虽然是一个标准的Java EE服务器,但是它同样具有轻便的Web容器的优点,它和Tomcat一样是优秀的Servlet容器,同时,它具备延迟加载的功能,也就是说, GlassFish在启动时只会启动一些必需的核心服务项,如Local JNDI服务,用于管理的JMX服务等,而对于暂时用不到的服务通通不予加载,直到需要的时候再说,而且这个特性不需要额外的配置。这样 GlassFish的启动时间是以前的一半,内存占用也只有以前的一半。
   GlassFish的另外一个秘密武器,就是Grizzly,Grizzly是一个基于Java NIO(New IO)技术,并完全以Java实现的一个HTTP的Listener,有了Grizzly,GlassFish在静态文件传输方面的性能比Tomcat要 强得多,而且可以支持更多的并发访问。我们可以抛弃JBoss+Tomcat和Apache+Tomcat这样的组合了。

  3. 下载: 
    JDK 5.0. http://java.sun.com/j2se/1.5.0/download.jsp
    Java EE 5.0 App Server: https://glassfish.dev.java.net/public/downloadsindex.html; http://java.net/download/javaee5/v2_branch/promoted/WINNT/glassfish-installer-v2-b58g.jar
  
  4. 安装
    1)设置环境变量
	GLASSFISH_HOME=D:\Program\glassfish    
	path=%GLASSFISH_HOME%\bin
    2) java -jar *.jar 可安装,此时解压出一个目录
    3) ant -f f:\glassfish\setup.xml 再编译
       D:\Program\glassfish\lib\ant\bin下自带了一个ant
    4) 系统默认的 administration 属性值有: 
	domain.name="domain1" 
	instance.name="server" 
	admin.user="admin" 
	admin.password="adminadmin" 
	admin.port="4848" 
	instance.port"="8080" 
	orb.port="3700" 
	imq.port="7676" 
	https.port="8181" 
  
  5. 启动与停止
    $GLASSFISH_HOME/bin/asadmin start-domain domain1
                      asadmin stop-domain domain1 
  6. 配置与myEclipse的连接
   一切按默认配置后,启动,报几个jar没有找到,没关系,在GlassFish1-paths-Append to ClassPath中导入javaee.jar/jmac-api.jar即可。这两个jar包位于glassfish\lib下。
  7. 访问
  web应用目录:http://localhost:8080/
  管理控制台:http://localhost:4848/  用户名:密码=admin:adminadmin

  8. 部署应用程序
  拷贝 hello.war domains/domain1/autodeploy/
  访问:http://localhost:8080/hello/index.jsp
  也可用命令:
    asadmin deploy jpa.war
    asadmin undeploy h.war
  部署出错,要访问日志文件:
    D:\Program\glassfish\domains\domain1\logs\server.log

六. Derby数据库
  Glassfish App Server捆绑了一个数据库叫Derby,是一个理想的,并且开源的,100% Java编写的,容易管理的关系数据库管理系统,它可以和一些商业产品的特性进行交付。这篇文章是关注Apache Derby项目

  配置环境变量:    
    DERBY_HOME=D:\Program\glassfish\javadb
    PATH=%DERBY_HOME%\bin

  启动命令是: $GLASSFISH_HOME/bin/asadmin start-database   --不要加;
  停止命令是:$GLASSFISH_HOME/bin/asadmin stop-database

  创建一个叫accp数据库,并建立连接
   ij> connect 'jdbc:derby://localhost:1527/accp;create=true';
  然后运行建表语句的sql文件
   ij> run 'abc.sql';
  直接建表,sql通用
    SHOW SCHEMAS;
    SHOW [ TABLES | VIEWS | PROCEDURES | SYNONYMS ] { IN schema }
    DESCRIBE name;

七、javaSe开发
   1. 新建java项目
      导入javaee.jar,jmac-api.jar,toplink-essentials.jar,toplink-essentials-agent.jar,derbyclient.jar
   2. 建库建表
     asadmin start-database
     ij> connect 'jdbc:derby://localhost:1527/accp;create=true';
     create table users(pk1 int not null primary key , userid varchar(20), PASSWORD varchar(20));
     show tables;
     show tables in app;
     descrbite user;

   3. 写个普通的javaBean
	@Entity
	@Table(name="users")
	//上面两句可以写成一句@Entity(name="users")
	 public class User implements Serializable {
	 private int pk1;
	 private String userid;
	 private String password;
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name = "pk1")
	public int getPk1() {
		return pk1;
	}
	public void setPk1(int pk1) {
		this.pk1 = pk1;
	}
	@Column(name = "userid")
	public String getUserid() {
		return userid;
	}
	public void setUserid(String userid) {
		this.userid = userid;
	}
	}
   4. 写个UserDao
        public class UserDao {
	//Apache Derby数据库提供2类JDBC驱动程序:Embedded 
	//Driver(org.apache.derby.jdbc.EmbeddedDriver)和Client/Server 
	//Driver(org.apache.derby.jdbc.ClientDriver)
	private static final EntityManagerFactory emf; 
	private static EntityManager em;
	static {
	//为了提升软件的执行效率,我们通常选择在某一个范围内缓存 EntityManagerFactory 对象。在 EntityManagerFactory 使用完后,我们需要调用它的 close 方法来释放相应的资源。
		emf = Persistence.createEntityManagerFactory("aa"); 
		//使用完后,也需要关闭em.close();永远不要对注入的EntityManager实例调用close()方法,清除工作是应用服务器的任务。如果你手工关闭entity manager,则会导致IllegalStateException异常。
		if (em == null) 
			em = emf.createEntityManager();
	}
	public void close() {
	  em.close();
	  emf.close();
	}
	  //主键查询
	  public void find(int uid){
	     User u = em.find(User.class, uid);
	     System.out.println(u.getUserid()+"\t"+u.getPassword());	     
	  }
	  //保存
	  public void persist(User u) {
		em.getTransaction().begin();
		em.persist(u);
		em.getTransaction().commit();
	  } 
	  //删除
	  public void remove(int uid) {
		User u = em.find(User.class, uid);
		em.getTransaction().begin();
		em.remove(u);
		em.getTransaction().commit();
	  } 
	  //更新
	  public void merge(int uid) {
		User u = em.find(User.class, uid);
		u.setPassword("888");
		em.getTransaction().begin();
		em.merge(u);
		em.getTransaction().commit();
	  } 
	  //查找所有的
	  @SuppressWarnings("unchecked")
		public void findAll() {
			String sql = "select u from User u";
			List<User> list = em.createQuery(sql).getResultList();
			for(User u : list) 
				System.out.println(u.getUserid()+"\t"+u.getPassword());
		}
	public static void main(String[] args) {
	  try{
		UserDao udao = new UserDao();
		//udao.find(1);
		User u = new User();
		u.setUserid("abc");
		u.setPassword("123");
		u.setPk1(3);
		//udao.persist(u);
		//udao.remove(3);
		//udao.merge(3);
		udao.findAll();
	   }finally{
		udao.close();
	   }
	}
   5. 在java项目中新建META-INF目录,再新建persistence.xml
	<?xml version="1.0" encoding="UTF-8"?>
	<persistence version="1.0" 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_1_0.xsd">
	  <persistence-unit name="aa">
	    <provider>oracle.toplink.essentials.PersistenceProvider</provider>
		<class>org.accp.User</class>
		<properties>
			<property name="toplink.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver" />
			<property name="toplink.jdbc.url" value="jdbc:derby://localhost:1527/accp;create=true" />
			<property name="toplink.jdbc.user" value="app" />
			<property name="toplink.jdbc.password" value="app" />
		</properties>
	  </persistence-unit>
	</persistence>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -