SSH框架之Hibernate入门

1.什么是Hibernate?

Hibernate框架是当今主流的java持久层框架,也是一个开放源码的orm框架,由于对jdbc进行了轻量的对象封装,使其更具有简单易学,灵活性强,扩展性强等等特点

2.为什么学习Hibernate?

提高编程效率,也就是说少写代码多喝茶,快快乐乐过人生啊!

以下开始正式介绍Hibernate5,本着详尽的原则我会尽量写清每一步,也是复习一下,如有错误,欢迎指出.

  1. 下载Hibernate5传送门
  2. 解压Hibernate5
    1. documentation:存放Hibernate文档和API文档
    2. lib:存放Hibernate编译和运行所依赖的jar包,注意request子目录下的所有jar是Hibernate项目必须的jar包
    3. project:存放Hibernate各种相关的源代码

大功告成,现在我们已经完成了一大半了,累了就休息会,不累就继续看吧.

3.环境构建

  1. 新建javaweb项目,注意把版本更换成2.5 
  2.  
  3. 复制required中的所有jar包到工程中lib文件夹中,等等别急还有几个包要复制,连接数据库的jar包,和日志输出的jar包,全部jar包如下:

注意:junit,hamcrest只是用来单元测试的,不必担心包没错.

啦啦啦,愉快的cv结束了,接下来我们就要深入一点点认识Hibernate了.

  • 我们在web阶段就已经知道了用javeBean进行数据的封装,我们Hibernate是和数据库打交道的当然也要有属于自己的实体类
  • 创建实体类----Customer(客户)
  • eclipse安Alt+Shift+S可以生成set和get方法.对了对了要注意包名和类名的大小写规范(也是告诉自己的),还有一点,可以将toSring也生成,方便用print大法排错哈哈哈.
  • 到此实体类完成
  • 感觉是不是成就感满满?但是下面才是重点

 

 

4.创建映射文件

什么是映射文件?呀!通俗来说吧映射文件就是将刚才建立的实体类同数据库相关联让Hibernate知道哪个实体要映射到哪个表,哪个属性对应哪个字段,毕竟人家是面向对象的.

  • 映射文件名称和位置没有固定要求,心随你动,想写哪就写哪(但是通常写在实体类所在的包中,名字为XXX.hbm.xml)
  • 好了xml文件建立完毕,接下来就要引入约束了
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  • 约束添加完成;接着我们要认识几个标签,是他们来建立实体与数据库中的联系
  • <hibernate-mapping>根标签,每个xxx.hbmxml有且只有一个,可选属性默认即

<hibernate-mapping></hibernate-mapping>

<class>标签:

<class name="com.cn.entity.Customer" table="t_customer">
</class>

name属性值:刚才实体类的全路径,用来表示是哪个类要生成表

  1. table属性值:数据库中表的名字叫什么

  2. 总结:一个填实体类名,一个填生成的表名

<id>标签:定义主键​​​​​

<id name="cust_id" column="cust_id">
	<generator class="native"></generator>
</id>

 

  1. name属性:定义主键,你想让哪个是主键哪个就是主键,你做主(用cust_id吧)
  2. column属性:生成表字段的名称,默认可以不写
  3. generator class="native" 设置主键自增长

配置其他属性<property>标签:

<property name="cust_name" column="cust_name"></property>
<property name="cust_soucre" column="cust_soucre"></property>
  1. name属性:实体类的属性名称 

  2. column属性:生成表字段名称(当然也可以不写)


好了Hibernate的映射文件完成了,可以休息下了,但是你会觉得怎么没有配置数据库的信息?你不配置它怎么会知道哪个数据库?况且代码还没写那,一直在写配置文件,而且那个mysql是驱动还没有用那.

5.Hibernate核心配置文件:

注意:若不是ssh整合协同开发核心配置文件名称和位置是固定的:src下面;名称:hibernate.cfg.xml

引入约束(让Hibernate认识标签)

<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
  1. 根标签:<hibernate-configuration>属性值默认
  2. <session-factory>属性值默认
<hibernate-configuration>
	<session-factory>
	</session-factory>
</hibernate-configuration>

第一部分:配置数据库连接,必须要有的!

注意:

  1. 加载jdbc驱动
  2. 指定要连接的数据库
  3. 用户名
  4. 密码
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
<property name="hibernate.connection.username">你的用户名</property>
<property name="hibernate.connection.password">你的密码</property>

第二部分:可选的(更加清楚的观测Hibernate对数据库的操作)

  1. 输出底层sql语句:<property name="hibernate.show_sql">true</property>
  2. 看见format是不是很亲切,对!就是格式化输出sql语句:<property name="hibernate.format_sql">true</property>
  3. 自动建表(有的话会更新表)<property name="hibernate.hbm2ddl.auto">update</property>
  4. 配置mysql特有的语句(如:limit)<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  5. 绑定session:<property name="hibernate.current_session_context_class">thread</property>
  6. 绑定session的原因:将 Session 与本地线程绑定,保证 Session 对象绝对是一个单线程对象

第三部分:最最最重要!要把映射文件放到核心配置文件中

  1. <mapping resource="com/cn/entity/customer.hbm.xml"/>

第二三部分代码:

<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.current_session_context_class">thread</property>
<mapping resource="com/cn/entity/customer.hbm.xml"/>

好啦好啦!!终于完成了,接下来就剩检验配置是否正确了.

来 让我们写个测试类!

  1. 第一步:加载hibernate核心配置文件---在hibernate里面封装对象就是到src下面找到hibernate.cfg.xml文件
  2. 第二步:创建SessionFactory对象
  3. 第三步:使用SessionFactory创建session对象
  4. 第四步:开启事务
  5. 第五步:添加一个客户
  6. 第六步:提交事务
  7. 注意!注意!关闭资源

以下是测试代码:

@Test
	public void testAdd() {
	
		Configuration cfg = new Configuration();
		cfg.configure();
		SessionFactory sessionFactory = cfg.buildSessionFactory();
		Session session = sessionFactory.openSession();
		Transaction tx = session.beginTransaction();
		Customer customer = new Customer();
		customer.setCust_name("Sweet_ywq");
		session.save(customer);
		tx.commit();
		session.close();
		sessionFactory.close();
	}

运行结果:

//不积跬步,无以至千里;不积小流,无以成江海。与君共勉 ! 加油 !

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值