1.环境搭建:
1.1 JDK 1.6.0.22的下载地址:http://java.sun.com
1.2 Eclipse IDE for Java EE Developers 3.6.2的下载地址:http://www.eclipse.org/downloads/
1.3 OpenJPA 2.1.0的下载地址:http://openjpa.apache.org/downloads.html
1.4 Mysql5.5.9的下载地址:http://dev.mysql.com/downloads/
1.5 SQuirreL SQL Client(Mysql client)2.6.4 http://squirrel-sql.sourceforge.net/
1.6 Apache Tomcat6.0.26的下载地址:http://tomcat.apache.org/download-60.cgi
2 Eclipse配置
2.1 配置Configure User Libraries for JPA
2.2 配置数据库连接
3 创建新的JPA Project
4 创建数据库和表
4.1.SQuirreL SQL Client 创建数据库
create database jpadb;
4.2.编写创建表sql语句:createtable.sql
drop table if exists yan_user;
Create TABLE yan_user(
ID INT NOT NULL AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL,
LOGINID VARCHAR(20) NOT NULL,
PASSWORD VARCHAR(32) NOT NULL,
AGE INT NOT NULL,
PRIMARY KEY(ID)
);
右键:执行所有,eclipse执行sql语句在数据库中创建表完成。
5.1
/** * Copyright(c) 2010-2011 Yan.Dev. All Rights Reserved. */ package com.yan.dev.jpa.dao; import com.yan.dev.jpa.entity.User; /** * Comment for IUserDao.java * * @author <a href="mailto:[email protected]">yan.dev</a> * * @blog:<a href="http://yan-dev.iteye.com"><b>yan.dev's Blog</b></a> * @version 1.0 * @time 2011-3-24 下午05:06:31 */ public interface IUserDao { public void save(User user) throws Exception; }
5.2
/**
* Copyright(c) 2010-2011 Yan.Dev. All Rights Reserved.
*/
package com.yan.dev.jpa.dao;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import com.yan.dev.jpa.entity.User;
/**
* Comment for UserDaoImpl.java
*
* @author <a href="mailto:[email protected]">yan.dev</a>
*
* @blog:<a href="http://yan-dev.iteye.com"><b>yan.dev's Blog</b></a>
* @version 1.0
* @time 2011-3-24 下午05:07:34
*/
public class UserDaoImpl implements IUserDao {
/*
* (non-Javadoc)
*
* @see com.yan.dao.IUserDao#save(com.yan.entity.User)
*/
public void save(User user) throws Exception {
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("FirstJPA");
EntityManager em = factory.createEntityManager();
EntityTransaction t = em.getTransaction();
t.begin();
try {
em.persist(user);
t.commit();
} catch (Exception e) {
e.printStackTrace();
t.rollback();
throw e;
} finally {
em.close();
factory.close();
}
}
}
5.3
/**
* Copyright(c) 2010-2011 Yan.Dev. All Rights Reserved.
*/
package com.yan.dev.jpa.entity;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* Comment for User.java
*
* @author <a href="mailto:[email protected]">yan.dev</a>
*
* @blog:<a href="http://yan-dev.iteye.com"><b>yan.dev's Blog</b></a>
* @version 1.0
* @time 2011-3-24 下午07:01:33
*/
@Entity
@Table(name="yan_user")
public class User {
public User(){
}
@Id
@GeneratedValue(strategy=IDENTITY)
private int ID;
@Column(name = "NAME")
private String name;
@Column(name = "LOGINID")
private String loginId;
@Column(name = "PASSWORD")
private String password;
@Column(name = "AGE")
private int age;
public int getId() {
return ID;
}
public String getName() {
return name;
}
public String getLoginId() {
return loginId;
}
public String getPassword() {
return password;
}
public int getAge() {
return age;
}
public void setId(int id) {
this.ID = id;
}
public void setName(String name) {
this.name = name;
}
public void setLoginId(String loginId) {
this.loginId = loginId;
}
public void setPassword(String password) {
this.password = password;
}
public void setAge(int age) {
this.age = age;
}
}
5.4
/**
* Copyright(c) 2010-2011 Yan.Dev. All Rights Reserved.
*/
package com.yan.dev.jpa.service;
import com.yan.dev.jpa.entity.User;
/**
* Comment for IUserService.java
*
* @author <a href="mailto:[email protected]">yan.dev</a>
*
* @blog:<a href="http://yan-dev.iteye.com"><b>yan.dev's Blog</b></a>
* @version 1.0
* @time 2011-3-24 下午05:17:01
*/
public interface IUserService {
public boolean save(User user);
}
5.5
/**
* Copyright(c) 2010-2011 Yan.Dev. All Rights Reserved.
*/
package com.yan.dev.jpa.service;
import com.yan.dev.jpa.dao.IUserDao;
import com.yan.dev.jpa.dao.UserDaoImpl;
import com.yan.dev.jpa.entity.User;
/**
* Comment for UserServiceImpl.java
*
* @author <a href="mailto:[email protected]">yan.dev</a>
*
* @blog:<a href="http://yan-dev.iteye.com"><b>yan.dev's Blog</b></a>
* @version 1.0
* @time 2011-3-24 下午05:52:11
*/
public class UserServiceImpl implements IUserService {
private IUserDao dao;
public UserServiceImpl() {
dao = new UserDaoImpl();
}
/*
* (non-Javadoc)
*
* @see com.yan.service.IUserService#save(com.yan.entity.User)
*/
public boolean save(User user) {
try {
dao.save(user);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
}
5.6.测试类的编写
/** * Copyright(c) 2010-2011 Yan.Dev. All Rights Reserved. */ package com.yan.dev.jpa.test; import junit.framework.Assert; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.yan.dev.jpa.entity.User; import com.yan.dev.jpa.service.IUserService; import com.yan.dev.jpa.service.UserServiceImpl; /** * Comment for Testcase.java * * @author <a href="mailto:[email protected]">yan.dev</a> * * @blog:<a href="http://yan-dev.iteye.com"><b>yan.dev's Blog</b></a> * @version 1.0 * @time 2011-3-24 下午04:52:15 */ public class Testcase { private IUserService service; /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { service=new UserServiceImpl(); } /** * @throws java.lang.Exception */ @After public void tearDown() throws Exception { service=null; } @Test public void save() { User user=new User(); user.setName("yan.dev2"); user.setLoginId("yan2"); user.setPassword("dev2"); user.setAge(99); Assert.assertEquals(service.save(user), true); } }
6.persistence.xml的修改
<?xml version="1.0" encoding="UTF-8"?> <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="FirstJPA" transaction-type="RESOURCE_LOCAL"> <!-- 定义jpa的Provider --> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> <!-- 定义持久化实体 --> <class>com.yan.dev.jpa.entity.User</class> <!-- 定义jpa的数据库参数 --> <properties> <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/jpadb" /> <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver" /> <property name="openjpa.ConnectionUserName" value="root" /> <property name="openjpa.ConnectionPassword" value="root" /> </properties> </persistence-unit> </persistence>
7.添加运行参数
VM arguments位置添加AspectJ的参数
-javaagent: …/openjpa-all-2.1.0.jar(…为openjpa的位置)
8.注意事项
创建表时注意大小写
运行时参数的设置
实体类中id的注释
SquirreL配置时,需要把mysql connetor驱动索引正确