search
HomeJavajavaTutorialhibernate01: Introduction, construction, configuration file details, API details and CRM exercises: saving customers

Today’s learning: What is hibernate

1. What is hibernate

What is the framework :

1. The framework is used to improve development efficiency

2. It encapsulates some functions. When we need to use these functions, we can just call them. No need to manually Implementation.

3. So the framework can be understood as a semi-finished project. As long as you know how to control these functions.

What is the hibernate framework:

Benefits of hibernate:

When operating the database, it can be done in an object-oriented manner. No need Writing SQL statements

hibernate is an ORM framework:

orm: object relational mapping. Object relational mapping

orm is divided into 4 levels:

hibernate belongs to level 4: completely object-oriented operation database

mybatis belongs to level 2

dbutils belongs to level 1

2. Construction of hibernate framework

1. Guide package

Driver package

2. Create database, prepare tables, entities

##3. Write ORM metadata (mapping configuration file between objects and tables)

4. Write the main configuration file (hibernate.cfg.xml)

<?xml  version="1.0" encoding="UTF-8"?>nbsp;hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- 
        #hibernate.dialect org.hibernate.dialect.MySQLDialect
        #hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
        #hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
        #hibernate.connection.driver_class com.mysql.jdbc.Driver
        #hibernate.connection.url jdbc:mysql:///test
        #hibernate.connection.username gavin
        #hibernate.connection.password         --> <!-- 数据库驱动 --><property>com.mysql.jdbc.Driver</property> <!-- 数据库url --><property>jdbc:mysql:///hibernate_32</property> <!-- 数据库连接用户名 --><property>root</property> <!-- 数据库连接密码 --><property>1234</property><!-- 数据库方言
            不同的数据库中,sql语法略有区别. 指定方言可以让hibernate框架在生成sql语句时.针对数据库的方言生成.
            sql99标准: DDL 定义语言  库表的增删改查
                      DCL 控制语言  事务 权限
                      DML 操纵语言  增删改查
            注意: MYSQL在选择方言时,请选择最短的方言.         --><property>org.hibernate.dialect.MySQLDialect</property>
        <!-- #hibernate.show_sql true 
             #hibernate.format_sql true--><!-- 将hibernate生成的sql语句打印到控制台 --><property>true</property><!-- 将hibernate生成的sql语句格式化(语法缩进) --><property>true</property><!-- 
        ## auto schema export  自动导出表结构. 自动建表
        #hibernate.hbm2ddl.auto create        自动建表.每次框架运行都会创建新的表.以前表将会被覆盖,表数据会丢失.(开发环境中测试使用)
        #hibernate.hbm2ddl.auto create-drop 自动建表.每次框架运行结束都会将所有表删除.(开发环境中测试使用)
        #hibernate.hbm2ddl.auto update(推荐使用) 自动生成表.如果已经存在不会再生成.如果表有变动.自动更新表(不会删除任何数据).
        #hibernate.hbm2ddl.auto validate    校验.不自动生成表.每次启动会校验数据库中表是否正确.校验失败.         --><property>update</property><!-- 引入orm元数据
            路径书写: 填写src下的路径         --><mapping></mapping></session-factory></hibernate-configuration>

5. Writing code tests

//测试Hibernate框架public class Demo {
    

    @Test//保存客户public void fun1(){
        Configuration conf = new Configuration().configure();
        
        SessionFactory sessionFactory = conf.buildSessionFactory();
        
        Session session = sessionFactory.openSession();
    
        Transaction tx = session.beginTransaction();//----------------------------------------------Customer c = new Customer();
        c.setCust_name("google公司");
        
        session.save(c);//执行保存        //----------------------------------------------        tx.commit();
        session.close();
        sessionFactory.close();
    }
}

三, Configuration file detailed explanation

orm metadata##

