接着上一节,工程结构:

jar包没有变化;

一、HibernateUtil 封装:                                            

com.cy.util.HibernateUtil.java:

package com.cy.util;

import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration; public class HibernateUtil { private static final SessionFactory sessionFactory = buildSessionFactory(); private static SessionFactory buildSessionFactory(){
Configuration configuration = new Configuration().configure(); //实例化配置文件,默认指定的就是hibernate.cfg.xml
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();//实例化服务登记,服务注册
return configuration.buildSessionFactory(serviceRegistry); //获取session工厂
} //获取sessionFactory,是单例的
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
}

二、XML 版CRUD 实现:                                            

对Student类进行xml配置,crud操作;

com.cy.model.student.java:

package com.cy.model;

public class Student {
private long id;
private String name; public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
} }

Student.hbm.xml:

<?xml version="1.0"?>
<!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.cy.model">
<class name="Student" table="t_student">
<!--
<id>代表主键
类的属性名是id,对应表中列名是stuId
-->
<id name="id" column="stuId">
<!-- 主键生成策略,这里采用mysql的native,自增 -->
<generator class="native"></generator>
</id> <!-- 普通属性采用property
不写column,那么数据库table的列名也叫name
-->
<property name="name"></property> </class> </hibernate-mapping>

com.cy.service.StudentTest.java:--这里是测试类,对Student进行CRUD:

package com.cy.service;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory; import com.cy.model.Student;
import com.cy.util.HibernateUtil; public class StudentTest { private static SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); //添加学生
private void add(){
Session session = sessionFactory.openSession(); //生成一个session
session.beginTransaction(); //开启事务 Student s = new Student();
s.setName("张三");
session.save(s); session.getTransaction().commit(); //提交事务
session.close(); //关闭session
} //删除学生
private void delete(){
Session session = sessionFactory.openSession();
session.beginTransaction(); Student student = (Student) session.get(Student.class, 1L);
session.delete(student); session.getTransaction().commit();
session.close();
} //更新学生
private void update(){
Session session = sessionFactory.openSession();
session.beginTransaction(); Student student = (Student) session.get(Student.class, 6L);
student.setName("张三22");
session.save(student); session.getTransaction().commit();
session.close();
} //查找所有学生
private void getAllStudents(){
Session session = sessionFactory.openSession();
session.beginTransaction(); String hql = "from Student";
Query query = session.createQuery(hql);
List<Student> studentList = query.list();
for(Student student : studentList){
System.out.println(student);
} session.getTransaction().commit();
session.close();
} public static void main(String[] args) {
StudentTest studentTest = new StudentTest();
// studentTest.add();
// studentTest.delete();
// studentTest.update();
studentTest.getAllStudents();
}
}

hibernate.cfg.xml中加入Student映射(为了方便后面,也加入了Teacher):

<?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="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property> <!-- 方言 -->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- 控制台显示SQL -->
<property name="show_sql">true</property> <!-- 自动更新表结构 -->
<property name="hbm2ddl.auto">update</property> <mapping resource="com/cy/model/Student.hbm.xml"/>
<mapping class="com.cy.model.Teacher"/>
</session-factory> </hibernate-configuration>

StudentTest.java运行main函数,结果:

删除:

修改:

查询所有:

三、注解版CRUD 实现                                                

1.注解版CRUD:注解版的很方便,官方也推荐使用;
2.运行测试程序,hibernate会根据映射关系,如有没有表的话,自动创建表。(如果配置了hbm2ddl.auto为update);

这里是对Teacher类进行注解的配置,然后进行CRUD操作:

com.cy.model.Teacher.java:

package com.cy.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; //@Entity代表Teacher是一个映射实体
@Entity
@Table(name="t_teacher")
public class Teacher {
private long id;
private String name; //@Id代表id是一个主键
//@GenericGenerator配置主键生成策略 name是起个名字,strategy是具体的策略;
//@GeneratedValue配置生成策略为@GenericGenerator的名字
@Id
@GeneratedValue(generator="_native")
@GenericGenerator(name="_native",strategy="native")
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "Teacher [id=" + id + ", name=" + name + "]";
} }

将Teacher类加入hibernate.cfg.xml:

<mapping class="com.cy.model.Teacher"/>

com.cy.service.TeacherTest.java测试代码:

package com.cy.service;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory; import com.cy.model.Teacher;
import com.cy.util.HibernateUtil; public class TeacherTest { private static SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); //添加老师
private void add(){
Session session = sessionFactory.openSession(); //生成一个session
session.beginTransaction(); //开启事务 Teacher s = new Teacher();
s.setName("张三");
session.save(s); session.getTransaction().commit(); //提交事务
session.close(); //关闭session
} //删除老师
private void delete(){
Session session = sessionFactory.openSession();
session.beginTransaction(); Teacher Teacher = (Teacher) session.get(Teacher.class, 1L);
session.delete(Teacher); session.getTransaction().commit();
session.close();
} //更新老师
private void update(){
Session session = sessionFactory.openSession();
session.beginTransaction(); Teacher Teacher = (Teacher) session.get(Teacher.class, 4L);
Teacher.setName("张老师22");
session.save(Teacher); session.getTransaction().commit();
session.close();
} //查找所有老师
private void getAllTeachers(){
Session session = sessionFactory.openSession();
session.beginTransaction(); String hql = "from Teacher";
Query query = session.createQuery(hql);
List<Teacher> TeacherList = query.list();
for(Teacher Teacher : TeacherList){
System.out.println(Teacher);
} session.getTransaction().commit();
session.close();
} public static void main(String[] args) {
TeacherTest TeacherTest = new TeacherTest();
// TeacherTest.add();
// TeacherTest.delete();
// TeacherTest.update();
TeacherTest.getAllTeachers();
}
}

