我记录

使用jpa+hibernate做持久层

掷鸡蛋者 发布于 2015/9/20 21:14 浏览: 401 回复: 0 所在分类:java

【目标】添加 jpa 支持,可以 CRUD、事务、依赖注入简化代码

1、添加配置

WEB-INF/classes/META-INF/persistence.xml


<?xml version="1.0" encoding="UTF-8"?>

<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">


    <persistence-unit name="MyDbTest">

        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

        <properties>

            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/syydb?useUnicode=true&amp;characterEncoding=UTF-8"/>

            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>

            <property name="hibernate.connection.username" value="root"/>

            <property name="hibernate.connection.password" value=""/>

            <property name="hibernate.archive.autodetection" value="class"/>

            <property name="hibernate.show_sql" value="true"/>

            <property name="hibernate.format_sql" value="true"/>

            <property name="hbm2ddl.auto" value="update"/>

        </properties>

    </persistence-unit>

</persistence>

2、添加 domain 模型

package wojilu.Domain;


import javax.persistence.Basic;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.Id;

import java.sql.Date;


@Entity

public class Article {

    private long id;

    private String title;

    private Date created;


    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Column(name = "Id")

    public long getId() {

        return id;

    }


    public void setId(long id) {

        this.id = id;

    }

    @Column(name = "Title")

    public String getTitle() {

        return title;

    }


    public void setTitle(String title) {

        this.title = title;

    }

    @Column(name = "Created")

    public Date getCreated() {

        return created;

    }


    public void setCreated(Date created) {

        this.created = created;

    }

3、添加 dao 支持

@Repository

public class ArticleDaoImpl implements ArticleDao {


    @PersistenceContext

    private EntityManager em;


    public Article getById(long id) {

        Article x = em.find(Article.class, id);

        em.close();

        return x;

    }


    public List<Article> getAll() {

        return em

                .createQuery("select x from Article x", Article.class)

                .getResultList();

    }


    public void insert(Article x) {

        EntityTransaction tx = em.getTransaction();

        tx.begin();

        em.persist(x);

        tx.commit();

        em.close();

    }

}

4、注入支持


关键1:pom.xml 中增加

        <!--JPA.Spring注入-->

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-orm</artifactId>

            <version>4.2.1.RELEASE</version>

        </dependency>

关键2:修改 web 项目中的 spring 配置文件,增加蓝色部分:

    <context:component-scan base-package="wojilu"/>

    <mvc:annotation-driven/>


    <!--JPA.EntityManager 注入-->

    <bean class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean" id="entityManagerFactory">

        <property name="persistenceUnitName" value="MyDbTest"/>

    </bean>


    <bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">

        <property name="entityManagerFactory" ref="entityManagerFactory"/>

    </bean>


    <tx:annotation-driven transaction-manager="transactionManager" />


    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

5、添加事务支持

@Service

public class UserService {


    @Transactional

    public void createUser(){

        //..........

    }


}

可以放在 class 层,也可以放在 method 方法层。 


掷鸡蛋者2015/9/20 21:14

留下脚印

踩一脚
copyright © 用微博记录这个时代 2010-2014
Powered by 我记录2.0
Processed in 0 seconds, 0 queries