<?xml  version="1.0" encoding="UTF-8"?>nbsp;hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
   <!-- 配置表与实体对象的关系 -->
   <!-- package属性:填写一个包名.在元素内部凡是需要书写完整类名的属性,可以直接写简答类名了. --><hibernate-mapping><!-- 
        class元素: 配置实体与表的对应关系的
            name: 完整类名
            table:数据库表名     --><class><!-- id元素:配置主键映射的属性
                name: 填写主键对应属性名
                column(可选): 填写表中的主键列名.默认值:列名会默认使用属性名
                type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.
                        每个类型有三种填法: java类型|hibernate类型|数据库类型
                not-null(可选):配置该属性(列)是否不能为空. 默认值:false
                length(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度         --><id><!-- generator:主键生成策略(明天讲) --><generator></generator></id><!-- property元素:除id之外的普通属性映射
                name: 填写属性名
                column(可选): 填写列名
                type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.
                        每个类型有三种填法: java类型|hibernate类型|数据库类型
                not-null(可选):配置该属性(列)是否不能为空. 默认值:false
                length(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度         --><property><!--  <column name="cust_name" sql-type="varchar" ></column> --></property><property></property><property></property><property></property><property></property><property></property><property></property></class></hibernate-mapping>
hibernate main configuration :

Required attribute configuration (5 items)

 <!-- 数据库驱动 --><property>com.mysql.jdbc.Driver</property> <!-- 数据库url --><property>jdbc:mysql:///hibernate_32</property> <!-- 数据库连接用户名 --><property>root</property> <!-- 数据库连接密码 --><property>1234</property><!-- 数据库方言
            不同的数据库中,sql语法略有区别. 指定方言可以让hibernate框架在生成sql语句时.针对数据库的方言生成.
            sql99标准: DDL 定义语言  库表的增删改查
                      DCL 控制语言  事务 权限
                      DML 操纵语言  增删改查
            注意: MYSQL在选择方言时,请选择最短的方言.         --><property>org.hibernate.dialect.MySQLDialect</property>
Optional attribute configuration (3 items)

<!-- #hibernate.show_sql true 
             #hibernate.format_sql true--><!-- 将hibernate生成的sql语句打印到控制台 --><property>true</property><!-- 将hibernate生成的sql语句格式化(语法缩进) --><property>true</property><!-- 
        ## auto schema export  自动导出表结构. 自动建表
        #hibernate.hbm2ddl.auto create        自动建表.每次框架运行都会创建新的表.以前表将会被覆盖,表数据会丢失.(开发环境中测试使用)
        #hibernate.hbm2ddl.auto create-drop 自动建表.每次框架运行结束都会将所有表删除.(开发环境中测试使用)
        #hibernate.hbm2ddl.auto update(推荐使用) 自动生成表.如果已经存在不会再生成.如果表有变动.自动更新表(不会删除任何数据).
        #hibernate.hbm2ddl.auto validate    校验.不自动生成表.每次启动会校验数据库中表是否正确.校验失败.         --><property>update</property>

Metadata introduction configuration

        <!-- 引入orm元数据
            路径书写: 填写src下的路径         --><mapping></mapping>
4. Detailed explanation of hibernateAPI

Learning Configuration object

//学习Configuration对象// Configuration功能: 配置加载类.用于加载主配置,orm元数据加载public class Demo {

    @Testpublic void fun1(){//1 创建,调用空参构造Configuration conf = new Configuration();//2 读取指定主配置文件 => 空参加载方法,加载src下的hibernate.cfg.xml文件        conf.configure();//3 读取指定orm元数据(扩展),如果主配置中已经引入映射配置.不需要手动加载//conf.addResource(resourceName);//conf.addClass(persistentClass);        //4 根据配置信息,创建 SessionFactory对象SessionFactory sf = conf.buildSessionFactory();
        
    }
}
Learning SessionFactory object

//学习SessionFactory对象// SessionFactory功能: 用于创建操作数据库核心对象session对象的工厂.//                     简单说功能就一个---创建session对象//注意:1.sessionfactory 负责保存和使用所有配置信息.消耗内存资源非常大.//      2.sessionFactory属于线程安全的对象设计.//结论: 保证在web项目中,只创建一个sessionFactory.public class Demo2 {

    @Testpublic void fun1(){//1 创建,调用空参构造Configuration conf = new Configuration();//2 读取指定主配置文件 => 空参加载方法,加载src下的hibernate.cfg.xml文件        conf.configure();//3 读取指定orm元数据(扩展),如果主配置中已经引入映射配置.不需要手动加载//conf.addResource(resourceName);//conf.addClass(persistentClass);        //4 根据配置信息,创建 SessionFactory对象SessionFactory sf = conf.buildSessionFactory();//--------------------------------------------------//5 获得session//打开一个新的session对象        sf.openSession();//获得一个与线程绑定的session对象(明天讲解)        sf.getCurrentSession();
    }
}
Learning Session object: adding, deleting, checking and modifying

