(八)Hibernate之JAP使用

这次讲的JPA前一篇文章都有所介绍,这里呢就是结合hibernate.cfg.xml来讲讲,怎么用JPA进行CURD操作,类似于Hibernate的session进行CURD操作


hibernate.cfg.xml

Xml代码   收藏代码
  1. <span style="font-size: large;"><?xml version="1.0" encoding="utf-8" ?>  
  2. <!DOCTYPE hibernate-configuration PUBLIC  
  3.     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  4.     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  5.   
  6. <hibernate-configuration>  
  7. <session-factory>  
  8.     <property name="connection.driver_class">com.mysql.jdbc.Driver</property>  
  9.     <property name="connection.url">jdbc:mysql:///test</property>  
  10.     <property name="connection.username">root</property>  
  11.     <property name="connection.password">root</property>  
  12.   
  13.     <property name="dialect">org.hibernate.dialect.MySQLDialect</property>  
  14.   
  15.     <property name="connection.isolation">2</property>  
  16.   
  17.     <property name="show_sql">true</property>  
  18.       
  19.     <property name="hbm2ddl.auto">update</property>  
  20.       
  21.     <property name="format_sql">true</property>  
  22.   
  23.     <!-- mapping类声明-->  
  24.       
  25.     <mapping class="com.javacrazyer.domain.User" />  
  26.       
  27. </session-factory>  
  28. </hibernate-configuration></span>  

 
 JPA使用要求SRC的META-INF下要有persistence.xml

Xml代码   收藏代码
  1. <span style="font-size: large;"><?xml version="1.0" encoding="UTF-8"?>  
  2.     <!-- example of a default persistence.xml -->  
  3. <persistence xmlns="http://java.sun.com/xml/ns/persistence"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"  
  6.     version="1.0">  
  7.     <persistence-unit name="xkkjpa">  
  8.         <properties>  
  9.             <property name="hibernate.ejb.cfgfile" value="/hibernate.cfg.xml" />  
  10.         </properties>  
  11.     </persistence-unit>  
  12. </persistence></span>  

 Hibernate这里用到的实体类映射是采用的是注解方式,其实就是JPA的注解

User.java

Java代码   收藏代码
  1. <span style="font-size: large;">package com.javacrazyer.domain;  
  2.   
  3. import javax.persistence.Entity;  
  4. import javax.persistence.GeneratedValue;  
  5. import javax.persistence.GenerationType;  
  6. import javax.persistence.Id;  
  7. import javax.persistence.Table;  
  8.   
  9. @Entity  
  10. @Table(name="user")  
  11. public class User {  
  12.     @Id  
  13.     @GeneratedValue(strategy=GenerationType.AUTO)  
  14.     private Long id;  
  15.       
  16.     private String name;  
  17.     private String pwd;  
  18.     public Long getId() {  
  19.         return id;  
  20.     }  
  21.     public void setId(Long id) {  
  22.         this.id = id;  
  23.     }  
  24.     public String getName() {  
  25.         return name;  
  26.     }  
  27.     public void setName(String name) {  
  28.         this.name = name;  
  29.     }  
  30.     public String getPwd() {  
  31.         return pwd;  
  32.     }  
  33.     public void setPwd(String pwd) {  
  34.         this.pwd = pwd;  
  35.     }  
  36.       
  37.     public String toString(){  
  38.         return "id=" + id + ",name=" + name + ",pwd=" + pwd;  
  39.     }  
  40. }  
  41. </span>  

 UserDao.java

Java代码   收藏代码
  1. <span style="font-size: large;">package com.javacrazyer.dao;  
  2.   
  3. import java.util.List;  
  4.   
  5. import javax.persistence.EntityManager;  
  6.   
  7. import com.javacrazyer.common.JPAUtil;  
  8. import com.javacrazyer.domain.PageModel;  
  9. import com.javacrazyer.domain.User;  
  10.   
  11.   
  12. public class UserDao {  
  13.       
  14.     public void add(User user){  
  15.         EntityManager em = JPAUtil.getEntityManager();  
  16.         em.getTransaction().begin();  
  17.           
  18.         em.persist(user);  
  19.           
  20.         em.getTransaction().commit();  
  21.         em.close();  
  22.     }  
  23.       
  24.     @SuppressWarnings("unchecked")  
  25.     public List<User> findAll(){  
  26.         EntityManager em = JPAUtil.getEntityManager();  
  27.         em.getTransaction().begin();  
  28.         //JPAQL  
  29.         List<User> users = em.createQuery("from User").getResultList();  
  30.           
  31.         em.getTransaction().commit();  
  32.         em.close();  
  33.           
  34.         return users;  
  35.     }  
  36.       
  37.     @SuppressWarnings("unchecked")  
  38.     public PageModel<User> findByPager(int pageNo, int pageSize){  
  39.         PageModel<User> pm = new PageModel<User>();  
  40.           
  41.         EntityManager em = JPAUtil.getEntityManager();  
  42.         em.getTransaction().begin();  
  43.           
  44.         Long count = (Long)em.createQuery("select count(o) from User o").getSingleResult();  
  45.           
  46.         if(count != null){  
  47.         List<User> users = em.createQuery("from User")  
  48.                              .setFirstResult((pageNo - 1) * pageSize)  
  49.                              .setMaxResults(pageSize)  
  50.                              .getResultList();  
  51.             pm.setRecordCount(count.intValue());  
  52.             pm.setDatas(users);  
  53.         }  
  54.         em.getTransaction().commit();  
  55.         em.close();  
  56.           
  57.         return pm;  
  58.     }  
  59.       
  60.     public User findById(Long id){  
  61.         EntityManager em = JPAUtil.getEntityManager();  
  62.         em.getTransaction().begin();  
  63.           
  64.         //User user = em.find(User.class, id);  //相当于Hibernate的get()方法  
  65.         User user = em.getReference(User.class, id); //相当于Hibernate的load()方法  
  66.           
  67.         em.getTransaction().commit();  
  68.         em.close();  
  69.           
  70.         return user;  
  71.     }  
  72.       
  73.     public void update(User user){  
  74.         EntityManager em = JPAUtil.getEntityManager();  
  75.         em.getTransaction().begin();  
  76.         user = em.merge(user);  
  77.           
  78.         em.getTransaction().commit();  
  79.         em.close();  
  80.     }  
  81.       
  82.     public void delete(User user){  
  83.         EntityManager em = JPAUtil.getEntityManager();  
  84.         em.getTransaction().begin();  
  85.           
  86.         em.remove(user);  
  87.           
  88.         em.getTransaction().commit();  
  89.         em.close();  
  90.     }  
  91. }  
  92. </span>  

 PageModel.java

