#学习笔记
#仅代表个人理解,缺漏之处望评论交流
Hibernate的使用
#这里只讲Hibernate的使用,并不与任何其他框架进行整合
首先
我们要先将Hibernate下载下来,解压后找到在 lib->required下的jar包,是Hibernate所需要的jar包,然后就是写配置的了。
Hibernate的主配置文件了,叫做“ hibernate.cfg.xml "文件,这是一个默认名称,我们一般不会改变这个文件的名称,因为当程序启动时会自动加载这个文件(具体的机制是什么,我也没做太多了解)。我们在这里可以配置hibernate自身属性,数据库驱动,数据库连接和数据库方言等等。一般在src下创建一个名称为hibernate.cfg.xml的xml文件。
实例代码如下:
<hibernate-configuration>
<session-factory>
<!-- 驱动路径注意数据类型 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 数据库路径 -->
<property name="hibernate.connection.url">jdbc:mysql:///lianxi</property>
<!-- 数据库用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 数据库密码 -->
<property name="hibernate.connection.password">123</property>
<!--方言,便于hibernate对象操作转化为合适的数据库语句 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!--是否显示sql语句,sql一般会很难看 默认为false-->
<property name="hibernate.hibernate.show_sql">true</property>
<!-- 显示sql语句是否有一定格式 -->
<property name="hibernate.hibernate.format_sql">true</property>
<!-- 是否自动建表:update的意思是每次启动会检查表结构,有问题就重新调整 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!--下一个层级的映射文件,用来配置bean对象与数据表之间的关系 -->
<mapping resource="com/cn/bean/UserBean.hbm.xml"/>
</session-factory>
</hibernate-configuration>
接着就是实体类的映射文件了
hibernate可以通过实体类来操作数据库,那么每个实体类都要有一个对应的映射文件,这个映射文件将实体类与数据库结构进行对应,实体类的属性名对应数据库的字段名。而这个映射文件一般以“实体类名.hbm.xml"的格式命名。并且一般与实体类放在同一个包下。并且,每一个实体类映射文件都要在hibernate.cfg.xml这个主文件中去“注册”,如上述实例代码中的“ ”就是对下面的映射文件的注册。
实例代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 注意包名,不写的话下面要写权限名 -->
<hibernate-mapping >
<!-- 类名对应表名 -->
<class name="com.cn.bean.UserBean" table="lianxi01">
<!-- 主键使用id标签,然后对应属性名与列名 -->
<id name="id" type="int" column="id">
<!-- 自增长主键不同,数据库有不同类型的自增长类型,具体百度 -->
<generator class="identity"></generator>
</id>
<!-- 非主键映射关系,注意类型并不是单纯的java类型也不是数据类型,而是一种中间类型,注意大小写,特别是string在这里开头要小写 -->
<property name="userName" column="userName"></property>
<property name="userPassword" column="userPassword"></property>
</class>
</hibernate-mapping>
这些配置文件中的标签具体含义和功能就不在具体说了。不明白可以百度。面向百度编程。
最后就是用hibernate写dao层代码去操作数据库
hibernate对数据库操作进行了封装,也就是将我们会常用的操作方法进行了封装,也是通过jdbc来操作数据库,只不过是把方法封装了,不需要我们去一次次的每一步都去写那些繁琐重复的代码,这也是为什么要用框架,因为方便整洁,规范。hibernate有很多方法,在这就不一 一举例了,以查询为例,进行简单的演示。
public void getUser() {
//读取配置文件,获取session,开启事务
Configuration cfg = new Configuration();
cfg.configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
//实例User对象
UserBean userbean = new UserBean();
//根据id查询
UserBean userb = session.get(UserBean.class, 1);
//提交事务,关闭session sessionFactory
//tx.commit();
session.close();
sessionFactory.close();
}
这是一个简单的根据id查询数据的例子,与传统的查询不同,我们没有自己写sql语句,而是调用了hibernate中的session里的get方法,将实体类以及要查询的id值传进去,就可以查询出结果。当然,可能都会疑惑,说用框架都是为了简化开发,但是为什么我觉得反而更加麻烦了呢?其实,刚开始我也是这样觉得,但是这是因为现在只有一个查询操作,当对数据库操作的量上去了,就会体现这个框架的优点,并且我在这里为了使例子更加的通俗易懂,更加的直观,所以在例子中将每一步都写了出来,有些地方都可以封装成工具类,这样就更加方便。
补充
增:一般用save方法:session.save(userbean);
删:session.delete(usersEntity);这里的usersEntity是先通过查询得到的实体类对象;
改:session.update(usersEntity);还有saveOrUpdate方法更加强大。
查:session.get(UserBean.class, 1);例子中用到的这个方法,当然还有load()懒加载。
上述这些只是简单的举例,hibernate中对每一个操作都有多个对应方法,具体根据实际需求选择使用。
hibernate支持注解的方式去配置,注解相对与xml更加的方便,但是个人觉得,想要明白hibernate的机理,还是要把xml的方式掌握。注解在这里就不多说了,这个很简单。