//学习Session对象//session对象功能: 表达hibernate框架与数据库之间的连接(会话).session类似于//                JDBC年代的connection对象. 还可以完成对数据库中数据的增删改查操作.//                session是hibernate操作数据库的核心对象public class Demo3 {

    @Test//事务操作public void fun1(){//1 创建,调用空参构造Configuration conf = new Configuration().configure();//2 根据配置信息,创建 SessionFactory对象SessionFactory sf = conf.buildSessionFactory();//3 获得sessionSession session = sf.openSession();//4 session获得操作事务的Transaction对象//获得操作事务的tx对象//Transaction tx = session.getTransaction();//开启事务并获得操作事务的tx对象(建议使用)Transaction tx2 = session.beginTransaction();//----------------------------------------------        
        //----------------------------------------------tx2.commit();//提交事务tx2.rollback();//回滚事务session.close();//释放资源sf.close();//释放资源    }
    
    @Test//session的新增public void fun2(){//1 创建,调用空参构造Configuration conf = new Configuration().configure();//2 根据配置信息,创建 SessionFactory对象SessionFactory sf = conf.buildSessionFactory();//3 获得sessionSession session = sf.openSession();//4 session获得操作事务的Transaction对象//获得操作事务的tx对象//Transaction tx = session.getTransaction();//开启事务并获得操作事务的tx对象(建议使用)Transaction tx2 = session.beginTransaction();//----------------------------------------------Customer c = new Customer();
        c.setCust_name("传智播客");
        
        session.save(c);//----------------------------------------------tx2.commit();//提交事务session.close();//释放资源sf.close();//释放资源    }
    @Test//session的查询//查询id为1的customer对象public void fun3(){//1 创建,调用空参构造Configuration conf = new Configuration().configure();//2 根据配置信息,创建 SessionFactory对象SessionFactory sf = conf.buildSessionFactory();//3 获得sessionSession session = sf.openSession();//4 session获得操作事务的Transaction对象//获得操作事务的tx对象//Transaction tx = session.getTransaction();//开启事务并获得操作事务的tx对象(建议使用)Transaction tx2 = session.beginTransaction();//----------------------------------------------        
        Customer customer = session.get(Customer.class, 1l);
        
        System.out.println(customer);//----------------------------------------------tx2.commit();//提交事务session.close();//释放资源sf.close();//释放资源    }
    @Test//session的修改//修改id为1的customer对象的name属性为黑马程序员public void fun4(){//1 创建,调用空参构造Configuration conf = new Configuration().configure();//2 根据配置信息,创建 SessionFactory对象SessionFactory sf = conf.buildSessionFactory();//3 获得sessionSession session = sf.openSession();//4 session获得操作事务的Transaction对象//获得操作事务的tx对象//Transaction tx = session.getTransaction();//开启事务并获得操作事务的tx对象(建议使用)Transaction tx2 = session.beginTransaction();//----------------------------------------------//1 获得要修改的对象Customer c = session.get(Customer.class, 1l);//2 修改c.setCust_name("黑马程序员");//3 执行update        session.update(c);//----------------------------------------------tx2.commit();//提交事务session.close();//释放资源sf.close();//释放资源    }
    @Test//session的删除//删除id为1的customer对象public void fun5(){//1 创建,调用空参构造Configuration conf = new Configuration().configure();//2 根据配置信息,创建 SessionFactory对象SessionFactory sf = conf.buildSessionFactory();//3 获得sessionSession session = sf.openSession();//4 session获得操作事务的Transaction对象//获得操作事务的tx对象Transaction tx = session.getTransaction();
        tx.begin();//开启事务并获得操作事务的tx对象(建议使用)Transaction tx2 = session.beginTransaction();//----------------------------------------------//1 获得要修改的对象Customer c = session.get(Customer.class, 1l);//2 调用delete删除对象        session.delete(c);//----------------------------------------------tx2.commit();//提交事务session.close();//释放资源sf.close();//释放资源    }
}

5. CRM Practice: Saving Customers

Refer to the previous steps for the previous steps Notes.

5. Idea analysis

Before completing the assignment, you can write a tool class that is easy to operate to avoid repeated code:

public class HibernateUtils {private static SessionFactory sf;    static{//1 创建,调用空参构造Configuration conf = new Configuration().configure();//2 根据配置信息,创建 SessionFactory对象 sf = conf.buildSessionFactory();
    }    //获得session => 获得全新sessionpublic static Session openSession(){//3 获得sessionSession session = sf.openSession();                return session;
        
    }//获得session => 获得与线程绑定的sessionpublic static Session getCurrentSession(){//3 获得sessionSession session = sf.getCurrentSession();        return session;
    }public static void main(String[] args) {
        System.out.println(HibernateUtils.openSession());
    }
    
}
Job core code:

web layer:

/**
 * Servlet implementation class AddCustomerServlet */public class AddCustomerServlet extends HttpServlet {private static final long serialVersionUID = 1L;    private CustomerService customerService  = new CustomerServiceImpl();protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1 获得参数并封装到Customer对象Customer c = new Customer();try {
            BeanUtils.populate(c, request.getParameterMap());
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }//2 调用Service保存客户        customerService.save(c);//3 重定向到客户列表response.sendRedirect(request.getContextPath()+"/ListCustomerServlet");
    }protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}
