Home Java javaTutorial hibernate01: Introduction, construction, configuration file details, API details and CRM exercises: saving customers

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

Jun 23, 2017 pm 04:34 PM
api javaee study build Introduction

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

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();
    }
}
Copy after login

三, Configuration file detailed explanation

orm metadata##

<?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">
   <!-- 配置表与实体对象的关系 -->
   <!-- package属性:填写一个包名.在元素内部凡是需要书写完整类名的属性,可以直接写简答类名了. --><hibernate-mapping package="cn.itheima.domain" ><!-- 
        class元素: 配置实体与表的对应关系的
            name: 完整类名
            table:数据库表名     --><class name="Customer" table="cst_customer" ><!-- id元素:配置主键映射的属性
                name: 填写主键对应属性名
                column(可选): 填写表中的主键列名.默认值:列名会默认使用属性名
                type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.
                        每个类型有三种填法: java类型|hibernate类型|数据库类型
                not-null(可选):配置该属性(列)是否不能为空. 默认值:false
                length(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度         --><id name="cust_id"  ><!-- generator:主键生成策略(明天讲) --><generator class="native"></generator></id><!-- property元素:除id之外的普通属性映射
                name: 填写属性名
                column(可选): 填写列名
                type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.
                        每个类型有三种填法: java类型|hibernate类型|数据库类型
                not-null(可选):配置该属性(列)是否不能为空. 默认值:false
                length(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度         --><property name="cust_name" column="cust_name" ><!--  <column name="cust_name" sql-type="varchar" ></column> --></property><property name="cust_source" column="cust_source" ></property><property name="cust_industry" column="cust_industry" ></property><property name="cust_level" column="cust_level" ></property><property name="cust_linkman" column="cust_linkman" ></property><property name="cust_phone" column="cust_phone" ></property><property name="cust_mobile" column="cust_mobile" ></property></class></hibernate-mapping>
Copy after login
hibernate main configuration :

Required attribute configuration (5 items)

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

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

Metadata introduction configuration

        <!-- 引入orm元数据
            路径书写: 填写src下的路径         --><mapping resource="cn/itheima/domain/Customer.hbm.xml" />
Copy after login
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();
        
    }
}
Copy after login
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();
    }
}
Copy after login
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();//释放资源    }
}
Copy after login

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());
    }
    
}
Copy after login
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);
    }

}
Copy after login
service layer:

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

}
Copy after login
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();
    }
}
Copy after login

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 of this Website
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

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

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers Of The Witch Tree - How To Unlock The Grappling Hook
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1666
14
PHP Tutorial
1273
29
C# Tutorial
1253
24
Let's learn how to input the root number in Word together Let's learn how to input the root number in Word together Mar 19, 2024 pm 08:52 PM

When editing text content in Word, you sometimes need to enter formula symbols. Some guys don’t know how to input the root number in Word, so Xiaomian asked me to share with my friends a tutorial on how to input the root number in Word. Hope it helps my friends. First, open the Word software on your computer, then open the file you want to edit, and move the cursor to the location where you need to insert the root sign, refer to the picture example below. 2. Select [Insert], and then select [Formula] in the symbol. As shown in the red circle in the picture below: 3. Then select [Insert New Formula] below. As shown in the red circle in the picture below: 4. Select [Radical Formula], and then select the appropriate root sign. As shown in the red circle in the picture below:

Python ORM Performance Benchmark: Comparing Different ORM Frameworks Python ORM Performance Benchmark: Comparing Different ORM Frameworks Mar 18, 2024 am 09:10 AM

Object-relational mapping (ORM) frameworks play a vital role in python development, they simplify data access and management by building a bridge between object and relational databases. In order to evaluate the performance of different ORM frameworks, this article will benchmark against the following popular frameworks: sqlAlchemyPeeweeDjangoORMPonyORMTortoiseORM Test Method The benchmarking uses a SQLite database containing 1 million records. The test performed the following operations on the database: Insert: Insert 10,000 new records into the table Read: Read all records in the table Update: Update a single field for all records in the table Delete: Delete all records in the table Each operation

