JPA-Java Persistence API

JPA 充分利用了注释(Annotation)和对象 / 关系映射,为数据持久化提供了更简单、易用的编程方式。
目标:利用JPA实现与数据库的连接
平台:eclipse,mysql
步骤:1、用mysql browser创建所需数据库
            2、用eclipse新建一个工程
            3、在新工程中加入jar包,其中包括:mysql的驱动mysql-connector-java-5.1.5-bin.jar;          ejb3-persistence.jar
           4、在工程中创建与数据库相对应的EntityBean,用annotation加以注释
           5、在META-INF文件夹下创建persistence.xml文件,用来保存配置信息,从而保证EntityBean可以数据库相连。(注意:工程中必须保证META-INF文件夹在src文件夹下,否则会报找不到persistence.xml的异常。如果先前建立的是java工程,那麽META-INF文件夹会被生成在src文件夹下,那麽直接在META-INF文件夹下创建persistence.xml文件即可;如果先前建立的是web工程,那麽META-INF文件夹会被生成在webcontent文件夹下,所以要自己手动在src下建立META-INF文件夹,以及在META-INF文件夹下创建persistence.xml文件)
        6、根据需要自己写dao类(包括增删查改的方法)
        7、写一个简单程序加以测试

举例:(该例包含了在mysql中存取image的方法)
     1、建立数据库db_image(id,imagename,imagebyte),其中imagebyte属性用来存image,所以它的datatype是LONGBLOB型的。

     2、建立名为TestJpa的一个java工程,加jar包,在工程中建立Image类,用annotation加以注释: 
package com.imagetest.jpa;

import java.awt.image.BufferedImage;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.hibernate.annotations.Table;

@Entity
public class Image {
    
    @Id
    @GeneratedValue(strategy
=GenerationType.IDENTITY)
    
private int id;
    @Column(name
="imagebyte")
    
private byte[] image; //
注意:在该类中我们可以看出image是以字节的形式存储的
    @Column(name="imagename")
    
private String imageName;
    
    
public int getId() {
        
return id;
    }

    
public void setId(int id) {
        System.out.println(
"=======id========");
        
this.id = id;
    }

    
public byte[] getImage() {
        
return image;
    }

    
public void setImage(byte[] image) {
        
this.image = image;
    }

    
public String getImageName() {
        
return imageName;
    }

    
public void setImageName(String imageName) {
        System.out.println(
"===========imagename=============");
        
this.imageName = imageName;
    }

    

}

 
3、创建persistence.xml配置文件:
<persistence version="1.0" 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">
    <persistence-unit name="mysql">
        
<provider>org.hibernate.ejb.HibernatePersistence</provider>
        
<class>com.imagetest.jpa.Image</class>
        
<properties>
            
<property name="hibernate.connection.url"
                value
="jdbc:mysql://localhost:3306/db_image" />
            
<property name="hibernate.connection.driver_class"
                value
="com.mysql.jdbc.Driver" />
            
<property name="hibernate.connection.username" value="mysql的用户名" />
            
<property name="hibernate.connection.password" value="密码" />
        
</properties>
    
</persistence-unit>
</persistence>

4、创建一个具有存取image方法的dao类:
package com.imagetest.dao;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

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

import com.imagetest.jpa.Image;

public class ImageManage {

    
public void saveImage() {
        EntityManagerFactory factory 
= Persistence
                .createEntityManagerFactory(
"mysql");//其中的mysql对应着persistence.xml中的
<persistence-unit name="mysql">
        EntityManager em = factory.createEntityManager();
        EntityTransaction et 
= em.getTransaction();
        et.begin();
        Image image 
= null;
        File imageFile 
= null;
        FileInputStream imageStream 
= null;
        
long imageLength;
        
byte[] imageByte = null;
        
try {
            image 
= new Image();
            imageFile 
= new File("F:/eva.png");
            imageLength 
= imageFile.length();
            imageByte 
= new byte[(int) imageLength];
            imageStream 
= new FileInputStream(imageFile);
            imageStream.read(imageByte);
            image.setImageName(
"eva");
            image.setImage(imageByte);
            System.out.println(imageByte);
            System.out.println(
"===========save image===========-");
            System.out.println(image.getId());
            System.out.println(image.getImageName());
            em.persist(image);
            System.out.println(
"==========save object==========");

        }
 catch (FileNotFoundException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println(
"=========FileNotFoundException============");
        }
 catch (IOException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println(
"=============IOException==============");
        }
 finally {
            em.getTransaction().commit();
            em.close();
        }

    }


    
public void getImage() {
        EntityManagerFactory factory 
= Persistence
                .createEntityManagerFactory(
"mysql");
        EntityManager em 
= factory.createEntityManager();
        EntityTransaction et 
= em.getTransaction();
        et.begin();
        File imageFile 
= null;
        Image image
=null;
        
byte[] imageByte = null;
        
try {
            FileOutputStream fos
=new FileOutputStream("C:/eva.png");
            image
=em.find(new Image().getClass(), 2);
            imageByte
=image.getImage();
            fos.write(imageByte);
        }
 catch (FileNotFoundException e) {
            
// TODO Auto-generated catch block
            System.out.println("=========FileNotFoundException 2=============");
            e.printStackTrace();
        }
catch (IOException e) {
            
// TODO Auto-generated catch block
            System.out.println("============IOException 2===================");
            e.printStackTrace();
        }

         
    }

}


5、写一个简单的测试类:
package com.imagetest.test;

import com.imagetest.dao.ImageManage;

import junit.framework.TestCase;

public class TestImage extends TestCase {
    
public void testImageSave(){
        ImageManage im
=new ImageManage();
//        im.saveImage();
        im.getImage();
    }

    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值