当前位置: 首页 > news >正文

Hibernate之helloworld 案例

Hibernate之helloworld 案例

在这里插入图片描述

// ==================== 1. pom.xml 依赖配置 ====================
/*
<project><dependencies><!-- Hibernate Core --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.6.10.Final</version></dependency><!-- MySQL Driver --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency><!-- 日志 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.36</version></dependency></dependencies>
</project>
*/// ==================== 2. 实体类 User.java ====================
package com.example.entity;import java.util.Date;public class User {private Long id;private String username;private String email;private String phone;private Date createTime;// 无参构造函数(Hibernate 必需)public User() {}public User(String username, String email, String phone) {this.username = username;this.email = email;this.phone = phone;this.createTime = new Date();}// Getters and Setterspublic Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public Date getCreateTime() {return createTime;}public void setCreateTime(Date createTime) {this.createTime = createTime;}@Overridepublic String toString() {return "User{id=" + id + ", username='" + username + "', email='" + email + "', phone='" + phone + "', createTime=" + createTime + '}';}
}// ==================== 3. 实体映射文件 User.hbm.xml ====================
/*
放在 src/main/resources/com/example/entity/User.hbm.xml<?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 package="com.example.entity"><class name="User" table="users"><!-- 主键映射 --><id name="id" column="id"><generator class="identity"/></id><!-- 属性映射 --><property name="username" column="username" type="string" length="50" not-null="true"/><property name="email" column="email" type="string" length="100" not-null="true"/><property name="phone" column="phone" type="string" length="20"/><property name="createTime" column="create_time" type="timestamp" not-null="true"/></class>
</hibernate-mapping>
*/// ==================== 4. Hibernate 配置文件 hibernate.cfg.xml ====================
/*
放在 src/main/resources/hibernate.cfg.xml<?xml version="1.0" encoding="UTF-8"?>
<!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">com.mysql.cj.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/testdb?useSSL=false&amp;serverTimezone=UTC</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">password</property><!-- 数据库方言 --><property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property><!-- 连接池配置 --><property name="hibernate.connection.pool_size">10</property><!-- 显示SQL --><property name="hibernate.show_sql">true</property><property name="hibernate.format_sql">true</property><!-- 自动建表策略:update表示更新表结构 --><property name="hibernate.hbm2ddl.auto">update</property><!-- 当前Session上下文 --><property name="hibernate.current_session_context_class">thread</property><!-- 映射文件 --><mapping resource="com/example/entity/User.hbm.xml"/></session-factory>
</hibernate-configuration>
*/// ==================== 5. Hibernate 工具类 HibernateUtil.java ====================
package com.example.util;import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;public class HibernateUtil {private static final SessionFactory sessionFactory;static {try {// 从 hibernate.cfg.xml 创建 SessionFactorysessionFactory = new Configuration().configure().buildSessionFactory();} catch (Throwable ex) {System.err.println("SessionFactory 创建失败: " + ex);throw new ExceptionInInitializerError(ex);}}public static SessionFactory getSessionFactory() {return sessionFactory;}public static void shutdown() {getSessionFactory().close();}
}// ==================== 6. DAO 接口 UserDao.java ====================
package com.example.dao;import com.example.entity.User;
import java.util.List;public interface UserDao {// 创建void save(User user);// 更新void update(User user);// 删除void delete(Long id);// 根据ID查询User findById(Long id);// 查询所有List<User> findAll();// 根据用户名查询List<User> findByUsername(String username);
}// ==================== 7. DAO 实现 UserDaoImpl.java ====================
package com.example.dao.impl;import com.example.dao.UserDao;
import com.example.entity.User;
import com.example.util.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.Query;
import java.util.List;public class UserDaoImpl implements UserDao {@Overridepublic void save(User user) {Transaction tx = null;try (Session session = HibernateUtil.getSessionFactory().openSession()) {tx = session.beginTransaction();session.save(user);tx.commit();} catch (Exception e) {if (tx != null) tx.rollback();throw e;}}@Overridepublic void update(User user) {Transaction tx = null;try (Session session = HibernateUtil.getSessionFactory().openSession()) {tx = session.beginTransaction();session.update(user);tx.commit();} catch (Exception e) {if (tx != null) tx.rollback();throw e;}}@Overridepublic void delete(Long id) {Transaction tx = null;try (Session session = HibernateUtil.getSessionFactory().openSession()) {tx = session.beginTransaction();User user = session.get(User.class, id);if (user != null) {session.delete(user);}tx.commit();} catch (Exception e) {if (tx != null) tx.rollback();throw e;}}@Overridepublic User findById(Long id) {try (Session session = HibernateUtil.getSessionFactory().openSession()) {return session.get(User.class, id);}}@Overridepublic List<User> findAll() {try (Session session = HibernateUtil.getSessionFactory().openSession()) {Query<User> query = session.createQuery("FROM User", User.class);return query.list();}}@Overridepublic List<User> findByUsername(String username) {try (Session session = HibernateUtil.getSessionFactory().openSession()) {Query<User> query = session.createQuery("FROM User WHERE username LIKE :username", User.class);query.setParameter("username", "%" + username + "%");return query.list();}}
}// ==================== 8. 测试类 TestHibernateCRUD.java ====================
package com.example;import com.example.dao.UserDao;
import com.example.dao.impl.UserDaoImpl;
import com.example.entity.User;
import com.example.util.HibernateUtil;
import java.util.List;public class TestHibernateCRUD {public static void main(String[] args) {UserDao userDao = new UserDaoImpl();try {// 1. 创建用户System.out.println("========== 1. 创建用户 ==========");User user1 = new User("zhangsan", "zhangsan@example.com", "13800138000");User user2 = new User("lisi", "lisi@example.com", "13900139000");User user3 = new User("wangwu", "wangwu@example.com", "13700137000");userDao.save(user1);userDao.save(user2);userDao.save(user3);System.out.println("用户创建成功!");// 2. 查询所有用户System.out.println("\n========== 2. 查询所有用户 ==========");List<User> allUsers = userDao.findAll();allUsers.forEach(System.out::println);// 3. 根据ID查询System.out.println("\n========== 3. 根据ID查询 ==========");User foundUser = userDao.findById(1L);System.out.println("找到用户: " + foundUser);// 4. 更新用户System.out.println("\n========== 4. 更新用户 ==========");if (foundUser != null) {foundUser.setEmail("zhangsan_new@example.com");foundUser.setPhone("13811138111");userDao.update(foundUser);System.out.println("用户更新成功!");// 验证更新User updatedUser = userDao.findById(1L);System.out.println("更新后的用户: " + updatedUser);}// 5. 根据用户名搜索System.out.println("\n========== 5. 根据用户名搜索 ==========");List<User> searchResult = userDao.findByUsername("wang");System.out.println("搜索结果:");searchResult.forEach(System.out::println);// 6. 删除用户System.out.println("\n========== 6. 删除用户 ==========");userDao.delete(3L);System.out.println("用户删除成功!");// 验证删除System.out.println("\n删除后的所有用户:");List<User> remainingUsers = userDao.findAll();remainingUsers.forEach(System.out::println);} catch (Exception e) {e.printStackTrace();} finally {// 关闭 SessionFactoryHibernateUtil.shutdown();}}
}// ==================== 9. 数据库建表 SQL ====================
/*
CREATE DATABASE IF NOT EXISTS testdb DEFAULT CHARACTER SET utf8mb4;USE testdb;CREATE TABLE users (id BIGINT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL,phone VARCHAR(20),create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
*/// ==================== 项目结构说明 ====================
/*
项目结构:
src/
├── main/
│   ├── java/
│   │   └── com/
│   │       └── example/
│   │           ├── entity/
│   │           │   └── User.java
│   │           ├── dao/
│   │           │   ├── UserDao.java
│   │           │   └── impl/
│   │           │       └── UserDaoImpl.java
│   │           ├── util/
│   │           │   └── HibernateUtil.java
│   │           └── TestHibernateCRUD.java
│   └── resources/
│       ├── hibernate.cfg.xml
│       └── com/
│           └── example/
│               └── entity/
│                   └── User.hbm.xml配置要点:
1. hibernate.cfg.xml:主配置文件,包含数据库连接和全局配置
2. User.hbm.xml:实体映射文件,定义对象与表的映射关系
3. HibernateUtil:管理 SessionFactory 的工具类
4. 事务管理:每个操作都需要手动管理事务
*/
http://www.dtcms.com/a/573630.html

相关文章:

  • 建立企业网站的详细步骤爱站云网站建设heikw
  • SSM框架题库
  • 电子基础】逻辑器件全解析:从门电路到FPGA,选型与应用指南
  • 龙岩网站建设平台手机创建自己网站
  • 人工智能学习中深度学习之python基础之 类
  • K8s/Kubernetes(v1.23.17)三节点集群部署全过程的总结与问题回顾
  • 调试oracle函数性能(嵌入存储过程)
  • React 元素渲染
  • 个人开发者短信验证码接入指南-阿里云
  • 移动端优秀网站上海传媒公司名字
  • 建设一个网站的需求分析一个网站开发流程
  • PsPasswd(7.19):远程修改密码的边界与合规建议
  • 【钉钉多元表格(自动化)】钉钉群根据表格 自动推送当天值日生信息
  • LangFlow源码深度解析:Component核心机制与生态体系
  • dede织梦仿站网站建设做网站赚谁的钱
  • DropLoRA技术详解:克服大模型微调过拟合的创新方法
  • 【剑斩OFFER】算法的暴力美学——串联所有单词的字串
  • 学习Linux——进程管理
  • 在k8s中部署seaweedfs,上传文件到seaweedfs方法
  • 极氪与火山引擎深化合作,Data Agent赋能车辆数据管理效率
  • Kotlin 使用命令行编译
  • 1450dpi+93% 相似度,这款发光纳米纤维让皮肤纹理“复印”更精准
  • 匠魂(1)
  • LeetCode Hot100 自用
  • 做婚介网站可行性报告模板绵阳网站建设多少钱
  • 单位服务器网站打不开网站参考页面设计
  • 陇南建设网站大良营销网站建设信息
  • mac M系列芯片 unity 安装会遇到的错误以及解决
  • Reka UI - 一款免费开源的 Vue 无头 UI 组件库,样式定制开发项目的绝佳选择
  • 个人二级网站怎么做营销咨询服务合同