码迷,mamicode.com
首页 > 其他好文 > 详细

我的jpa学习

时间:2015-06-24 23:49:38      阅读:303      评论:0      收藏:0      [点我收藏+]

标签:

一.介绍下jpa

JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。(这个百度解释借鉴下^_^),对于概念什么的这么多估计够了。其实jpa就是sun公司想玩一个大一统,就是sun公司想把一些持久层框架进行统一规范下这样项目在更换框架时也不需要做太大的改动,大体就是这个意思废话不多说实战才是真的。

 

二.jpa小试牛刀

这里我以jpa(hibernate版)为例。

1.首先我们需要引入一些jar包,这里我截下图,引入的有点多^_^,网上也有很多别人打好包的大家只需要下载即可

 

技术分享

2.我们需要在classpath下构建一个META-INF文件夹,在此文件夹内放一个persisitence.xml文件

技术分享

文件夹构建好后我们就要配置我们的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/persistence_1_0.xsd" version="1.0">  

<!-- 这个itcast后面在获取EntityManageFactory有用 -->
<persistence-unit name="itcast" transaction-type="RESOURCE_LOCAL">  
  
    <!-- 指定了你用的是hibernate -->
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
   <properties>  
       <!-- 下面这些和hibernate的配置没什么区别 -->
    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />  
    <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />  
    <property name="hibernate.connection.username" value="root" />  
    <property name="hibernate.connection.password" value="root" />  
    <property name="hibernate.connection.url" value="jdbc:mysql://127.0.0.1:3306/jpa" />  
    <!--<property name="hibernate.max_fetch_depth" value="3" />   --> 
    <property name="hibernate.show_sql" value="true" />  
    <property name="hibernate.hbm2ddl.auto" value="create"/>  
   </properties>  
  
</persistence-unit>
</persistence>

上面就是jpa的配置了,下面就让我们实际操作下

3.实战

首先呢,我们需要一个domain对象

package com.guo.model;



import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="user")//这个属性可以不写,到时候你的类名和表名是一样的
public class User {

    //jpa在默认缺省情况认为你的属性都需要绑定到数据库里面,而且你的字段名和属性名是一样的
    
    @Id//表明这是个主键
    @GeneratedValue()//这是表明生成器,如果不写会用native自己去选择,这个注解可以使用在get方法上也行
    private int id;
    private String name;
    private Date birthday;
    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;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    
    
    
}

关于domain对象中的一些注解的使用要注意引入的包:

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

记住千万不要引错包,不要引入hibernate下面的类了

关于里面的注解怎么使用的网上有很多的资料,我这里就不详解了^_^

我们再写一个JPAUtil类,这个类主要就是帮助我们获得到EntityManagerFactory,这个类相当于hibernate中的SessionFactory

package com.guo.jpa;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public final class JPAUtil {

  //相当于hibernate中的SessionFactory
private static EntityManagerFactory emf = null; static{ emf = Persistence.createEntityManagerFactory("itcast"); } //获得EntityManager对象,这里的EntiyManager对象就相当于hibernate中session public static EntityManager getEntityManager() { return emf.createEntityManager(); } }

 

然后下面我们再写一个测试类,这个测试类中包含了一些方法

package com.guo.jpa;

import java.util.Date;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;

import com.guo.model.User;

public class BaseTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        User user = new User();
        user.setName("xiaohong");
        user.setBirthday(new Date());
        
        addUser(user);
    }

    //增加一个用户信息
    static void addUser(User user)
    {
        EntityManager em = null;
        //使用事务
        EntityTransaction tx = null;
        try {
            em = JPAUtil.getEntityManager();
            tx = em.getTransaction();
            
            //添加对象信息
            em.persist(user);
            
            tx.begin();
            tx.commit();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
}

 

4.运行,成功^_^

技术分享

这个算的上是入门吧,当然后面还有jpaql

 

我的jpa学习

标签:

原文地址:http://www.cnblogs.com/hotlove/p/4598886.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!