hibernate(三)(

来源:互联网 发布:拼多多互刷平台源码 编辑:程序博客网 时间:2024/05/16 19:57

这篇内容是紧接着hibernate(二)的,因为博客字数不允许,只能分成两份发了。

 

下面是些对应关系的测试代码,都是用Jutil进行单元测试的。
package cn.itcast.demo.test;

import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;

import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.junit.Test;

import cn.itcast.demo.entities.User;

public class CollectionTest {

 @Test
 public void test() {
  SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
  Session session = sessionFactory.openSession();
  Transaction tx = session.beginTransaction();

  User user = new User();
  // 1, Set
  user.getAddresses().add("aa");
  user.getAddresses().add("bb");
  user.getAddresses().add("cc");

  // 2, List
  // user.getPhoneNumbers().add("111");
  // user.getPhoneNumbers().add("222");

  // 3, Array<Object>
  // String addresses2[] = {"add11", "add22"};
  // user.setAddresses2(addresses2);

  // 4, Array<primitive-value>
  // int[] phoneNumbers2 = {111, 222};
  // user.setPhoneNumbers2(phoneNumbers2);

  // 5, Bag
  // user.getAddresses3().add("add111");
  // user.getAddresses3().add("add222");

  // 6, Map
  // user.getPhoneNumbers3().put("aa", "11");
  // user.getPhoneNumbers3().put("bb", "22");

  // System.out.println(user.getAddresses().getClass());
   session.save(user);
  // System.out.println(user.getAddresses().getClass());

  user = (User) session.get(User.class, 9);
  System.out.println(user.getAddresses());

  tx.commit();
  session.close();
 }

 public static void main(String[] args) {
  Set<User> set = new LinkedHashSet<User>();// new TreeSet<User>();// new HashSet<User>();
     // LinkedHashMap
  set.add(new User(33));
  set.add(new User(11));
  set.add(new User(1));
  set.add(new User(22));

  System.out.println(set);
  
 }
}
package cn.itcast.demo.test;

import org.hibernate.Hibernate;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.junit.Test;

import cn.itcast.demo.entities.Group;
import cn.itcast.demo.entities.User;

public class LazyTest {

 @Test
 public void test() {
  SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
  Session session = sessionFactory.openSession();
  Transaction tx = session.beginTransaction();

  Group group = (Group) session.get(Group.class, 25);
//   group.getRoles();
//  System.out.println(group.getRoles());
  Hibernate.initialize(group.getRoles());

  // User user = (User) session.get(User.class, 19);
  // System.out.println(user.getGroup());

  tx.commit();
  session.close();

  System.out.println(group.getRoles());
 }
}
package cn.itcast.demo.test;

import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.junit.Test;

import cn.itcast.demo.entities.Group;
import cn.itcast.demo.entities.Role;

public class ManyToManyTest {

 @Test
 public void test() {
  SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
  Session session = sessionFactory.openSession();
  Transaction tx = session.beginTransaction();

//   Group group = new Group();
//   group.setName("testManyToMany");
//  
//   Role role = new Role();
//   role.setName("testManyToMany");
//  
//   // group.getRoles().add(role);
//   role.getGroups().add(group);
//  
//   session.save(group);
//   session.save(role);
  
  Group group = (Group) session.get(Group.class, 25);
  //group.getRoles().clear();
//  System.out.println(group.getRoles());

  tx.commit();
  session.close();
 }
}
package cn.itcast.demo.test;

import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.junit.Test;

import cn.itcast.demo.entities.Group;
import cn.itcast.demo.entities.User;

public class OneToManyTest {

 @Test
 public void test() {
  SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
  Session session = sessionFactory.openSession();
  Transaction tx = session.beginTransaction();

  User user = new User();
  Group group = new Group();
  Group group2 = new Group();
  
  group2.setParent(group);
  user.setGroup(group);
  // group.getUsers().add(user);
  session.save(user);
  session.save(group);
  session.save(group2);

  // 通过User,可以得到关联的Group
  // user = (User) session.get(User.class, 21);
  // System.out.println(user.getGroup());

  // 通过Group,可以得到关联的User
  // group = (Group) session.get(Group.class, 3);
  // System.out.println(group.getUsers());

  tx.commit();
  session.close();
 }
}
package cn.itcast.demo.test;

import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.junit.Test;

import cn.itcast.demo.entities.IdCard;
import cn.itcast.demo.entities.User;

public class OneToOneTest {

 @Test
 public void test() {
  SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
  Session session = sessionFactory.openSession();
  Transaction tx = session.beginTransaction();

  User user = new User();
  // user.setId(52);
  user.setName("testOneToOne");

  IdCard idCard = new IdCard();
  idCard.setSn("123");

  idCard.setUser(user);
  // User不以维护关系
  // user.setIdCard(idCard);
  session.save(user);
  session.save(idCard);

  tx.commit();
  session.close();
 }
}

这个其实在添加一个表的时候就要将其放入hibernate.cfg.xml中。之所以将其放倒最后,就是想引起读者的注意的。
<!DOCTYPE hibernate-configuration PUBLIC
 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
 <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
 <property name="connection.url">jdbc:mysql:///hibernatedemo2</property>
 <property name="connection.username">root</property>
 <property name="connection.password">1234</property>
 <property name="connection.driver_class">com.mysql.jdbc.Driver</property>

 <property name="hbm2ddl.auto">update</property>
 <property name="show_sql">true</property>
 <property name="format_sql">false</property>

 <mapping resource="cn/itcast/demo/entities/User.hbm.xml" />
 <mapping resource="cn/itcast/demo/entities/Group.hbm.xml" />
 <mapping resource="cn/itcast/demo/entities/IdCard.hbm.xml" />
 <mapping resource="cn/itcast/demo/entities/Role.hbm.xml" />
</session-factory>
</hibernate-configuration>

最后我再写一些自己的总结:
1.我先犯得一个主要错误就是,在group中,在定义表明的时候,我将table设置为group了,这个错误不仅只有我一个人出现这样的问题。
后经过汤老师的指点,原来group是关键字,在定义表名的时候不能设置关键字的。
2.在上面得实体类的代码中,发现了,equals和hashCode两个方法,之所以这样写,是为了在内存中查找id的。
3.设置index索引是为了给list取出数据后时还是按顺序取出,如果不索引取出的数据是无序的。
上面就是我的一些个人觉得应该注意的地方。