public class JPAUtil {
private static EntityManagerFactory emf;
private JPAUtil() {}
static {
//加载persistence.xml文件中的persistence-util中的配置信息创建EntityManagerFactory对象
emf = Persistence.createEntityManagerFactory("myPersistence");
}
//使用EntityManager创建EntityManager对象
public static EntityManager getEntityManager() {
return emf.createEntityManager();
}
}
保存操作
@Test
public void testSave() throws Exception {
//封装需要持久化的数据
User u = new User();
u.setName("Neld");
u.setSn("sn");
u.setHiredate(new Date());
EntityManager em = JPAUtil.getEntityManager();
//开启事务
em.getTransaction().begin();
//执行保存
em.persist(u);
//提交事务
em.getTransaction().commit();
//释放资源
em.close();
}
删除操作
@Test
public void testDelete() throws Exception {
EntityManager em = JPAUtil.getEntityManager();
em.getTransaction().begin();
User u = em.getReference(User.class, 1L);
//执行删除,将持久化状态的对象从数据库中删除
em.remove(u);
em.getTransaction().commit();
em.close();
}
修改操作
@Test
public void testUpdate() throws Exception {
EntityManager em = JPAUtil.getEntityManager();
em.getTransaction().begin();
User u = em.find(User.class, 1L);
u.setName("xxxx");
em.merge(u);
em.getTransaction().commit();
em.close();
}
查询操作
@Test
public void testGet() throws Exception {
EntityManager em = JPAUtil.getEntityManager();
//查询指定类型和OID的用户信息
User u = em.find(User.class, 1L);
em.close();
System.out.println(u);
}
@Entity: 对实体类的映射,默认使用当前类的简单名称作为类名,如在使用JPQL做查询的时候,使用该名字实现数据的查询 JPQL语句:SELECT u FROM User u; User:为默认使用的类名,可以通过Entity中的name属性修改 @Entity(name=”UserInfo”):将类的名称修改为UserInfo,那么上面的JPQL中的User修改为UserInfo即可
JPA中,根据主键查询数据可以使用下面两个方法完成: T find(Class type, Object oid); T getReference(Class type, Object oid); 相同点:都是根据主键查询指定类型的数据
不同点: getReference方法是在真实使用该对象的时候才会发送查询的sql语句,如
public void testGetReference() throws Exception {
EntityManager em = JPAUtil.getEntityManager();
//这里不会立即发送sql查询
User u = em.getReference(User.class, 1L);
System.out.println("-------------");
//在访问User对象中的属性值的时候表示真正使用该对象
System.out.println(u.getName());
em.close();
}
执行结果:
-------------
Hibernate: select user0_.id as id1_0_0_, user0_.hiredate as hiredate2_0_0_, user0_.name as name3_0_0_, user0_.sn as sn4_0_0_ from User user0_ where user0_.id=?
Neld
再观察: find方法查询到的结果,如果查询到了对应的数据,返回查询到的结果即可,反之,返回null,所以可以使用ifnull判断是否有数据 getReference方法查询到的结果,无论是否查询到了数据,结果都不会是null,所以不能使用ifnull判断是否有对应的数据 如果在表中没有对应的数据,抛出异常 javax.persistence.EntityNotFoundException: Unable to find cn.wolfcode._01_hello.User with id 2
@Test
public void test() throws Exception{
EntityManager em = JPAUtil.getEntityManager();
em.getTransaction().begin();
//通过find方法查询到处于持久状态的User对象
User u = em.find(User.class, 1L);
u.setName("Lucy");//①
em.getTransaction().commit();
em.close();
}
执行结果: Hibernate: select user0_.id as id1_0_0_, user0_.hiredate as hiredate2_0_0_, user0_.name as name3_0_0_, user0_.sn as sn4_0_0_ from User user0_ where user0_.id=?
Hibernate: update User set hiredate=?, name=?, sn=? where id=?
什么是Thrift
The Apache Thrift software framework, for scalable cross-language services development, combines a software stack with a code generation engine to build services that work efficiently and s
org.json.JSONException: No value for items
在JSON解析中会遇到一种错误,很常见的错误
06-21 12:19:08.714 2098-2127/com.jikexueyuan.secret I/System.out﹕ Result:{"status":1,"page":1,&