service layer:

public class CustomerServiceImpl implements CustomerService {private CustomerDao customerDao = new CustomerDaoImpl();public void save(Customer c) {//调用Dao保存客户        customerDao .save(c);
    }

}
Dao layer:

public class CustomerDaoImpl implements CustomerDao {public void save(Customer c) {//1 获得sessionSession session = HibernateUtils.openSession();//2 打开事务Transaction tx = session.beginTransaction();//3 执行保存        session.save(c);//4 提交事务        tx.commit();//5 关闭资源        session.close();
    }
}

The above is the detailed content of hibernate01: Introduction, construction, configuration file details, API details and CRM exercises: saving customers. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Java Platform Independence: Compatibility with different OSJava Platform Independence: Compatibility with different OSMay 13, 2025 am 12:11 AM

JavaachievesplatformindependencethroughtheJavaVirtualMachine(JVM),allowingcodetorunondifferentoperatingsystemswithoutmodification.TheJVMcompilesJavacodeintoplatform-independentbytecode,whichittheninterpretsandexecutesonthespecificOS,abstractingawayOS

What features make java still powerfulWhat features make java still powerfulMay 13, 2025 am 12:05 AM

Javaispowerfulduetoitsplatformindependence,object-orientednature,richstandardlibrary,performancecapabilities,andstrongsecurityfeatures.1)PlatformindependenceallowsapplicationstorunonanydevicesupportingJava.2)Object-orientedprogrammingpromotesmodulara

Top Java Features: A Comprehensive Guide for DevelopersTop Java Features: A Comprehensive Guide for DevelopersMay 13, 2025 am 12:04 AM

The top Java functions include: 1) object-oriented programming, supporting polymorphism, improving code flexibility and maintainability; 2) exception handling mechanism, improving code robustness through try-catch-finally blocks; 3) garbage collection, simplifying memory management; 4) generics, enhancing type safety; 5) ambda expressions and functional programming to make the code more concise and expressive; 6) rich standard libraries, providing optimized data structures and algorithms.

Is Java Truly Platform Independent? How 'Write Once, Run Anywhere' WorksIs Java Truly Platform Independent? How 'Write Once, Run Anywhere' WorksMay 13, 2025 am 12:03 AM

JavaisnotentirelyplatformindependentduetoJVMvariationsandnativecodeintegration,butitlargelyupholdsitsWORApromise.1)JavacompilestobytecoderunbytheJVM,allowingcross-platformexecution.2)However,eachplatformrequiresaspecificJVM,anddifferencesinJVMimpleme

Demystifying the JVM: Your Key to Understanding Java ExecutionDemystifying the JVM: Your Key to Understanding Java ExecutionMay 13, 2025 am 12:02 AM

TheJavaVirtualMachine(JVM)isanabstractcomputingmachinecrucialforJavaexecutionasitrunsJavabytecode,enablingthe"writeonce,runanywhere"capability.TheJVM'skeycomponentsinclude:1)ClassLoader,whichloads,links,andinitializesclasses;2)RuntimeDataAr

Is java still a good language based on new features?Is java still a good language based on new features?May 12, 2025 am 12:12 AM

Javaremainsagoodlanguageduetoitscontinuousevolutionandrobustecosystem.1)Lambdaexpressionsenhancecodereadabilityandenablefunctionalprogramming.2)Streamsallowforefficientdataprocessing,particularlywithlargedatasets.3)ThemodularsystemintroducedinJava9im

What Makes Java Great? Key Features and BenefitsWhat Makes Java Great? Key Features and BenefitsMay 12, 2025 am 12:11 AM

Javaisgreatduetoitsplatformindependence,robustOOPsupport,extensivelibraries,andstrongcommunity.1)PlatformindependenceviaJVMallowscodetorunonvariousplatforms.2)OOPfeatureslikeencapsulation,inheritance,andpolymorphismenablemodularandscalablecode.3)Rich

Top 5 Java Features: Examples and ExplanationsTop 5 Java Features: Examples and ExplanationsMay 12, 2025 am 12:09 AM

The five major features of Java are polymorphism, Lambda expressions, StreamsAPI, generics and exception handling. 1. Polymorphism allows objects of different classes to be used as objects of common base classes. 2. Lambda expressions make the code more concise, especially suitable for handling collections and streams. 3.StreamsAPI efficiently processes large data sets and supports declarative operations. 4. Generics provide type safety and reusability, and type errors are caught during compilation. 5. Exception handling helps handle errors elegantly and write reliable software.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.