Java代码   收藏代码
  1. <span style="font-size: large;">package com.javacrazyer.domain;  
  2.   
  3. import java.util.List;  
  4.   
  5. /** 
  6.  * 分页组件(包含当前页结果数据列表和总记录数) 
  7.  * 注意,它不是持久化实体类 
  8.  *  
  9.  */  
  10. public class PageModel<T> {  
  11.     private int recordCount;  
  12.     private List<T> datas;  
  13.       
  14.       
  15.     public int getRecordCount() {  
  16.         return recordCount;  
  17.     }  
  18.     public void setRecordCount(int recordCount) {  
  19.         this.recordCount = recordCount;  
  20.     }  
  21.     public List<T> getDatas() {  
  22.         return datas;  
  23.     }  
  24.     public void setDatas(List<T> datas) {  
  25.         this.datas = datas;  
  26.     }  
  27. }  
  28. </span>  

 JPAUtil.java

Java代码   收藏代码
  1. <span style="font-size: large;">package com.javacrazyer.common;  
  2.   
  3. import javax.persistence.EntityManager;  
  4. import javax.persistence.EntityManagerFactory;  
  5. import javax.persistence.Persistence;  
  6.   
  7.   
  8. public class JPAUtil {  
  9.       private static EntityManagerFactory factory;  
  10.       static {  
  11.           //加载src/META-INF/PERSISTENTCE.XML ,根据配置文件中的键加载  
  12.         factory = Persistence.createEntityManagerFactory("xkkjpa");  
  13.       }  
  14.       private JPAUtil() {}  
  15.   
  16.       public static EntityManager getEntityManager() {  
  17.         return factory.createEntityManager();  
  18.       }  
  19.   
  20. }  
  21. </span>  

 测试代码

Java代码   收藏代码
  1. <span style="font-size: large;">package com.javacrazyer.dao.test;  
  2.   
  3. import org.junit.Assert;  
  4. import org.junit.Test;  
  5.   
  6. import com.javacrazyer.dao.UserDao;  
  7. import com.javacrazyer.domain.PageModel;  
  8. import com.javacrazyer.domain.User;  
  9.   
  10. public class UserDaoTest {  
  11.     private UserDao dao = new UserDao();  
  12.       
  13.     @Test  
  14.     public void testAdd(){  
  15.         User user = new User();  
  16.           
  17.         user.setName("xxxx");  
  18.         user.setPwd("12345678790");  
  19.           
  20.         dao.add(user);  
  21.           
  22.         Assert.assertNotNull(user.getId());  
  23.     }  
  24.       
  25.     @Test  
  26.     public void testFindByPager(){  
  27.         PageModel<User> pm = dao.findByPager(21);  
  28.           
  29.         for(User user : pm.getDatas()){  
  30.             System.out.println(user);  
  31.         }  
  32.     }  
  33. }  
  34. </span>  

 根据JPA对实体类进行CRUD的操作特点与Hibernate的处理方式做下对比

 Hibernate处理方式为:通过SessionFactory获得session,然后通过session的各种方法进行CURD操作

 JPA的处理方式为:通过EntityManagerFactory获得entityManager,然后通过entityManager的各种方法进行CURD

Hibernate是SessionFacotory sessionFactory=config.buidSessionFacotory()

JPA是EntityManagerFactory entityManagerFactory=Persistence.createEntityManagerFactory("xkkjpa");


hibernate是Session session=sessionFactory.openSesion()

JPA是EntityManager entityManager=factory.createEntityManager()

session的增删改查为save,delete,update,merge,createQuery()

entityManager的增删改为persist,remove,merge,createQuery

在Spring Boot中使用Hibernate需要进行以下步骤: 1. 添加相关依赖 在`pom.xml`文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- H2 database --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> ``` 2. 配置数据源 在`application.properties`文件中配置数据源信息,例如: ```properties spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password= ``` 3. 创建实体类 创建对应的实体类,例如: ```java @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(name = "username") private String username; @Column(name = "password") private String password; // getter and setter methods } ``` 4. 创建数据访问对象(DAO) 创建对应的数据访问对象(DAO),例如: ```java @Repository public interface UserRepository extends JpaRepository<User, Long> { User findByUsername(String username); } ``` 5. 使用Hibernate进行数据操作 在需要使用Hibernate进行数据操作的地方,例如Service层中,注入对应的DAO对象,并使用相应的方法进行数据操作,例如: ```java @Service public class UserService { @Autowired private UserRepository userRepository; public User findByUsername(String username) { return userRepository.findByUsername(username); } public void save(User user) { userRepository.save(user); } } ``` 以上就是在Spring Boot中使用Hibernate整合JPA的基本步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值