ToB企服应用市场:ToB评测及商务社交产业平台

标题: hibernate入门 [打印本页]

作者: 写过一篇    时间: 2023-8-9 13:37
标题: hibernate入门
Hibernate 是一个开源的 ORM(对象关系映射)框架,它可以将 Java 对象与数据库表进行映射,从而实现面向对象的数据持久化。使用 Hibernate,可以避免手动编写 SQL 语句,从而提高开发效率,并且可以轻松地切换不同的数据库。
基础概念

entity 实体类是映射到数据库表中的 Java 类,它包含了与数据库表中列相对应的属性,并且可以使用注解或 XML 文件进行映射。
MySql table 关系型数据库中的表格

hibernate负责互相转换两者。将entity存入数据库,将数据库中的数据取出并创建实体类的实例提使用者。
依赖
  1. <dependencies>
  2.   
  3.   <dependency>
  4.       <groupId>org.hibernate.orm</groupId>
  5.       <artifactId>hibernate-core</artifactId>
  6.       <version>6.2.7.Final</version>
  7.   </dependency>
  8.   
  9.   <dependency>
  10.       <groupId>com.mysql</groupId>
  11.       <artifactId>mysql-connector-j</artifactId>
  12.       <version>8.0.33</version>
  13.   </dependency>
  14. </dependencies>
复制代码
配置类

maven项目将配置文件hibernate.cfg.xml放置再resource目录下即可
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
  3. <hibernate-configuration>
  4.    
  5.     <session-factory>
  6.         
  7.         <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
  8.         <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jpa_study?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai</property>
  9.         <property name="hibernate.connection.username">root</property>
  10.         <property name="hibernate.connection.password">a1b2c3</property>
  11.         
  12.         <property name="show_sql">true</property>
  13.         
  14.         <property name="format_sql">true</property>
  15.         
  16.         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  17.         
  18.         <property name="hibernate.hbm2ddl.auto">create-drop</property>
  19.         
  20.         <property name="current_session_context_class">thread</property>
  21.         <mapping />
  22.     </session-factory>
  23. </hibernate-configuration>
复制代码
工具类
  1. package org.example.util;
  2. import org.hibernate.Session;
  3. import org.hibernate.SessionFactory;
  4. import org.hibernate.Transaction;
  5. import org.hibernate.cfg.Configuration;
  6. import java.util.function.Consumer;
  7. import java.util.function.Function;
  8. public class SessionFactoryUtil {
  9.     private static final SessionFactory sessionFactory;
  10.     static {
  11.         // 构建会话工厂(configure未指定参数默认查找classpath:hibernate.cfg.xml)
  12.         sessionFactory = new Configuration().configure().buildSessionFactory();
  13.     }
  14.     /**
  15.      * 执行sql操作
  16.      * @param callback 回调函数
  17.      */
  18.     public static void execute(Consumer<Session> callback) {
  19.         Session session = sessionFactory.getCurrentSession();
  20.         Transaction transaction = session.beginTransaction();
  21.         try {
  22.             callback.accept(session);
  23.         } catch (Exception e) {
  24.             transaction.rollback();
  25.             e.printStackTrace();
  26.         }
  27.         transaction.commit();
  28.     }
  29.     /**
  30.      * 执行sql查询操作
  31.      * @param callback 回调函数
  32.      * @return 回调函数的返回值
  33.      * @param <R> 回调函数的返回值
  34.      */
  35.     public static <R> R query(Function<Session, R> callback) {
  36.         Session session = sessionFactory.openSession();
  37.         Transaction transaction = session.beginTransaction();
  38.         try {
  39.             R r = callback.apply(session);
  40.             transaction.commit();
  41.             return r;
  42.         } catch (Exception e) {
  43.             transaction.rollback();
  44.             e.printStackTrace();
  45.             return null;
  46.         }
  47.     }
  48. }
复制代码
Dao层
  1. package org.example.dao;
  2. import org.example.entity.User;
  3. import org.example.util.SessionFactoryUtil;
  4. import java.util.List;
  5. public class UserDao {
  6.     public void save(User user) {
  7.         SessionFactoryUtil.execute(session -> session.persist(user));
  8.     }
  9.     public void update(User user) {
  10.         SessionFactoryUtil.execute(session -> session.merge(user));
  11.     }
  12.     public void delete(User user) {
  13.         SessionFactoryUtil.execute(session -> session.remove(user));
  14.     }
  15.     public User findById(Long id) {
  16.         return SessionFactoryUtil.query(session -> session.get(User.class, id));
  17.     }
  18.     public List<User> findAll() {
  19.         return SessionFactoryUtil.query(session -> session.createQuery("from User", User.class).list());
  20.     }
  21. }
复制代码
测试
  1. package org.example;
  2. import org.example.dao.UserDao;
  3. import org.example.entity.User;
  4. public class Main {
  5.     public static void main(String[] args) {
  6.         User user = new User();
  7.         user.setName("zhangsan");
  8.         user.setEmail("zhangsan@qq.com");
  9.         UserDao userDao = new UserDao();
  10.         userDao.save(user);
  11.         System.out.println(userDao.findById(user.getId()));
  12.         userDao.findAll().forEach(System.out::println);
  13.     }
  14. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4