非容器环境运行OpenJPA应用
luyued 发布于 2011-04-11 07:17 浏览 N 次网站: JavaEye 作者: lxy19791111 链接:http://lxy19791111.javaeye.com/blog/184113 发表时间: 2008年04月18日
声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!
注: 本人是参照网上的相关文章内容写成
1.不用说,先到http://openjpa.apache.org下载OpenJPA的相关包.
2.Animal.java
package com.openjpa.entity; import javax.persistence.Basic; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.SequenceGenerator; /** * Animal 用于表征系统中的Animal对象,他有两个属性
* id - 编号,编号将由Oracle数据库自动生成
* name - Animal的名称 */ /* Entity注释表示该类是持久化类,的name属性是该实体在查询中对应的唯一名称,默认是类名 */ @Entity public class Animal { // 名称 @Basic private String name; // 编号 /* Id注释表示该字段是标识字段 */ @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="SEQ_ANIMAL") @SequenceGenerator(name="SEQ_ANIMAL", sequenceName="SEQ_ANIMAL") private int id; 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; } }
AnimalDAO.java
package com.openjpa.dao; import java.util.List; import com.openjpa.entity.Animal; /** * @author king * */ public interface AnimalDAO { /** * 增加新的Animal对象 * * @param animal * 新的Animal对象 */ public void persistAnimal(Animal animal); /** * 修改Animal对象的信息 * * @param animal * 修改后的Animal对象 */ public void updateAnimal(Animal animal); /** * 删除Animal对象 * * @param id * 被删除的Animal对象 */ public void removeAnimal(int id); /** * 根据id查找符合条件的Animal * * @param id * animal的编号 * @return 编号为指定id的Animal对象 */ public Animal getAnimalByPrimaryKey(int id); /** * 根据输入的名称字符串模糊查找所有符合条件的Animal对象列表 * * @param name * Animal对象名称 * @return 符合条件的Animal对象列表 */ public List findAnimalsByName(String name); }
AnimalDAOImpl.java
package com.openjpa.impl.ejb3; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.Query; import com.openjpa.dao.AnimalDAO; import com.openjpa.entity.Animal; /** * AnimalDAOImpl 演示了如何使用OpenJPA访问数据库的方法和步骤 * * @author king * */ public class AnimalDAOImpl implements AnimalDAO { /** * removeAnimal方法可以从数据库中删除指定编号的Animal对象 * * @param id * Animal对象的编号 */ public void removeAnimal(int id) { // 获取EntityManagerFactory EntityManagerFactory factory = Persistence .createEntityManagerFactory("oracle"); // 获取EntityManager EntityManager em = factory.createEntityManager(); // 开始事务处理 em.getTransaction().begin(); // 使用Query删除对象 em.createQuery("delete from Animal animal where animal.id=" + id) .executeUpdate(); // 我们还可以选择通过对象来完成 /* * // 从EntityManager中查询到符合条件的对象 Animal animal = * em.find(Animal.class,id); // 调用EntityManager的remove方法删除对象 * em.remove(animal); */ // 提交事务 em.getTransaction().commit(); // 关闭EntityManager em.close(); // 关闭EntityManagerFactory factory.close(); } /** * findAnimalsByName 通过输入的name内容模糊查找符合条件的Animal对象列表 * * @param name * Animal对象的name * @return 符合模糊查找条件的Animal对象列表 */ public List findAnimalsByName(String name) { // 获取EntityManagerFactory EntityManagerFactory factory = Persistence .createEntityManagerFactory("oracle"); // 获取EntityManager EntityManager em = factory.createEntityManager(); /* * 通过EntityManager的createQuery方法获取Query对象 * createQuery方法的参数是JPQL查询语句,JPQL语句的语法请参考OpenJPA的帮助文档. * * 由于查询不需要事务的支持,因此Query操作的前后没有出现begin、commit方法的调用 * */ Query q = em.createQuery("select animal from Animal animal where animal.name like :name"); q.setParameter("name", "%" + name + "%"); List l = q.getResultList(); // 关闭EntityManager em.close(); // 关闭EntityManagerFactory factory.close(); return l; } /** * getAnimalByPrimaryKey 方法可以查找符合条件的单个Animal对象,如果不存在对应的Animal对象将返回null * * @param id * Animal对象的编号 * @return 唯一符合条件的Animal对象 * */ public Animal getAnimalByPrimaryKey(int id) { // 获取EntityManagerFactory EntityManagerFactory factory = Persistence .createEntityManagerFactory("oracle"); // 获取EntityManager EntityManager em = factory.createEntityManager(); // 查找符合条件的对象 Animal animal = em.find(Animal.class, id); // 关闭EntityManager em.close(); // 关闭EntityManagerFactory factory.close(); return animal; } /** * 将对象持久化到数据库中 * * @param animal * 需要被持久化的对象 */ public void persistAnimal(Animal animal) { // 获取EntityManagerFactory EntityManagerFactory factory = Persistence .createEntityManagerFactory("oracle"); // 获取EntityManager EntityManager em = factory.createEntityManager(); // 开始事务处理 em.getTransaction().begin(); // 持久化对象 em.persist(animal); // 提交事务 em.getTransaction().commit(); // 关闭EntityManager em.close(); // 关闭EntityManagerFactory factory.close(); } /* * (non-Javadoc) * * @see org.vivianj.openjpa.AnimalDAO#updateAnimal(org.vivianj.openjpa.entity.Animal) */ public void updateAnimal(Animal animal) { // 获取EntityManagerFactory EntityManagerFactory factory = Persistence .createEntityManagerFactory("oracle"); // 获取EntityManager EntityManager em = factory.createEntityManager(); // 开始事务处理 em.getTransaction().begin(); // 持久化对象 em.merge(animal); // 提交事务 em.getTransaction().commit(); // 关闭EntityManager em.close(); // 关闭EntityManagerFactory factory.close(); } }
3.persistence.xml
org.apache.openjpa.persistence.PersistenceProviderImpl com.openjpa.entity.Animal
4.本人使用的是Oracle,Animal表的id为自增序列,开始前我们可在数据库中创建好序列:
create sequence seq_animal minvalue 1 start with 1 increment by 1;
数据库表可以用命令行方式生成:
java org.apache.openjpa.jdbc.meta.MappingTool Animal.java
5.运行TestAnimalDaoImpl.java测试即可见效果:
package test.openjpa; import java.util.List; import com.openjpa.entity.Animal; import com.openjpa.impl.ejb3.AnimalDAOImpl; public class TestAnimalDaoImpl { public static void main(String[] args) { AnimalDAOImpl animalDaoImpl = new AnimalDAOImpl(); //新增 Animal a = new Animal(); a.setName("新增openJPA"); animalDaoImpl.persistAnimal(a); //查询 List animals = animalDaoImpl.findAnimalsByName("open"); for(Animal animal: animals){ System.out.println("name = " + animal.getName()); } //查询单个 Animal an = animalDaoImpl.getAnimalByPrimaryKey(a.getId()); System.out.println("Aniaml id = " + a.getId() + " , name = " + an.getName()); //删除 animalDaoImpl.removeAnimal(a.getId()); //查询 animals = animalDaoImpl.findAnimalsByName("open"); for(Animal animal: animals){ System.out.println("name = " + animal.getName()); } } }
本文的讨论也很精彩,浏览讨论>>
JavaEye推荐
- 北京: 千橡集团暨校内网诚聘软件研发工程师
- IBM受欢迎信息管理软件下载推荐
- 中科院软件、计算机工程硕士;中港软件硕士、管理类硕士博士招生
- 立刻报名,免费获取门票,参加2008 SOA中国技术论坛
上一篇:《 javascript高级程序设计》第六章 DOM基础 下一篇:不想提及的话题
相关资讯
- 07-01· 埃古RI&G:中国第三代休闲
- 07-01· 潇洒男士 Perry Ellis闲适生
- 07-01· 全明星阵容点亮CFDA颁奖红
- 07-01· 第十届中国休闲服装博览
- 07-01· tough jeans挎包 - 淘宝网商城
- 07-01· 钱包英语英文T开头的钱包
- 07-01· Toughjeans-散发着青春的活力
- 07-01· 平湖服装以“外”养“内
- 07-01· 护理液 海昌隐形眼镜护理
- 07-01· 潮流趋势 Red Carter 08春夏迈
图文资讯
最新资讯
- 07-01· 【中国服装面料行业投资
- 07-01· [转载]少年户外-2009中国户
- 07-01· 衡阳4s 衡阳nokia5320 nokia5
- 07-01· 挽春踏青 欢享夏风组图
- 07-01· Linux的硬链接(Hard Link)与
- 07-01· 共享精美边框和代码
- 07-01· Skyscraper Annual 航模比赛_
- 07-01· 小池一夫天涯孤客日文版
- 07-01· 绿竹与青萝
- 07-01· 四川水田惊现2亿年前生物