Learn the main function in Go language from scratch Learn the main function in Go language from scratch Mar 27, 2024 pm 05:03 PM

Title: Learn the main function in Go language from scratch. As a simple and efficient programming language, Go language is favored by developers. In the Go language, the main function is an entry function, and every Go program must contain the main function as the entry point of the program. This article will introduce how to learn the main function in Go language from scratch and provide specific code examples. 1. First, we need to install the Go language development environment. You can go to the official website (https://golang.org

Application of Python ORM in big data projects Application of Python ORM in big data projects Mar 18, 2024 am 09:19 AM

Object-relational mapping (ORM) is a programming technology that allows developers to use object programming languages ​​to manipulate databases without writing SQL queries directly. ORM tools in python (such as SQLAlchemy, Peewee, and DjangoORM) simplify database interaction for big data projects. Advantages Code Simplicity: ORM eliminates the need to write lengthy SQL queries, which improves code simplicity and readability. Data abstraction: ORM provides an abstraction layer that isolates application code from database implementation details, improving flexibility. Performance optimization: ORMs often use caching and batch operations to optimize database queries, thereby improving performance. Portability: ORM allows developers to

Deploy JavaEE applications using Docker Containers Deploy JavaEE applications using Docker Containers Jun 05, 2024 pm 08:29 PM

Deploy Java EE applications using Docker containers: Create a Dockerfile to define the image, build the image, run the container and map the port, and then access the application in the browser. Sample JavaEE application: REST API interacts with database, accessible on localhost after deployment via Docker.

What's the best way to set up a Douyin account? What is the five-piece account creation kit? What's the best way to set up a Douyin account? What is the five-piece account creation kit? Apr 02, 2024 am 09:52 AM

With the rapid development of mobile Internet, the short video application Douyin has become an indispensable part of people's daily lives. Having a popular Douyin account can not only attract the attention of fans, but also bring commercial value. So, how to set up the best Douyin account? 1. What is the best way to set up a Douyin account? 1. Clear positioning When creating a Douyin account, you must first clarify your positioning. Do you want to be a funny joker or a professional knowledge sharer? Clear positioning can help attract precise fans, thereby increasing the value of your account. 2. Account naming: A good account name can make fans remember you at a glance. The account name should be concise and clear, related to your positioning, and have a certain degree of creativity. Avoid using names that are too common to avoid confusion with others

Web Services in PHP Web Services in PHP Mar 27, 2024 am 08:06 AM

With the popularity of the Internet and mobile devices, WebService (network service) has become an essential technology. Now, WebService has become a standardized communication protocol, so it can be completed by various systems. In PHP development, WebService is also a very important and common technology. This article will explore web services in PHP, including the basics and how to use them. 1. What is a Web service? The concept of Web services refers to the provision of services on the Web

How to build an account matrix? What are the functions of matrix construction? How to build an account matrix? What are the functions of matrix construction? Mar 23, 2024 pm 06:46 PM

In today's information-rich era, social media platforms have become the main way for people to obtain and share information. For individuals and enterprises, establishing an effective account network to achieve maximum dissemination of information and enhance influence has become an urgent challenge that needs to be solved. 1. How to build an account matrix? 1. Clarify the target audience. Before building an account matrix, the key is to clearly define the target audience and gain an in-depth understanding of their needs, interests, and consumption habits, so that a more targeted content strategy can be developed. 2. Choose the appropriate platform. According to the characteristics of the target group, choose the appropriate social media platform for layout. Currently, the mainstream social media platforms include Weibo, WeChat, Douyin, Kuaishou, etc. Each platform has its own unique user groups and communication characteristics, and the selection needs to be based on the actual situation.

See all articles