• ssh(sturts2_spring_hibernate) 框架搭建之JPA代替hibernate


    一、JPA用来替代hibernate

       ⒈JPA的全称是JAVA Persistence API。指的是JPA通过注解或者是XML描述对象—关系表的映射关系,并且将运行的实体对象持久化数据库中。

       ⒉JPA是一种规范,hibernate是一种实现。同样的mybatis也是jpa中的一种实现。

     

    二、构建步骤:

       ⒈创建persistence.xml文件:

         ⑴、首先在你的项目中的src目录下新建一个MATA-INF文件夹,文件夹的名字不可以是任意,必须是MATA-INF:

         ⑵、新建一个xml文件,命名为persistence.xml:

         ⑶、接下来,在persistence.xml文件中进行相关的配置,如下:

    <?xml version="1.0" encoding="UTF-8"?>
             
     <persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
            http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
                 version="2.1">
    
        <!--persistence单元,name属性不可少。  -->        
        <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
            <!--可选属性:设置persistence的提供者 -->    
            <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
            <!--可选属性:实体类  -->
            <class>entity.BookCard</class>
            
            
            <!-- 数据库厂商的属性 -->
            <properties>
                <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect"/>
                <property name="hibernate.connection.driver_class" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
                <property name="hibernate.connection.username" value="sa"/>
                <property name="hibernate.connection.password" value="123456"/>
                <property name="hibernate.connection.url" value="jdbc:sqlserver://localhost:1433;DatabaseName = webLastExam_20160727"/>
                <property name="hibernate.show_sql" value="true"></property>
                <property name="hibernate.hbm2ddl.auto" value="update"/>
            </properties>
            
        </persistence-unit>
    </persistence>

           ·name:持久化单元的名字,这个属性必须要有,用来后面的EntityManagerFactory生成实例的名字。 

             ·transaction-type:使用的实物类型,默认是RESOURCE_LOCAL事务,还有一个是JTA事务。

            ·provide:EJB Persistence provide 的一个实现类,可以分为不同的ORM,例如MyBatis和Hibernate。

           ·properties:配置数据库厂商的属性,比如SQL-server和mysql、Oracle等。

           ·class:指明要映射的类,如果不写就不能在程序运行的时候自动创建数据库中的表。

        ⒉在实体类中添加注解:

            ⑴、在映射的实体类上添加注解:

               

              @Entity :标识这个类是一个JPA实体 

                  @Table(name="BookCard") :根据这个实体类在数据库中指定生成的表名

            ⑵、设置主键:

               

                @Id :设置数据库的表的主键为Id。

                @GeneratedValue : 默认实行自定自定义的主键生成策略。

                @GenericGeneratorHibernate :在JPA的基础上进行扩展,hibernate独自有的主键生成策略。 

       

             

               ⑶、具体获取数据类中的定义:(其中红色的为重要的代码)

          

    package dao;
    import java.util.List;
    
    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.Persistence;
    import javax.persistence.Query;
    
    import entity.BookCard;
    
    
    //定义数据库操作接口的实现类,实现接口中方法。
    public class MyDaoImp implements MyDao {
        
    
        //实现接口中的获取所有的数据的方法
        public List<BookCard> getAllBookCard() {
            
     
            EntityManagerFactory emf =Persistence.createEntityManagerFactory("myJpa");
            EntityManager em = emf.createEntityManager();
    
            em.getTransaction().begin();
            //查询数据
            List<BookCard> list = em.createQuery("from BookCard", BookCard.class).getResultList();
      
            em.getTransaction().commit();
            em.close();
            emf.close();
            
            return list;            
            
            
        }
    
    }

           由上面我们可以发现,在JPA中的EntityManagerFactory类似于Hibernate中的SessionFactory;EntityManager类似于Session,EntityManager是实体类管理器,是由EntityManagerFactory创建,每一个EntityManagerFactory称为一个持久化单元,每个持久化单元可以认为是一个数据源的映射(数据源可以理解为一个数据库,我们可以在应用服务器中配置不同的数据源,即使用不同的persistenceUtil来映射这些数据源,从而可以实现不同的数据库之间的操作。)       


          谢谢浏览!

        

     

        

  • 相关阅读:
    router.beforeEach、路由元信息、导航守卫与函数式编程
    C++传递不定参函数
    函数式编程-compose与pipe
    玩转redux--从会用到庖丁解牛
    redux沉思录:基于flux、状态管理、函数式编程的前端状态管理框架
    Laravel 框架集成 UEditor 编辑器的方法
    i18n实现前端国际化(实例)
    laravel获取当前认证用户登录
    larave5.6 引入自定义函数库时,报错不能重复定义
    2019教师证教材资料
  • 原文地址:https://www.cnblogs.com/demoMeng/p/5853583.html
Copyright © 2020-2023  润新知