对于hibernate的介绍,网络上一搜一堆,恐怕我写的也没前辈总结的好。
这个博主总结的十分好,方便大家欣赏 http://blog.csdn.net/liujiahan629629/article/details/21442607
真正要掌握,还得需要自己动手,才能丰衣足食。
所需jar包
jar包版本不同,找的地址也不同。这里用到的是 hibernate-release-5.2.10 版本的jar包
除了这些jar包,还需要数据库驱动jar,根据自己用的数据库自定,这里用到的是oracle
2.jar包导入好,看看配置,在配置之前,看下实体和表结构。
实体 Users
package com.hib.entity;public class Users {private Integer id;private String name;private String pass;private String address;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPass() {return pass;}public void setPass(String pass) {this.pass = pass;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public Users(Integer id, String name, String pass, String address) {super();this.id = id;this.name = name;this.pass = pass;this.address = address;}public Users() {super();}@Overridepublic String toString() {return "Users [id=" + id + ", name=" + name + ", pass=" + pass + ", address=" + address + "]";}}
表结构
在src下 hibernate.cfg.xml配置,如果不知道里面的配置怎么写。可以通过在下载的jar包中搜索hibernate.cfg.xml,里面有配置信息。
hibernate.cfg.xml 配置如下
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property><property name="hibernate.connection.username">ssh</property><property name="hibernate.connection.password">ssh</property><property name="hibernate.connection.url">jdbc:oracle:thin:@127.0.0.1:1521:xe</property><!-- 方言 --><property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property><!-- 可视化sql --><property name="hibernate.show_sql">true</property><!-- 格式化sql,自动对可视化sql换行,对齐 --><property name="hibernate.format_sql">true</property><!-- 映射文件配置 --><mapping resource="User.hbm.xml"/></session-factory>
</hibernate-configuration>
3. User.hbm.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><!-- name:是实体 table是表名称 --><class name="com.hib.entity.Users" table="TEST_USER"><id name="id"><!-- 主键自增策略,在下面会专门提到 --><generator class="increment"></generator></id><!-- name:是实体中属性的名称,column:是表中字段的名称,type是数据类型 在这里发现后面的 pass和 address 没有写column和type如果表字段和实体属性名称一致,可以省略不写--><property name="name" column="name" type="java.lang.String"/><property name="pass"/><property name="address"/></class></hibernate-mapping>
4.测试数据连接是否配置成功
package com.hib.test;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;import com.hib.entity.Users;public class TestConn {// 获取sessionpublic static Session getSession(){// 加载配置Configuration cfg = new Configuration().configure();// 获取sessionFactorySessionFactory factory = cfg.buildSessionFactory();// 获取sessionSession session = factory.openSession();return session;}// 查询@Testpublic void query(){Session session = getSession();// 查询Users users = session.get(Users.class, 1);System.out.println(users);//关闭资源session.close();}// 在进行增删改时 ,好控制事务 ---- 插入@Testpublic void insert(){Session session = getSession();// 开启事务Transaction tx = session.beginTransaction();Users users = new Users(null, "xyz", "xyz", "china");// 插入session.save(users);// 事务提交tx.commit();// 事务回滚//tx.rollback();session.close();}// 更新数据前 需要先查询出修改的数据@Testpublic void update(){Session session = getSession();Transaction tx = session.beginTransaction();Users users = session.get(Users.class, 1);users.setAddress("郑州");users.setName("小李飞刀");session.update(users);tx.commit();session.close();}// 删除 需要先出现出删除的数据@Testpublic void delete(){Session session = getSession();Transaction tx = session.beginTransaction();Users users = session.get(Users.class, 1);session.delete(users);tx.commit();session.close();}}
这里讲解下关于hibernate中主键的生成策略
increment 一般用于测试,多并发环境中存在主键取值冲突,这里文章包括下面写的都是用的
这个,方便测试。实际项目中,没有人会用到。
2. sequence oralcle数据库专用
在oracle数据库中创建序列 : create sequence st_id start with 7 increment by 1;
意思是:创建序列名为 st_id 从7开始,每次增加1
hibernate中默认值是 hibernate_sequence
<id name="id">
<generator class="sequence">
<param name="sequence_name">st_id</param>
</generator>
</id>
3. identity :适用于mysql sqlserver 相当于2
<id name="id">
<generator class="identity"></generator>
</id>
4. uuid 生成32位长度全球唯一的字符串,适用于分布式系统中
5. foreign : 专用于1:1 共享主键的从表方
6. assigned: 手动指定ID,一般不用
这里值得一提:在使用sequence时,配置文件中写
<id name="id" column="id">
<generator class="sequence">
这里 name为 sequence_name,但我当时配置时候写的是sequence,出了错。搜了好久,也没有发现错误,并且别人写的也是sequence。这里我也没有去看其他版本,这里我使用是5.2版,可能是版本之间的问题。希望注意下。如果你不知道配置是sequence 还是sequence_name,可以搜当前版本的文件 sequence,会有一些文件和文件夹,找里面的配置,看里面写的是什么。
<param name="sequence_name">sqs_id</param>
</generator>
</id>
这里仅仅是个测试,后面的会继续更新,不足希望多多指教。
转载于:https://blog.51cto.com/zhuws/1932652