测试结果和StudentTest结果差不多,不再说明了。打印出来的语句也基本一样的。

Hibernate学习2—Hibernate4 CRUD体验初步的更多相关文章

  1. (二)Hibernate4 CRUD 体验

    所有的学习我们必须先搭建好hibernate的环境(1.导入对应的jar包,2.hibernate.cfg.xml,3.XXXX.hbm.xml) 第一节:HibernateUtil 封装 导入对应的 ...

  2. Hibernate学习笔记(一)

    2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...

  3. Hibernate 学习笔记一

    Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...

  4. 第三次随笔--安装虚拟机及学习linux系统初体验

    第三次随笔--安装虚拟机及学习linux系统初体验 ·学习基于VirtualBox虚拟机安装Ubuntu图文教程在自己笔记本上安装Linux操作系统 首先按照老师的提示步骤进行VirtualBox虚拟 ...

  5. hibernate学习系列-----(2)hibernate核心接口和工作机制

    在上一篇文章hibernate学习系列-----(1)开发环境搭建中,大致总结了hibernate的开发环境的搭建步骤,今天,我们继续了解有关hibernate的知识,先说说这篇文章的主要内容吧: C ...

  6. Hibernate学习之——搭建log4j日志环境

    昨天讲了Hibernate开发环境的搭建以及实现一个Hibernate的基础示例,但是你会发现运行输出只有sql语句,很多输出信息都看不见.这是因为用到的是slf4j-nop-1.6.1.jar的实现 ...

  7. Hibernate学习笔记(二)

    2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...

  8. Hibernate学习笔记-Hibernate HQL查询

    Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...

  9. Linux入门学习教程:虚拟机体验之KVM篇

    本文中可以学习到的命令: 1. aptitude 是apt-get 不会产生垃圾的版本 2.       dpkg -L virtualbox 显示属于该包的文件 lsmod | grep kvmfi ...

随机推荐

  1. 转载:【Oracle 集群】RAC知识图文详细教程(三)--RAC工作原理和相关组件

    文章导航 集群概念介绍(一) ORACLE集群概念和原理(二) RAC 工作原理和相关组件(三) 缓存融合技术(四) RAC 特殊问题和实战经验(五) ORACLE 11 G版本2 RAC在LINUX ...

  2. SSH服务:packet_write_wait: Connection to 67.218.143.160 port 22: Broken pipe错误处理

    1.在~/.ssh/config配置文件中添加 IPQoS lowdelay throughput 2.在/etc/ssh/ssh_config配置文件中添加 IPQoS lowdelay throu ...

  3. L162

    More than 250 corporate signatories joined together to try and deal with plastic pollution in an ann ...

  4. vs 2013远程调试

    1. 找到本机Remote Debugger/x64文件夹,将其拷贝到远程机器上 2.运行x64文件夹下的msvsmon.exe,将其设置为“无身份验证模式”,记住端口号,一会儿要用到 3.在vs中打 ...

  5. vue.js 源代码学习笔记 ----- 工具方法 option

    /* @flow */ import Vue from '../instance/index' import config from '../config' import { warn } from ...

  6. Xcode Server (Xcode9)搭建CI

    Xcode 9将Xcode Server集成进来了,这是Xcode一个新特性,不用去单独下载server了,server可以用来做CI.自动化Test等等.这里主要介绍搭建CI,相当简单 打开开关,新 ...

  7. HDU3833 YY's new problem 卡时间第一题

    Given a permutation P of 1 to N, YY wants to know whether there exists such three elements P[i 1], P ...

  8. new Date()相关获取当月天数和当月第一天

    var  myDate = new Date(); //获取本月第一天周几 var monthFirst = new Date(myDate.getFullYear(), parseInt(myDat ...

  9. .NET/C# 使窗口永不获得焦点

    有些窗口天生就是为了辅助其它程序而使用的,典型的如“输入法窗口”.这些窗口不希望抢夺其它窗口的焦点. 有 Win32 方法来解决这样的问题,WS_EX_NOACTIVATE 便是关键. 具体来说,是给 ...

  10. 理解 Roslyn 中的红绿树(Red-Green Trees)

    Roslyn 的 API 是非常易用的.即便如此复杂的 C# 语法,建立的复杂的 C# 语法树,还有其复杂的树遍历和修改过程,也都被其 API 包装得干净简洁. 而这背后是它的重要设计思路 —— 红绿 ...