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加以注释:
3、创建persistence.xml配置文件:
4、创建一个具有存取image方法的dao类:
5、写一个简单的测试类:
目标:利用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;
}
}
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>
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();
}
}
}
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();
}
}
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();
}
}