Hibernate笔记一(Hibernate简单配置和操作)
来源:互联网 发布:万讯网络中控 编辑:程序博客网 时间:2024/06/06 04:16
Hibernate
1.什么是Hibernate?
- Hibernate是一个ORM(Object/Relationship Mapping)框架,即对象关系映射。就是将对象中的属性和数据库中的字段通过映射的关系一一对应起来。它的设计目标是将软件开发人员从大量相同的数据持久层相关编程工作中解放出来。无论是从设计草案还是从一个遗留数据库开始,开发人员都可以采用Hibernate。Hibernate不仅负责从Java类到数据库表的映射(还包括从Java数据类型到SQL数据类型的映射),还提供了面向对象的数据查询检索机制,从而极大地缩短的手动处理SQL和JDBC上的开发时间。
2.Hibernate配置
- Hibernate核心配置文件
官方推荐将Hibernate核心配置文件命名为hibernate.cfg.xml,直接放到项目的src目录之下。核心配置文件配置如下:
<?xml version="1.0" encoding="UTF-8"?><!--引入xml的约束--><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><!--必须!!!配置session-factory元素,用于在程序中解析该xml--><hibernate-configuration> <session-factory> <!--必须!!!配置数据库的用户名--> <property name="connection.username">root</property> <!--必须!!!配置数据库的密码--> <property name="connection.password">root</property> <!--必须!!!配置数据库的url地址--> <property name="connection.url">jdbc:mysql:///hibernate?characterEncoding=utf-8</property> <!--必须!!!配置连接数据库的驱动--> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!--必须!!!配置方言,让Hibernate在解析该xml文件时知道我们所需操作的数据库类型--> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!--非必须 是否在控制台显示sql语句,默认为false--> <property name="show_sql">true</property> <!--非必须 是否格式化sql语句,使sql语句更易阅读,默认为false--> <property name="format_sql">true</property> <!--非必须 是否自动创建数据表,不配置此项表示不自动创建数据表 update:在程序运行时检测是否有表,若果没有则创建 create:当程序运行时先删除表,再创建表 create-drop:当程序运行时创建表,当程序结束时删除表 validate:当程序运行时检测表字段是否有变化,如果有变化对字段做修改 --> <property name="hbm2ddl.auto">update</property> <!--必须!!! 将实体类的映射的xml配置到该xml中,在程序运行时对映射文件进行解析--> <mapping resource="com/walter/vo/Student.hbm.xml"/> </session-factory></hibernate-configuration>
- 实体类:在使用Hibernate时,实体类推荐的定义方法是:
- 1.属性私有化;
- 2.显现定义出无参构造
- 3.要有标准的getter和setter方法
public class Student { private int id; private int age; private String name; private String address; private Date birthday; public Student() { super(); // TODO Auto-generated constructor stub } public Student(int age, String name, String address, Date birthday) { super(); this.age = age; this.name = name; this.address = address; this.birthday = birthday; } public Student(int id, int age, String name, String address, Date birthday) { super(); this.id = id; this.age = age; this.name = name; this.address = address; this.birthday = birthday; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
- 实体类的映射文件:实体类的映射文件命名格式推荐是Person.hbm.xml,即 实体类的类名+.hbm+.xml
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2017-5-17 12:59:18 by Hibernate Tools 3.5.0.Final --><!--必须 可以有package属性,其属性值是准备映射的实体类所在的包名--><hibernate-mapping> <!-- class指定实体类: name:如果 hibernate-mapping 标签中定义了package属性,则这里的那么只需填写实体类的类名;如果hibernate-mapping标签总没有定义package,则这里的name要是实体类的包名+类名 table:可省略。如果不写,则以实体类的类名生成数据库的表名;如果写了,则生成的表名是table的属性值 --> <class name="com.walter.vo.Student" table="STUDENT"> <!-- id标签中定义表的主键 name:指定表的主键是实体类中的那个属性,其值必须为实体类的属性 type:可省略。指定该字段在数据库中的类型,如果不写,Hibernate自动判断类型。注意该类型指的是在Java中的数据类型而不是数据库中的数据类型 column:可省略。定义该属性在数据库表中的字段名,如果不写以该属性名作为其在表中的字段名 generator:主键生成策略。此时的主键生成策略是自增长 --> <id name="id" type="int" > <column name="ID" /> <generator class="native" /> </id> <property name="age" type="int"> <column name="AGE" /> </property> <!-- not-null:可省略。非空约束;默认为false,可以为空;当为true时,不能为空 unique:可省略。唯一约束;默认为false,不唯一;当为true时,唯一,不能重复 --> <property name="name" type="java.lang.String" not-null="true"> <column name="NAME" /> </property> <property name="address" type="java.lang.String"> <column name="ADDRESS" /> </property> <!-- 对于时间格式的属性,type默认是datetime --> <property name="birthday" type="date"> <column name="BIRTHDAY" /> </property> </class></hibernate-mapping>
3.Hibernate的简单使用
- 定义工具类
public class HibernateUtil { private static SessionFactory sessionFactory; static { Configuration configuration = new Configuration(); // 加载Hibernate核心配置文件并解析 configuration.configure(); //获取session工厂对象 sessionFactory = configuration.buildSessionFactory(); } /** * 获取工厂对象 * @return */ public static SessionFactory getSessionFactory() { return sessionFactory; } /** * 获取session对象 * @return */ public static Session getSession() { return sessionFactory.openSession(); } /** * 关闭session对象 * @param s */ public static void close(Session s) { if (s != null) s.close(); }
- 测试
public class StudentTest { private Session session; private Transaction transaction; /** * 创建session对象,开启事务 */ @Before public void init() { session = HibernateUtil.getSession(); transaction = session.beginTransaction(); } /** * 提交事务,关闭session对象 */ @After public void distroy() { transaction.commit(); HibernateUtil.close(session); } /** * 添加学生 */ @Test public void testSaveStudent() { Student student = new Student(10, "李四", "北京", new Date()); session.save(student); } /** * 查询所有学生信息 */ @Test public void testQueryAll(){ List<Student> students = session.createQuery("from Student").list(); System.out.println(students); } /** * 根据id查询学生信息 */ @Test public void testQueryById(){ System.out.println(session.get(Student.class, 1)); } /** * 根据id修改学生信息 */ @Test public void testUpdate(){ Student student = new Student(1,10, "王五", "上海", new Date()); session.update(student); } @Test /** * 根据id删除学生信息 */ public void testDelById(){ Student student = new Student(2); session.delete(student); }}
从测试的情况我们可以看出,Hibernate使我们的开发不用再书写繁琐的sql语句,而是针对对象进行编程。从这也可以看出Hibernate确实减轻了我们开发人员不少工作量。以上只是对Hibernate基本的介绍和操作。针对Hibernate对表与表之间的关联在以后的笔记中进行讲解。
阅读全文
0 0
- Hibernate笔记一(Hibernate简单配置和操作)
- hibernate笔记(一)hibernate基本配置
- Hibernate入门(一:简单配置)
- hibernate笔记(一)hibernate 配置及使用
- hibernate 笔记一 简单入门
- Hibernate一对多多对一的相关配置和操作
- Hibernate笔记(一)
- Hibernate笔记(一)
- Hibernate笔记(一)
- Hibernate学习笔记(一)----初识Hibernate
- Hibernate学习笔记(一)了解Hibernate
- hibernate 学习笔记一(初识hibernate)
- JAVAWEB开发之Hibernate详解(一)——Hibernate的框架概述、开发流程、CURD操作和核心配置与API以及Hibernate日志的使用
- JAVAWEB开发之Hibernate详解(一)——Hibernate的框架概述、开发流程、CURD操作和核心配置与API以及Hibernate日志的使用
- Hibernate笔记:HQL查询总结(一)——简单属性查询和实体对象查询
- hibernate简单配置(第一节)
- Hibernate学习笔记(一)【基础配置篇】
- Hibernate学习笔记(一)【基础配置篇】
- Shader学习基础之二数学基础(向量和矩阵)
- 剑指offer:第10题求二进制1的个数
- Android开发(一、初窥安卓--2.运行应用)
- HashMap和HashTable的分析(ConurrentHashMap的衍生)
- iOS Copy与MutableCopy 和 Copy与Strong 深度解析
- Hibernate笔记一(Hibernate简单配置和操作)
- spring框架中Bean的基本属性及调用外部properties等配置文件的方法介绍
- 【数据压缩】JPEG原理分析及JPEG解码器的调试
- hadoop Wordcount示例 出错
- Spring-2
- 文章标题
- C# 查询Xml文档
- 竞拍胜出者可以携一名宾客与库克在苹果新总部Apple Park共进午餐,时间不超过1小时。除了午餐费不用额外支付,旅行和食宿费都要有买家自己承担。此外,今年的竞拍与往年还有一个很大的不同:不包括苹果即
- Linux下命令行ssh密钥连接服务器