目前已经学了如何搭建Hibernate的开发环境,以及Hibernate对应的API了…在快速入门还没讲解的就是配置文件是怎么配置的。所以,本博文主要讲解主配置文件以及映射配置文件..java
主配置文件主要配置:mysql
经常使用的配置信息均可以在hibernate-distribution-3.6.0.Final\project\etc\hibernate.properties
目录下能够找到..sql
经常使用的配置信息均可以在hibernate.properties文件中找到,所以,咱们来搜索一下:数据库
<!-- 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">root</property> <!-- 数据库方法配置, hibernate在运行的时候,会根据不一样的方言生成符合当前数据库语法的sql【大体能够理解成:不一样的版本对应的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>
须要咱们注意的是自动建表,其中它有几个参数:markdown
值得注意的是:mapping的属性使用的是resource!session
<!--3. 加载映射文件--> <mapping resource="zhongfucheng/domain/User.hbm.xml"/>
加载映射文件其实咱们能够在程序中加载,不必定在配置文件中配置….通常地,咱们在测试的时候通常使用程序的方式去加载映射文件【方便】并发
那么怎么在程序中加载映射文件呢?oracle
在Configuration对象中提供了addClass()的方法。app
通常地咱们的映射配置文件和JavaBean对象是放在同一个包下的。而且映射文件的命名是有规范的。所以Hibernate是能够经过提供的JavaBean对象从而找到相对应的映射文件!
//获取加载配置管理类 Configuration configuration = new Configuration(); //加载User的映射文件! configuration.configure().addClass(User.class);
映射文件: 映射一个实体类对象; 描述一个对象最终实现能够直接保存对象数据到数据库中
一般地,咱们都是一个JavaBean对象对应一个映射配置文件,而且配置文件和JavaBean对象是放在同一个目录下的
咱们按照快速入门的映射配置文件一步一步来说解:
<!--在domain包下--> <hibernate-mapping package="zhongfucheng.domain"> <!--类名为User,表名也为User--> <class name="User" table="user"> <!--主键映射,属性名为id,列名也为id--> <id name="id" column="id"> <!--根据底层数据库主键自动增加--> <generator class="native"/> </id> <!--非主键映射,属性和列名一一对应--> <property name="username" column="username"/> <property name="cellphone" column="cellphone"/> <property name="password" column="password"/> </class> </hibernate-mapping>
<hibernate-mapping>
节点经常使用的属性:
<class>
节点class 映射某一个对象的(通常状况,一个对象写一个映射文件,即一个class节点)
经常使用的属性:
<property>
节点property是普通属性的映射,即JavaBean普通的成员变量属性就使用property来描述!
经常使用的属性:
值得注意的是:若是列名称为数据库关键字,须要用反引号或改列名。固然啦,咱们通常不使用关键字来做为列名
7———-
<id>
节点id是主键映射….
<id>
节点下还有子节点<generator class=""/>
主键的自动生成策略
指定主键生成策略为手动指定主键的值
指定主键生成策略为UUID生成的值
foreign(外键的方式, one-to-one讲)
<composite-id>
主键通常分为两种:
单列主键就是上面那种,那么若是要使用多列复合主键就须要使用<composite-id>
节点来配置了
public class User2 { private String username; private String password; private String cellphone; //各类setter和getter方法 }
package zhongfucheng.domain; /** * Created by ozc on 2017/5/6. */ public class CompositeKey implements Serializable{ private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
package zhongfucheng.domain; /** * Created by ozc on 2017/5/6. */ public class User2 { //在User对象中维护这个主键对象 private CompositeKey key; private String cellphone; public CompositeKey getKey() { return key; } public void setKey(CompositeKey key) { this.key = key; } public String getCellphone() { return cellphone; } public void setCellphone(String cellphone) { this.cellphone = cellphone; } }
public static void main(String[] args) { //建立对象 User2 user2 = new User2(); CompositeKey compositeKey = new CompositeKey(); compositeKey.setUsername("123"); compositeKey.setPassword("123"); user2.setCellphone("111"); user2.setKey(compositeKey); //获取加载配置管理类 Configuration configuration = new Configuration(); //加载User的映射文件! configuration.configure().addClass(User2.class); //建立Session工厂对象 SessionFactory factory = configuration.buildSessionFactory(); //获得Session对象 Session session = factory.openSession(); //使用Hibernate操做数据库,都要开启事务,获得事务对象 Transaction transaction = session.getTransaction(); //开启事务 transaction.begin(); //添加User2对象到数据库 session.save(user2); //提交事务 transaction.commit(); //关闭Session session.close(); }
由于Hibernate在取得的时候是须要实现Serializable这个接口的对象的…所以compositeKey必须实现Serializable接口