【极客营】Hibernate入门到精通- hibernate的快速入门

本文详细介绍如何使用Hibernate5进行数据库操作,包括环境搭建、配置文件编写、实体类及映射文件创建,最后通过示例演示如何实现数据的保存。
作者:何征天

课程视频地址:https://ke.qq.com/course/273907

  hibernate的jar包下载和导入

1. 下载相应的jar包等
  * http://sourceforge.net/projects/hibernate/files/hibernate-orm/5.0.7.Final/hibernate-release-5.0.7.Final.zip/download    
    
2. 解压后对目录结构有一定的了解

 

Hibernate开发包内容:

 Jar包的导入(开发环境的搭建)

新建web工程Hibernate5_d01_c03

引入Hibernate开发所需要的jar包

   * MySQL的驱动jar包
  * Hibernate开发需要的jar包(资料/hibernate-release-5.0.7.Final/lib/required/所有jar包)

  

基于hibernate实现数据库表CRUD的操作(重点)

开发准备和配置(三个准备,7个步骤)

【第一个准备】:创建表结构:


create database hibernate_day01;

use hibernate_day01;

CREATE TABLE `cst_customer` (

  `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',

  `cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)',

  `cust_user_id` bigint(32) DEFAULT NULL COMMENT '负责人id',

  `cust_create_id` bigint(32) DEFAULT NULL COMMENT '创建人id',

  `cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源',

  `cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业',

  `cust_level` varchar(32) DEFAULT NULL COMMENT '客户级别',

  `cust_linkman` varchar(64) DEFAULT NULL COMMENT '联系人',

  `cust_phone` varchar(64) DEFAULT NULL COMMENT '固定电话',

  `cust_mobile` varchar(16) DEFAULT NULL COMMENT '移动电话',

  PRIMARY KEY (`cust_id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

【第二个准备】: 编写Hibernate核心的配置文件

1. 在src目录下,创建名称为hibernate.cfg.xml的配置文件
2. 在XML中引入DTD约束

<!DOCTYPE hibernate-configuration PUBLIC

    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">


打开:资料/hibernate-release-5.0.7.Final/project/etc/hibernate.properties,可以查看具体的配置信息
        * 必须配置的4大参数
            #hibernate.connection.driver_classcom.mysql.jdbc.Driver
            #hibernate.connection.urljdbc:mysql:///test
            #hibernate.connection.usernamegavin
            #hibernate.connection.password
        
        * 数据库的方言(必须配置的)
            #hibernate.dialectorg.hibernate.dialect.MySQLDialect
        
        * 可选的配置
            #hibernate.show_sqltrue
            #hibernate.format_sqltrue
            #hibernate.hbm2ddl.autoupdate
        
        * 引入映射配置文件(一定要注意,要引入映射文件,框架需要加载映射文件)
            * <mapping 
resource="com/igeek/demo1/Customer.hbm.xml"/>
    

4. 具体的配置如下

<?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.jdbc.Driver</property>

       <property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property>

       <property name="hibernate.connection.username">root</property>

       <property name="hibernate.connection.password">123456</property>

       <property name="hibernate.dialect org.hibernate.dialect.MySQLDialect"></property>

    </session-factory>

</hibernate-configuration>

5.  在com.igeek.demo1中创建TestCustomer类,测试是否连接上数据库,代码如下:

packagecom.igeek.demo1;

 

import org.hibernate.cfg.Configuration;

import org.junit.Test;

 

publicclass TestCustomer {

    @Test

    publicvoid run1(){

       //hibernate读取连接数据的配置文件hibernate.cfg.xml

       Configuration config = new Configuration();

       config.configure();

       //连接数据库

       SessionFactory factory = config.buildSessionFactory();

    }

}

5.  在com.igeek.demo1中创建TestCustomer类,测试是否连接上数据库,代码如下:

packagecom.igeek.demo1;

 

import org.hibernate.cfg.Configuration;

import org.junit.Test;

 

publicclass TestCustomer {

    @Test

    publicvoid run1(){

       //hibernate读取连接数据的配置文件hibernate.cfg.xml

       Configuration config = new Configuration();

       config.configure();

       //连接数据库

       SessionFactory factory = config.buildSessionFactory();

    }

}

【第三个准备】:编写实体类和ORM映射文件

【编写Customer实体类】

在com.igeekdemo1包中创建Customer.java类,类中代码如下:

1. Customer类的代码如下:

publicclass Customer {

    private Long cust_id;

    private String cust_name;

    private Long cust_user_id;

    private Long cust_create_id;

    private String cust_source;

    private String cust_industry;

    private String cust_level;

    private String cust_linkman;

    private String cust_phone;

    private String cust_mobile;

    // 省略get和set方法

}

【创建类与表结构的映射】

1. 在JavaBean所在的包下创建映射的配置文件
 * 默认的命名规则为:实体类名.hbm.xml
 * 在xml配置文件中引入约束(引入的是hibernate3.0的dtd约束,不要引入4的约束)

<!DOCTYPE hibernate-mapping PUBLIC

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

2. 如果不能上网,编写配置文件是没有提示的,需要自己来配置
  * 先复制http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd --> window--> preferences --> 搜索xml --> 选择xml catalog --> 点击add --> 选择URI --> 粘贴复制的地址 --> 选择location,选择本地的DTD的路径

【请注意】在配置完catalog之后,需要重新打开Customer.hbm.xml文件



3. 编写映射的配置文件

<?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>

    <class name="com.igeek.demo1.Customer" table="cst_customer">

       <id name="cust_id" column="cust_id">

           <generator class="native"></generator>

       </id>

       <property name="cust_name" column="cust_name"/>

       <property name="cust_user_id" column="cust_user_id"/>

       <property name="cust_create_id" column="cust_create_id"/>

       <property name="cust_source" column="cust_source"/>

       <property name="cust_industry" column="cust_industry"/>

       <property name="cust_level" column="cust_level"/>

       <property name="cust_linkman" column="cust_linkman"/>

       <property name="cust_phone" column="cust_phone"/>

       <property name="cust_mobile" column="cust_mobile"/>

    </class>

</hibernate-mapping>

 4.在hibernate.cfg.xml中引入上述配置文件

       <mapping resource="com/igeek/demo1/Customer.hbm.xml"/>

7个步骤】 : java编程实现CRUD,基本示例如下:


 保存(插入)数据

在TestCustomer类中编写testSave方法用来保存数据,代码如下:

publicclass TestCustomer {

    @Test

    publicvoid testSave(){

       //先加载配置文件,默认是src目录下的hibernate.cfg.xml

       Configuration config = new Configuration().configure();

       //创建sessionFactory对象

       SessionFactory factory = config.buildSessionFactory();

       //创建session对象

       Session session = factory.openSession();

       //开启事务

       Transaction tr = session.beginTransaction();

       //编写保存代码

       Customer c = new Customer();

       c.setCust_name("刘亦菲");

       c.setCust_mobile("1381383838888");

       //保存客户

       session.save(c);

       //提交事务

       tr.commit();

       //释放资源

       session.close();

       factory.close();

      

    }

}



<think>好的,我现在需要帮助用户了解达到就业水平需要学会哪些Java相关技能。用户之前已经询问过Java从入门精通的学习路径,现在进一步想了解就业所需的具体技能。首先,我要回顾之前的对话,确保这次回答能够衔接上,并且补充更具体的就业要求。 用户的需求是明确的,他们想知道为了找到工作,需要掌握哪些Java相关的技术和工具。考虑到不同公司的要求可能不同,我需要涵盖常见的技能点,包括核心Java、数据库、框架、工具、项目经验等。 首先,我应该分模块来组织内容,让结构清晰。参考之前的回答,用户可能已经对基础知识有了解,所以这里需要更深入,特别是企业常用的技术和实际开发中的工具链。 接下来,考虑Java就业市场的常见要求,比如Spring Boot、MyBatis、微服务、数据库(SQL和NoSQL)、版本控制工具Git,以及项目经验的重要性。此外,分布式系统、缓存、消息队列等高级主题也是必须的。 然后,我需要确保涵盖软技能,比如问题解决能力、团队协作,以及面试准备,比如算法题和设计模式。这些虽然不完全是技术,但对就业同样关键。 还要注意用户可能的实际水平,他们可能已经学过基础,现在需要针对就业进行提升。因此,需要强调实战项目、开源贡献、以及持续学习的重要性。 最后,要检查是否有遗漏的重要点,比如单元测试、调试工具、容器化技术(Docker/Kubernetes)等,这些都是现代开发流程中的常见要求。同时,推荐一些学习资源和社区,帮助用户进一步学习。 总结下来,回答的结构应该包括核心技术、数据库、框架、工具链、项目经验、分布式、面试准备和持续学习。每个部分列出关键点,并给出具体的技术名称和简要说明,让用户明确学习路径。</think>以下是针对 **Java 就业水平** 所需掌握的核心技能与知识体系,结合企业招聘要求与技术栈需求整理,分为 **技术硬实力** 和 **实战经验** 两大部分: --- ### **一、技术硬实力** #### **1. Java 核心技术** - **语法与基础**: - 熟练使用集合框架(`ArrayList`、`HashMap`、`ConcurrentHashMap` 等)。 - 深入理解多线程与并发编程(线程池、`synchronized`、`ReentrantLock`、`CAS` 机制)。 - 掌握 JVM 内存模型、垃圾回收机制(GC 算法、调优参数如 `-Xmx`、`-XX:+UseG1GC`)。 - 熟悉 IO/NIO(文件操作、网络通信)、反射与注解(`@Override`、自定义注解)。 - **代码示例**: ```java // 线程池使用示例 ExecutorService executor = Executors.newFixedThreadPool(4); executor.submit(() -> System.out.println("Task executed by thread pool")); ``` #### **2. 数据库与 SQL** - **必学内容**: - **SQL 语法**:复杂查询(JOIN、子查询)、事务(ACID 特性)、索引优化(B+树原理)。 - **主流数据库**: - MySQL(重点掌握存储引擎 InnoDB、慢查询优化、分库分表)。 - Redis(数据结构、持久化策略、缓存穿透/雪崩解决方案)。 - **ORM 框架**:MyBatis(动态 SQL、一级/二级缓存)、JPA(Hibernate 基础)。 - **面试高频问题**: -设计数据库表结构?如优化慢查询? - Redis 如实现分布式锁? #### **3. 主流框架与工具链** - **Spring 生态**: - **Spring Boot**:自动配置原理、RESTful API 开发、常用注解(`@SpringBootApplication`、`@Bean`)。 - **Spring MVC**:请求处理流程(DispatcherServlet)、拦截器(Interceptor)。 - **Spring Cloud**:服务注册发现(Eureka/Nacos)、负载均衡(Ribbon)、熔断(Hystrix)。 - **其他工具**: - 构建工具:Maven(依赖管理)、Gradle。 - 版本控制:Git(分支管理、冲突解决)。 - 单元测试:JUnit、Mockito。 #### **4. 分布式与微服务** - **核心技术**: - 分布式锁(Redis RedLock、ZooKeeper)。 - 分布式事务(Seata、2PC/3PC、TCC 模式)。 - 消息队列:Kafka(高吞吐)、RabbitMQ(可靠性)。 - 服务网格:Dubbo、gRPC。 - **容器化**:Docker 镜像打包、Kubernetes 基础命令。 #### **5. 前端基础(加分项)** - **基础技能**: - HTML/CSS/JavaScript(能配合后端实现简单页面)。 - 前端框架:Vue.js 或 React(理解组件化开发思想)。 --- ### **二、实战经验** #### **1. 项目开发** - **项目复杂度**: - **初级项目**:博客系统、在线商城(涵盖 CRUD、权限管理)。 - **进阶项目**:秒杀系统(解决高并发)、分布式文件存储(FastDFS/MinIO)。 - **关键能力**: - 需求分析:从 0 到 1 设计功能模块。 - 性能优化:SQL 调优、缓存设计(Redis 热点数据)、接口 QPS 提升。 - 日志与监控:ELK 日志分析、Prometheus + Grafana 监控。 #### **2. 开源贡献与代码规范** - **GitHub 参与**: - 阅读并贡献开源项目(如 Spring 生态项目)。 - 学习代码规范:Google Java Style Guide、阿里巴巴 Java 开发手册。 - **代码质量**: - 编写可读性高的代码(命名规范、注释清晰)。 - 使用 SonarQube 进行代码静态分析。 --- ### **三、面试准备** #### **1. 算法与数据结构** - **必刷题库**: - LeetCode 高频题(数组、链表、二叉树、动态规划)。 - 《剑指 Offer》经典问题(反转链表、二叉树遍历)。 - **代码示例**: ```java // 快速排序实现 public void quickSort(int[] arr, int low, int high) { if (low < high) { int pivot = partition(arr, low, high); quickSort(arr, low, pivot - 1); quickSort(arr, pivot + 1, high); } } ``` #### **2. 设计模式与系统设计** - **常用设计模式**: - 工厂模式(Spring BeanFactory)、代理模式(AOP 实现)、观察者模式(事件驱动)。 - **系统设计题**: - 设计短链生成系统、分布式 ID 生成方案(雪花算法)。 #### **3. 软技能** - **沟通与协作**:使用 Jira/Confluence 管理任务,参与敏捷开发(Scrum)。 - **问题排查**: - 熟练使用 Arthas 诊断线上问题。 - 分析线程 Dump 文件(`jstack`)、内存溢出(`jmap` + MAT 工具)。 --- ### **四、学习路线图** 1. **入门**(1-2 个月):Java 基础 + MySQL + Spring Boot 简单项目。 2. **进阶**(3-4 个月):JVM 调优 + 高并发编程 + 分布式中间件。 3. **实战**(2-3 个月):参与完整项目(从需求到部署),积累 GitHub 提交记录。 4. **面试冲刺**(1 个月):算法刷题 + 模拟面试 + 技术复盘。 --- ### **五、资源推荐** - **书籍**:《Java 编程思想》《凤凰架构》《高性能 MySQL》。 - **网站**: - 牛客网(面试真题)、B 站(免费课程)、极客时间(深度专栏)。 - **社区**:Stack Overflow、掘金、知乎(技术问答)。 --- **关键总结**: 就业水平 = **扎实的 Java 核心能力** + **主流框架熟练度** + **真实项目经验** + **系统设计思维**。建议通过 **“学--复盘”** 循环,逐步突破技术瓶颈,最终达到企业用人标准。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值