一、什么是Hibernate?
Hibernate是一个ORM(Object Relationship Mapping:对象关系映射)框架,即hibernate提供了Java Beans与数据库表-字段映射的功能。Java beans类对应表,类的成员变量对应表的字段名,成员变量的值对应字段的值。
注意:
(1)JavaBeans一般不使用继承(当然,hibernate提供了继承对应的功能)。
(2)JavaBeans通过使用集合的方式,来实现表与表之间的关联关系(一对一,一对多,多对多之类),hibernate也提供相应的方法实现表的关联关系,这在接下来会讲到。
二、用hibernate实现helloworld
步骤一:配置hibernate.cfg.xml(主要配置如下)
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.url">数据库连接地址</property>
<property name="hibernate.connection.driver_class">数据库连接驱动</property>
<property name="hibernate.connection.username">数据库连接用户名</property>
<property name="hibernate.connection.password">数据库连接密码</property>
<!-- mapping配置了数据需要的映射信息,这个文件放在对应包下,反映了JavaBean的映射 -->
<mapping resource="com/test/withXml/entity/User.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
步骤二:创建XXX类(这是一个JavaBean)与相应的XXX.hbm.xml文件
我这里定义为User类(User有id,name,location,data这四个属性),那么相应的,创建User.hbm.xml文件(主要配置如下)。
<hibernate-mapping package="这里写包的名称">
<class name="类的名称,如果上一行没有package的话,这里需要是全类名" table="数据库中的表名">
<--! id是整个表的主键,hibernate建议使用不参与业务逻辑的属性作为主键 -->
<id name="主键属性名" type="属性的类型">
<column name="在表中对应的字段名">
<--! 这里设置了id增长的模式,native表示使用数据库自身的增长模式 -->
<generator class="native">
</id>
<property name="普通属性名" type="属性的类型" column="字段名"></property>
</class>
</hibernate-mapping>
步骤三:在测试类中,写出相应代码,完成数据库的操作,主要代码如下。
@Test
public void test(){
//1.获取配置文件信息
Configuration configuration = new Configuration.configure();
//2.创建sessionFactory
//2.1在hibernate4.3之后,需要在ServiceRegistry中进行注册
ServiceRegistry serviceRegistry = new StrandardServiceRegistryBuilder.applySettings(configuration.getProperties).build();
//2.2使用configuration创建工厂
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
//3.获取session
Session session = sesssionFactory.openSession();
//4.开启事务
Transaction transaction = session.beginTransaction();
//5.执行操作
session.save(Object object);
//6.提交事务
transaction.commit();
//7.关闭事务
transaction.close();
//8.关闭session
session.close();
}
三、hibernate框架中,对象的3种状态
临时状态:程序员通过new或者其他方法,在程序中创建出来的对象,此时处于临时状态。
持久状态:将程序中的对象保存至数据库中,便形成了持久状态。(session一级缓存中的对象,也属于持久状态)
游离状态:当我们从数据库中取出来的对象,称为游离状态,即使session关闭了,也属于游离状态。
四、hibernate中session的常用方法
save(object)保存对象到数据库中
get(object.class,id)从数据库中取出对象
update(object)根据主键信息更新对象
delete(object)根据主键删除对象,即如果除主键外其他成员变量不同也没有影响
saveOrUpdate(object)根据主键信息,如果主键存在,就更新,主键不存在,就save
flush()将一级缓存中的数据冲进数据库中,默认在事务提交的时候使用
reflush()将数据库中对应的数据冲进一级缓存中
clear()清除一级缓存中的数据
close()关闭session
evict(Object)清除一级缓存中指定的对象
save与persist区别:save会立即执行,并返回对象的主键;persist不会把主键填入数据库中,只有当flush的时候才会填入。
update与merge区别:当修改的数据id找不到的时候,update会报错,而merge却会把数据新建id存入数据库。
五、多表映射
https://blog.csdn.net/qq_38977097/article/details/81355840