jpa之hibernate

来源:互联网 发布:众划算在淘宝算违规吗 编辑:程序博客网 时间:2024/06/06 08:39

转自:http://www.cnblogs.com/zhougaojun/p/3322147.html

示例代码:http://download.csdn.net/detail/u010476739/9923061

JPA之hibernate例子+总结

   1,About JPA

     JPA是sun公司定义的一套持久化API,他只是定义了相关的Interface,实现产品多种多样如Hibernate,Ibatis,topLink,openJPA等等,JPA的伟大之处就是结束了多少年以来个大ORM产品各自为营的局面,使得各ORM产品统一,使用JPA,如过你的实现产品是HIbernate,以后换其他的ORM产品就变的很方便,使我们的代码变的非常灵活。

  2.这里做一个简单的事例,实现产品使用Hibernate,所使用的jar包如下所示:

   

 

 3. 在src下新建一个名为M“ETA-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_1_0.xsd" version="1.0">        <persistence-unit name="JPA" transaction-type="RESOURCE_LOCAL">          <properties>              <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>              <property name="hibernate.hbm2ddl.auto" value="update"/>              <property name="hibernate.show_sql" value="true"/>            <property name = "hibernate.connection.driver_class" value = "com.mysql.jdbc.Driver"/>            <property name = "hibernate.connection.url" value = "jdbc:mysql://localhost:3306/test"/>            <property name = "hibernate.connection.username" value = "root"/>            <property name = "hibernate.connection.password" value = "rootroot"/>          </properties>    </persistence-unit>  </persistence>
复制代码

 4.实体bean

复制代码
package com.youcent;import java.io.Serializable;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;@Entitypublic class User implements Serializable{    private Integer id;    private String name;    @Id    @GeneratedValue(strategy=GenerationType.AUTO)    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;    }    @Override    public String toString() {        return "User [id=" + id + ", name=" + name + "]";    }    }
复制代码

5.建立test类进行测试

复制代码
package com.youcent;import java.util.List;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;import javax.persistence.Query;import org.junit.Test;public class TestUser {    //添加    @Test    public void testSave() {        EntityManagerFactory factory = Persistence.createEntityManagerFactory("JPA");        EntityManager em = factory.createEntityManager();        em.getTransaction().begin();        User u = new User();        u.setName("jerry");        em.persist(u);        em.getTransaction().commit();        em.close();        factory.close();    }    //删除    @Test    public void testRemove() {        EntityManagerFactory factory = Persistence.createEntityManagerFactory("JPA");        EntityManager em = factory.createEntityManager();        em.getTransaction().begin();        User u = em.find(User.class,2);        em.remove(u);        em.getTransaction().commit();        em.close();        factory.close();    }    //修改    @Test    public void update() {        EntityManagerFactory factory = Persistence.createEntityManagerFactory("JPA");        EntityManager em = factory.createEntityManager();        em.getTransaction().begin();        //第一种方法        //User u = em.find(User.class,1);        //u.setName("tom");        //第二种方法        User u1 = new User();        u1.setId(3);        u1.setName("xyz");        em.merge(u1);        em.getTransaction().commit();        em.close();        factory.close();    }    //hql 取得所有对象    @Test    public void findAll() {        EntityManagerFactory factory = Persistence.createEntityManagerFactory("JPA");        EntityManager em = factory.createEntityManager();        Query query = em.createQuery("select u from User u");        List<User> list = query.getResultList();        for(User u : list){            System.out.println(u.toString());        }        em.close();        factory.close();    }    //hql 取得单一结果 ,使用位"置参数查询"    @Test    public void findById() {        EntityManagerFactory factory = Persistence.createEntityManagerFactory("JPA");        EntityManager em = factory.createEntityManager();        Query query = em.createQuery("select u from User u where u.id=?1"); //表示明确指定从1开始设置参数        query.setParameter(1, 4);        User u  = (User) query.getSingleResult();    //取得单一结果        System.out.println(u.toString());        em.close();        factory.close();    }    //hql 取得单一结果 ,同样任何查询可以使用"命名参数"查询        @Test        public void findByHql() {            EntityManagerFactory factory = Persistence.createEntityManagerFactory("JPA");            EntityManager em = factory.createEntityManager();            Query query = em.createQuery("select u from User u where u.id=:id"); //表示明确指定从1开始设置参数            query.setParameter("id", 4);            User u  = (User) query.getSingleResult();    //取得单一结果            System.out.println(u.toString());            em.close();            factory.close();        }    //hql分页查询        @Test        public void findByPage() {            EntityManagerFactory factory = Persistence.createEntityManagerFactory("JPA");            EntityManager em = factory.createEntityManager();            Query query = em.createQuery("select u from User u");            query.setFirstResult(1);  //表示从第二条记录开始            query.setMaxResults(2);   //向后去两条            List<User> list = query.getResultList();            for(User u : list){                System.out.println(u.toString());            }            em.close();            factory.close();        }        //hql更新查询,须开事务        @Test        public void updateByhql() {            EntityManagerFactory factory = Persistence.createEntityManagerFactory("JPA");            EntityManager em = factory.createEntityManager();            em.getTransaction().begin();            Query query = em.createQuery("update User u set u.name=:name where u.id=:id");            query.setParameter("name", "tom1");            query.setParameter("id", 1);            int rows = query.executeUpdate(); //更新查询要执行的方法            if(rows>0){                System.out.println("更新成功!");            }            em.getTransaction().commit();            em.close();            factory.close();        }        //hql删除查询,须开事务        @Test        public void removeByhql() {            EntityManagerFactory factory = Persistence.createEntityManagerFactory("JPA");            EntityManager em = factory.createEntityManager();            em.getTransaction().begin();            Query query = em.createQuery("delete from User u where u.id=:id");            query.setParameter("id", 4);            int rows = query.executeUpdate(); //更新查询要执行的方法            if(rows>0){                System.out.println("删除成功!");            }            em.getTransaction().commit();            em.close();            factory.close();        }        }
复制代码

6.总结一下常用注解

1、日期: 
  @Temporal(TeporalType.DATE)  -----> Date

2、枚举:
  @Enumerated(EnumType.STAING) ---> Enum

3、大文本,二进制数据:
  @Lob ------> String,Byte[]
    
4、不和数据库映射
  @Transient

5、延迟加载
  @Basc(fetch=FetchType.LAZY),只有当使用属性的get方法

是才从数据中获取!