hibernate的核心API:
在hibernate的框架中,比较核心的是对数据库的增删改查的四个方法:
Session()、delete()、update()
对于查询的方法来说,分为:单个对象的获取,多个表对象的查询获取
单个对象:get()、load(),而对于多个表查询的方法:createQuery(hql语句)还能设置一个参数
hibernate中映射文件:
1、映射文件 的id主键生成策略:
2、普通数据类型的映射
hibernate的映射文件的集合映射
1、映射Set集合
2、映射List集合
3、映射Map集合
在hibernate的框架中,比较核心的是对数据库的增删改查的四个方法:
Session()、delete()、update()
对于查询的方法来说,分为:单个对象的获取,多个表对象的查询获取
单个对象:get()、load(),而对于多个表查询的方法:createQuery(hql语句)还能设置一个参数
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.Test;
public class text {
//添加
@Test
public void text01(){
Configuration config = new Configuration().configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
User u = new User();
u.setName("张三");
Address address1 = new Address();
address1.setName("xx");
address1.setPhone("123456");
address1.setCode("51235");
address1.setAddre("sadasda");
address1.setUser(u);
Address address2 = new Address();
address2.setName("xx2");
address2.setPhone("1234562");
address2.setCode("512352");
address2.setAddre("sadasda2");
address2.setUser(u);
u.getAddress().add(address1);
u.getAddress().add(address2);
session.save(u);
tx.commit();
session.close();
}
//查询
@Test
public void test02(){
Configuration config = new Configuration().configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
User user = (User)session.get(User.class, 1);
System.out.println(user.getName() + ".." + user.getAddress());
tx.commit();
session.close();
}
//删除
@Test
public void test03(){
Configuration config = new Configuration().configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
User user = (User)session.get(User.class, 1);
session.delete(user);
tx.commit();
session.close();
}
//修改
@Test
public void test04(){
Configuration config = new Configuration().configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
User user = (User)session.get(User.class, 1);
user.setName("李四");
session.update(user);
tx.commit();
session.close();
}
}
hibernate中映射文件:
1、映射文件 的id主键生成策略:
<id name="id">
<!--
class里面可以填写的值:
identity:实现主键id的自增长,适合mysql
native: 在identity、sequence、hilo中选择一个适合数据库的,
mysql的会去选择identity,oracle会去选择sequence,都不是的话就会选择hilo(高低位算法)
sequence:实现主键id的序列增长,适合Oracle
assigned:让开发者自己手动设置主键id的值
increment:通过hibernate自己来对id实现的自增长
uuid: 通过hibernate自己来生成一个String的32位字符串
-->
<generator class="native" />
</id>
2、普通数据类型的映射
<property name="name" column="pname" type="xxx" length="xxx" />
type的数据类型:
1)、可以写java写法,默认为在实体类中的类型
整数:java.lang.Integer
字符串:java.lang.String ...
2)在hibernate中的写法(为java写法的类型小写类型):
整数:integer
字符串:string ...
<property name="name" column="pname" type="datetime" />
<property name="name" column="pname" type="string" length="1024000" />
hibernate的映射文件的集合映射
1、映射Set集合
<!-- Set集合的映射,Set特点是无序,不重复
key:外键
-->
<set name="addressSet" table="t_addressSet">
<key column="uid"></key>
<element type="string" column="address"></element>
</set>
//采用Set的集合方法的映射
private Set<String> addressSet = new HashSet<String>();
2、映射List集合
//采用List的集合方法的映射
private List<String> addressList = new ArrayList<String>();
<!-- List的映射,List的特点为:有序,可重复
所以需要一个额外的列来设置序号
-->
<list name="addressList" table="t_addressList">
<key column="uid"></key>
<index column="idx"></index>
<element type="string" column="address"></element>
</list>
3、映射Map集合
//采用Map的集合方法的映射,键值对
private Map<String,String> addressMap = new HashMap<String,String>();
<!-- Map的集合,Map特点:无序可重复
所以需要提供一个额外的Map-key,来提供键值对
-->
<map name="addressMap" table="t_addressMap">
<key column="uid"></key>
<map-key type="string" column="addressno"></map-key>
<element type="string" column="address"></element>
</map>
通过今天的加强对hibernate的练习,能够更加清晰去了解session的各种核心方法和配置文件,映射文件的更多的配置