Hibernate学习笔记

本文介绍了J2EE架构的发展历程及各层技术选型变化,重点讲解了Hibernate框架的诞生背景、核心思想及其基本使用方法,包括配置文件设置、类表映射及简单的增删查改操作。

J2EE体系结构分为三层:
1.表示层(JSP/Servlet)
2.业务层(EJB/Session Bean)
3.数据层(JDBC/EJB(Entiry Bean))。
EJB诞生于98/99年,性能存在很大问题,占用服务器资源多,导致机器瘫痪等严重后果.EJB对数据层的解决方案:实体Bean,使用的是代理模式.
EJB3.0:持久层,没有实体Bean,发布于2006年5月8号,吸收了Hibernate的思想,但是EJB必须要在服务器上才能运行,Hibernate脱离服务器.

Servlet存在的问题:编写HTML代码非常困难,2000年5月诞生了Struts解决了表示层的问题.

Hibernate所在的层次:位于数据层,解决怎么连接数据库.更确切的说是解决ORM,性能高,完整的ORM解决方案.它诞生于2001年,是Gavin King

业余时间的作品.从此,java开发人员对EJB的狂热追捧结束。

业务层:2004年出来的Spring解决了业务层的问题.

调用调用调用
Struts-------->Spring-------->Hibernate--------->Database

Hibernate核心思想:将数据库中的数据映射到JavaBean对象上,并可直接将对象属性上的数据写到数据库相应字段上。

下面来开始写第一个Hibernate程序:
1.创建一个JavaBean,User.java,提供一些了getter,setter方法来操作里面的属性,此Bean对应数据库中的users表:
package cn.itcast;

