hibernate 是一个轻量级ORM(对象关系映射关系)工具.简化了java应用程序和数据库交互的开发,三层架构中的持久层
(代替了MVC中的JDBC部分)
(只和数据库打交道)
首要配置:导入对应的jar包 以及连接数据库要用的包,我用的是mysql数据库.所以导入 mysql-connector-java-5.1.41-bin.jar
一共十三个jar包
主要体系结构:
User 实体类.对应数据库中的表 成员变量对应表里的字段
User.hbm.xml javaBean的映射文件,实体类和数据库表的映射配置 后缀为hbm.xml,名字最好对应实体类
hibernate.cfg.xml 对hibernate的全局设置 后缀为cfg.xml 名字可以自定义
实体类:
private Integer sid;
private Integer age;
private String name;
//无参构造方法
//有参构造方法
//成员变量的set和get方法
实体类映射文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--实体类和数据库表的映射配置-->
<hibernate-mapping>
<!--实体类和数据库表的映射关系 name是要建立映射关系的类(包名+类名) table是表名 -->
<class name="com.uu.mode.User" table="">
<!-- 主键配置 name是类中成员变量名字, column是表中主键的字段名 -->
<id name="' column="">
<!-- generator是主键生成策略(字段约束) native的意思是跟随数据库 -->
<generator class="native"></generator>
</id>
<!-- 这两个是字段映射 name是成员变量名 column是字段名 -->
<property name="" column=""></property>
<property name="" column=""></property>
</class>
</hibernate-mapping>
//generator一共有7种写法,比较常用的便是native
//自行选择identity(递增),sequence(序列,无法在mysql中使用)或hilo(一种算法)中的一个
全局设置:
<!-- 对hibernate全局设置 -->
<hibernate-configuration>
<!--对session工厂的设置 -->
<session-factory >
<!--四本一言的设置 -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate?characterEncoding=UTF8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<!--控制是否显示sql语句 -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!-- hbm2ddl.auto的参数作用是:自动创建/更新/验证数据库表结构,根据参数内容做不同处理 -->
<property name="hbm2ddl.auto">update</property>
<!-- 引入映射文件 -->
<mapping resource="com/uu/model/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
四本: 数据库名称 数据库密码 数据库驱动 以及数据库路径
一言: 也就是方言,不同的数据库他们的SQL语句也不同.所以这里设置不同的方言,内置函数也会不同
show_sql 是否显示sql语句 format_sql是给sql语句排版(格式化),否则会输出语句集中在一起
mapping result则是引入实体类的映射文件
generator是hibernate主键生成,常用的是native
hbm2ddl.auto 如果不适用可以不写
create 每次加载hibernate都会删除上一次的表,根据model类生成新表(数据丢失)
create-drop 每次加载都会创建一个新表.sessionFactory关闭后自动删除(数据丢失)
update 启动时会根据model类自动更新表结构,即使表结构改变,表中数据仍然存在;如果表不存在会直接创建一个表(要有数据库存在).运行后才会创建 (推荐使用)
validate 每次加载hibernate时,验证表结构(如果表不存在或结构不一致会抛出异常),不会创建新表,可以插入新数据