1.hibernate.cfg.xml配置
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<!-- 通常,一个session-factory节点代表一个数据库 -->
<session-factory>
<!-- 1.数据库连接配置 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hib-demo</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<!--数据库方法配置,hibernate在运行的时候,会根据不同的方言生成符合当前数据库语法的sql -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 2.其他相关配置 -->
<!--2.1显示hibernate在运行的时候执行的sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 2.2格式化sql
<property name="hibernate.format_sql">true</property>-->
<!-- 2.3自动建表 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 3.加载所有映射
<mapping resource="cn/itcast/a_hello/Employee.hbm.xml"/>-->
</session-factory>
</hibernate-configuration>
2.User对象
package cn.itcast.a_collection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class User {
private int userId;
private String userName;
private Set<String> address;
private List<String> addressList=new ArrayList<String>();
private Map<String,String> addressMap=new HashMap<String,String>();
public Map<String, String> getAddressMap() {
return addressMap;
}
public void setAddressMap(Map<String, String> addressMap) {
this.addressMap = addressMap;
}
public List<String> getAddressList() {
return addressList;
}
public void setAddressList(List<String> addressList) {
this.addressList = addressList;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Set<String> getAddress() {
return address;
}
public void setAddress(Set<String> address) {
this.address = address;
}
}
3.User.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--
This mapping demonstrates content-based discrimination for the
table-per-hierarchy mapping strategy, using a formula
discriminator.
-->
<!--映射文件:映射一个实体类对象,描述一个对象最终可以直接保存对象数据到数据库中 -->
<!-- package:要映射的对象所在的包(可选,如果不指定,此文件下所有的类都要指定全路径)
auto-import 默认为true,在写HQL的时候自动导入包名
如果指定为false,在写HQL的时候必须要写上类的全名-->
<hibernate-mapping package="cn.itcast.a_collection">
<class name="User" table="t_user">
<id name="userId" column="id">
<generator class="native"></generator>
</id>
<property name="userName"></property>
<!-- set集合属性的映射
name 指定要映射的set集合的属性
table 集合属性要映射到的表
key 指定集合表t_address的外键字段
element指定集合表的其他字段
type元素类型一定要指定-->
<set name="address" table="t_address">
<key column="uid"></key>
<element column="address" type="string"></element>
</set>
<!--list集合属性的映射
list-index 指定的是排序列的名称,因为要保证list集合的有序 -->
<list name="addressList" table="t_addressList">
<key column="uid"></key>
<list-index column="idx"></list-index>
<element column="address" type="string"></element>
</list>
<!-- Map集合属性的映射
key指定外键字段
map-key 指定 map的key
element 指定map的value-->
<map name="addressMap" table="t_addressMap">
<key column="uid"></key>
<map-key column="shortName" type="string"></map-key>
<element column="address" type="string"></element>
</map>
</class>
</hibernate-mapping>
4.Junit测试
package cn.itcast.a_collection;
import java.util.HashSet;
import java.util.Set;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.junit.Test;
public class App {
private static SessionFactory sf;
static{
sf=new Configuration()
.configure()
.addClass(User.class)
.buildSessionFactory();
}
//保存set
@Test
public void testSaveSet() throws Exception{
Session session=sf.openSession();
Transaction tx=session.beginTransaction();
Set<String> addressSet=new HashSet<String>();
addressSet.add("广州");
addressSet.add("深圳");
User user=new User();
user.setUserName("Jack");
user.setAddress(addressSet);
session.save(user);
tx.commit();
session.close();
}
//保存list
@Test
public void testSaveList() throws Exception{
Session session=sf.openSession();
Transaction tx=session.beginTransaction();
User user=new User();
user.setUserName("Tom");
/*user.getAddressList().add("广州");
user.getAddressList().add("深圳");
session.save(user);*/
user.getAddressMap().put("A0001", "广州");
user.getAddressMap().put("A0002", "深圳");
session.save(user);
tx.commit();
session.close();
}
}