public class User {
private int id;

private String name;

private int age;

private int gender;

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public int getGender() {
return gender;
}

public void setGender(int gender) {
this.gender = gender;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

2.创建Hibernate配置文件:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
<hibernate-configuration>
<!-- SessionFactory配置 -->
<session-factory>
<!-- 指定jdbc驱动 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 指定URL -->
<property name="connection.url">jdbc:mysql:///hibernate</property>
<!-- 指定用户名 -->
<property name="connection.username">root</property>
<!-- 指定密码 -->
<property name="connection.password">tianxiangdong</property>
<!-- 指定MYSQL对应的Dialect以匹配其平台特性 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 是否将运行期生成的SQL语句输出到控制台 -->
<property name="show_sql">true</property>
<!-- 是否格式化输出的SQL语句 -->
<property name="format_sql">true</property>
<!-- 映射文件配置,注意文件名必须包含其相对于根的全路径 -->
<mapping resource="cn/itcast/User.hbm.xml" />
</session-factory>
</hibernate-configuration>

3.创建类表映射配置文件:
<?xml version="1.0" encoding="gb2312"?>
<!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="cn.itcast.User" table="users">
<!-- id子元素定义了实体的标识列,指定了当前映射类名的id对应表中的id -->
<id name="id" column="id">
<!-- 因为各种数据库的标识列生成方式有所不同,这里指定id生成方式 -->
<generator class="identity" />
</id>
<!--
属性/字段映射,如果名字相同,可以忽略后面的cloumn,
例如下面的<property name="gender" column="gender" />
可以换成<property name="gender"/>
-->
<property name="name" column="user_name" />
<property name="age" column="use_age" />
<property name="gender" column="gender" />
</class>
</hibernate-mapping>

4.编写客户端的类来测试:
package cn.itcast;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Client {

public static void main(String[] args) {
/**
* Configuration负责管理Hibernate配置信息.当我们调用下面这条语句时,
* Hibernate会在当前的CLASSPATH中搜寻hibernate.cfg.xml文件,并将
* 其加载到内存中.
* Configuration对象的configure方法,提供了不同的形式:
* Configuration configure()
* Configuration configure(org.w3c.dom.Documentdocument)
* Configuration configure(FileconfigFile)
* Configuration configure(Stringresource)
* Configuration configure(URLurl)
* 在使用时,可以根据不同的需要做不同的配置。
*/
Configuration config = new Configuration().configure();

/**
* Configuration实例config会根据配置信息构造出SessionFactory实例.
* Hibernate建议一个应用程序只能有一个SessionFactoty实例
*/
SessionFactory factory = config.buildSessionFactory();

/**
* Session是Hibernate持久化操作的基础.它的实例由SessionFactory
* 负责创建.Hibernate建议一个线程只创建一个session,
*/
Session session = null;

try {
session = factory.openSession();

/**
* 开始一个事务
*/
session.beginTransaction();

/**
* session的save方法
*/
// User user = new User();
// user.setName("lisi");
// user.setAge(56);
// user.setGender(0);
// session.save(user);
/**
* get方法
*/
//User user = (User)session.get(User.class,2);
/**
* update方法
*/
//User user = (User)session.get(User.class,2);
//user.setAge(33);
/**
* delete方法
*/
//User user = (User)session.get(User.class,2);
//session.delete(user);
//也可以通过HQL指定删除条件
//session.createQuery("delete User where id=2").executeUpdate();

/**
* 通过Query接口进行数据查询
*/
List list = session.createQuery(" from User").list();
Iterator iterator = list.iterator();
User user = new User();

while (iterator.hasNext()) {
user = (User) iterator.next();
System.out.println(user.getId() + "\t" + user.getName() + "\t"
+ user.getAge() + "\t" + user.getGender());
}

/**
* 提交事务
*/
session.getTransaction().commit();
} catch (Exception e) {
/**
* 发生异常则回滚
*/
session.getTransaction().rollback();
e.printStackTrace();
} finally{
/***
* 关闭session
*/
session.close();
/**
*
*/
session = null;
}

**项目名称:** 基于Vue.js与Spring Cloud架构的博客系统设计与开发——微服务分布式应用实践 **项目概述:** 本项目为计算机科学与技术专业本科毕业设计成果,旨在设计并实现一个采用前后端分离架构的现代化博客平台。系统前端基于Vue.js框架构建,提供响应式用户界面;后端采用Spring Cloud微服务架构,通过服务拆分、注册发现、配置中心及网关路由等技术,构建高可用、易扩展的分布式应用体系。项目重点探讨微服务模式下的系统设计、服务治理、数据一致性及部署运维等关键问题,体现了分布式系统在Web应用中的实践价值。 **技术架构:** 1. **前端技术栈:** Vue.js 2.x、Vue Router、Vuex、Element UI、Axios 2. **后端技术栈:** Spring Boot 2.x、Spring Cloud (Eureka/Nacos、Feign/OpenFeign、Ribbon、Hystrix、Zuul/Gateway、Config) 3. **数据存储:** MySQL 8.0(主数据存储)、Redis(缓存与会话管理) 4. **服务通信:** RESTful API、消息队列(可选RabbitMQ/Kafka) 5. **部署与运维:** Docker容器化、Jenkins持续集成、Nginx负载均衡 **核心功能模块:** - 用户管理:注册登录、权限控制、个人中心 - 文章管理:富文本编辑、分类标签、发布审核、评论互动 - 内容展示:首页推荐、分类检索、全文搜索、热门排行 - 系统管理:后台仪表盘、用户与内容监控、日志审计 - 微服务治理:服务健康检测、动态配置更新、熔断降级策略 **设计特点:** 1. **架构解耦:** 前后端完全分离,通过API网关统一接入,支持独立开发与部署。 2. **服务拆分:** 按业务域划分为用户服务、文章服务、评论服务、文件服务等独立微服务。 3. **高可用设计:** 采用服务注册发现机制,配合负载均衡与熔断器,提升系统容错能力。 4. **可扩展性:** 模块化设计支持横向扩展,配置中心实现运行时动态调整。 **项目成果:** 完成了一个具备完整博客功能、具备微服务典型特征的分布式系统原型,通过容器化部署验证了多服务协同运行的可行性,为云原生应用开发提供了实践参考。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值