初学Hibernate1

Hibernate 是完全ORM的,只需要对 对象 进行操作,生成底层SQL语句

优势:1、可以简化开发

   2、性能好(原生的Hibernate性能很差,要使用它,需要进行优化),优化方式:一级缓存、二级缓存、查询缓存、抓取策略等。

下面先简单写一个log4j的demo

1、新建一Java项目,导入log4j.jar包

2、在src下新建log4j.properties文件,第一个info表示,输出信息为info级别及其以上

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=D:\mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change ‘info‘ to ‘debug‘ ### file,表示文件输出,stdout表示控制台输出

log4j.rootLogger=info, file,stdout

log4j.properties

3、新建一个包含main函数的类,直接运行测试,其代码如下

import org.apache.log4j.Logger;

public class LogDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Logger logger = Logger.getLogger(LogDemo.class);
        logger.fatal("致命性错误");
        logger.error("普通错误");
        logger.warn("警告错误");
        logger.info("普通信息");
        logger.debug("调试信息");
        logger.trace("堆栈信息");
    }
}

LogDemo

下面开始写Hibernate入门代码,操作MySQL数据库:

1、创建数据库h1, create database h1;

2、创建表customer

create table customer{  id int primary key auto_increment,  name varchar(20),  age int ,  city varchar(20)  } ;

3、新建Customer类

public class Customer {
private int id;
private String name;
private int age;
private String city;
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}
public String getCity() {
    return city;
}
public void setCity(String city) {
    this.city = city;
}
}

Customer类

4、新建Customer.hbm.xml文件,配置Customer类与customer表的映射关系,一般是将映射文件放在对应类同一包内

<?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>
    <!-- 类与表关系,name类全名称,table表名 -->
    <class name="cn.hjp.domain.Customer" table="Customer">
    <!-- id为表主键,如果不配置column,默认为name值 -->
    <id name="id" column="id">
    <generator class="native"></generator>
    </id>
    <!-- property中配置表中简单字段, type可以为Java类型,Hibernate类型或者数据库类型 -->
    <!-- 省略column,默认用name -->
    <property name="name" column="name" type="java.lang.String"></property>
    <!-- int为Hibernate类型,如果用Java应该是Integer -->
    <property name="age" column="age" type="int"></property>
    <!-- 下面使用数据库类型 -->
    <property name="city">
    <column name="city" sql-type="varchar(20)"></column>
    </property>
    </class>
    </hibernate-mapping>

类与表映射关系

5、新建hibernate.cfg.xml文件,配置hibernate访问数据库及其自己的一些信息,配置显示SQL语句后,可以在控制台看到Hibernate构造的SQL语句

<?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来配置数据库参数以及Hibernate自己的一些信息 -->
    <!-- dialect方言,用于指定连接的是什么数据库 -->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql:///h1</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">hjp123</property>

    <!-- 配置显示执行的SQL语句,以及SQL语句格式化 -->
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.format_sql">true</property>
    <!-- 导入映射文件 -->
    <mapping resource="cn/hjp/domain/Customer.hbm.xml"/>
    </session-factory>
    </hibernate-configuration>

hibernate与数据关联

6、新建CustomerTest.java类,简单实现增删改查操作

注意:在使用hql时,from后面跟的是类名,而不是表名

package cn.hjp.test;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.junit.Test;

import cn.hjp.domain.Customer;

public class CustomerTest {
    @Test
    // 添加操作
    public void addTest() {
        // 1.加载hibernate.cfg.xml文件
        Configuration configuration = new Configuration().configure();// 注意:必须调用configure方法
        // 2.得到一个SessionFactory
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        // 3.得到session
        Session session = sessionFactory.openSession();
        // 4.开启事务
        // session.beginTransaction();
        Transaction transaction = session.beginTransaction();
        // 5.操作
        Customer customer = new Customer();
        customer.setAge(23);
        customer.setName("Tom");
        customer.setCity("北京");
        session.save(customer);
        // 6.提交事物,如果上面开启事务时没有创建事务对象,则可用下面方式提交事务,获得当前回话里的session进行提交
        // session.getTransaction().commit();
        transaction.commit();
        // 7.关闭资源
        session.close();
        sessionFactory.close();
    }

    @Test
    // 修改操作
    public void updateTest() {
        // 1.加载hibernate.cfg.xml文件
        Configuration configuration = new Configuration().configure();// 注意:必须调用configure方法
        // 2.得到一个SessionFactory
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        // 3.得到session
        Session session = sessionFactory.openSession();
        // 4.开启事务
        // session.beginTransaction();
        Transaction transaction = session.beginTransaction();
        // 5.操作
        Customer customer = new Customer();
        customer.setId(1);
        customer.setAge(23);
        customer.setName("Jerry");
        customer.setCity("上海");
        session.update(customer);
        // 6.提交事物,如果上面开启事务时没有创建事务对象,则可用下面方式提交事务,获得当前回话里的session进行提交
        // session.getTransaction().commit();
        transaction.commit();
        // 7.关闭资源
        session.close();
        sessionFactory.close();
    }

    @Test
    // 删除操作
    public void deleteTest() {
        // 1.加载hibernate.cfg.xml文件
        Configuration configuration = new Configuration().configure();// 注意:必须调用configure方法
        // 2.得到一个SessionFactory
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        // 3.得到session
        Session session = sessionFactory.openSession();
        // 4.开启事务
        // session.beginTransaction();
        Transaction transaction = session.beginTransaction();
        // 5.操作
        Customer customer = new Customer();
        customer.setId(1);
        session.delete(customer);
        // 6.提交事物,如果上面开启事务时没有创建事务对象,则可用下面方式提交事务,获得当前回话里的session进行提交
        // session.getTransaction().commit();
        transaction.commit();
        // 7.关闭资源
        session.close();
        sessionFactory.close();
    }

    @Test
    // 查询操作
    public void findCustomerById() {
        // 1.加载hibernate.cfg.xml文件
        Configuration configuration = new Configuration().configure();// 注意:必须调用configure方法
        // 2.得到一个SessionFactory
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        // 3.得到session
        Session session = sessionFactory.openSession();
        // 4.开启事务
        // session.beginTransaction();
        Transaction transaction = session.beginTransaction();
        // 5.操作
        Customer customer = (Customer) session.get(Customer.class, 2);
        System.out.println("姓名:" + customer.getName() + ";年龄:" + customer.getAge());
        // 6.提交事物,如果上面开启事务时没有创建事务对象,则可用下面方式提交事务,获得当前回话里的session进行提交
        // session.getTransaction().commit();
        transaction.commit();
        // 7.关闭资源
        session.close();
        sessionFactory.close();
    }

    @Test
    // 使用hql查询所有到List集合
    public void findAllCustomerByHql() {
        // 1.加载hibernate.cfg.xml文件
        Configuration configuration = new Configuration().configure();// 注意:必须调用configure方法
        // 2.得到一个SessionFactory
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        // 3.得到session
        Session session = sessionFactory.openSession();
        // 4.开启事务
        // session.beginTransaction();
        Transaction transaction = session.beginTransaction();
        // 5.操作
        String hql = "from Customer";//注意,from后面跟的是类名不是表名
        Query query = session.createQuery(hql);
        List<Customer> cusList = query.list();
        System.out.println(cusList.size());
        // 6.提交事物,如果上面开启事务时没有创建事务对象,则可用下面方式提交事务,获得当前回话里的session进行提交
        // session.getTransaction().commit();
        transaction.commit();
        // 7.关闭资源
        session.close();
        sessionFactory.close();
    }
}

Hibernate数据库操作

时间: 2024-11-10 08:03:38

初学Hibernate1的相关文章

STM32初学Keil4编译时出现 Error:Failed to execute &#39;BIN40/Armcc&#39;

一种是在系统开始--运行里输入cmd,查看armcc状态.详情见推文: http://blog.csdn.net/hicui/article/details/7350805(笔记记录,请勿见怪) 都没有问题的话,那么可以尝试: 在keil里的菜单栏依次选择Project->Manage->Components,Environment andBooks(CEB)(或者直接点击工具栏的图标), 然后在CEB里选择Folders/Extensions标签页,在RealView Folder里选择ke

mongodb 初学 目录

mongodb 初学 索引 啦啦啦 MongoDB 教程 NoSQL 简介 MongoDB 简介 Windows 平台安装 MongoDB Linux平台安装MongoDB mongodb 在 Ubuntu系统上的安装及卸载 Mongodb启动命令mongod参数说明 Mac OSX 平台安装 MongoDB MongoDB 概念解析 MongoDB - 连接 MongoDB 创建数据库 MongoDB 删除数据库 MongoDB 插入文档 MongoDB 更新文档 MongoDB 删除文档 M

初学ArcGIS API for JavaScript

初学ArcGIS API for JavaScript 对于初学者来说,关于esri提供的一些样式和dojo自带的一些样式还是需要有一定的了解,这块在<WebGIS开发从基础到实践>讲解的特别详细,在这里以笔记的形式来帮助自己加以理解和记忆. esri.css样式主要用于ESRI提供的小部件与组件,比如地图.信息框等.此外,还可以引用Dojo提供的样式表,Dojo提供了4组样式,分别是claro\tundra\soria以及nihilo,每种是一组定义用户界面的字体.颜色与大小等设置.在Arc

初学 Python(十一)——切片

初学 Python(十一)--切片 初学 Python,主要整理一些学习到的知识点,这次是切片. #-*- coding:utf-8 -*- ''''' 切片 ''' L = ['name','age','sex','address','company'] #取前2个 print L[0:2] print L[:2] #取倒数第一个 print L[-1] #取后两个 print L[-2:] #取倒数第二个 print L[-2:-1] print len(L) #隔一个数取一次,从第一个数开

【Python】初学编程适合学Python?其有何用?

初学编程适合学Python?其有何用? 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多因素造成了,当然市场需求的重要因素.吴军博士对大数据流行的解释与python流行或许有些默契.数据一直以来都存在,只是在历史条件下,由于计算性能和技术发展的原因,与之匹配的数据处理技术还不是很先进,以至于很多数据被我们舍弃了.同样,python语言简洁流畅等多种优点,也会让第一次接触

初学jsp

编写网页的语言有ASP,PHP,JSP三种,但jsp是其中功能最强大,却也最复杂的语言,小学期在老师的带领下我初步认识了这种语言,虽然对这种语言有了初步的了解,但离精通还离得很远,很多时候都跟不上老师的节奏,第一次接触这门语言确实是一个很痛苦的过程,老师讲的东西也掌握的不是很好,但总算还是小有所获,我知道想掌握这门语言还有很长的一段路要走,在这里就分享一下我的初学心得. SP就是Java,只是它是一个特别的Java语言,加入了一个特殊的引擎,这个引擎将HTTPServlet这个类的一些对象自动进

Mysql初学入门

最近花了两个晚上研究了一下Mysql的初学应用,在此进行整理记录. 1.Windows系统下的安装 我用的是win10系统,在http://dev.mysql.com/downloads/mysql/ 下载相应版本的Mysql,下载后进行解压即可. 下载好后,进行安装,安装及配置步骤参照http://jingyan.baidu.com/article/f3ad7d0ffc061a09c3345bf0.html . 安装好后,在DOS下输入 net start mysql并回车会启动mysql服务

初学HTML

今天在MOOC上学了HTML基础中的基础 有了点表面的认识 很喜欢MOOC这样的教学方式 赞一个 下面是一些自己的笔记和感想: 准备考研 现在感觉时间还算充裕 想学点web前端开发基础 下面是需要掌握的基础技术: 1. HTML是网页内容的载体.内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字.图片.视频等. 2. CSS样式是表现.就像网页的外衣.比如,标题字体.颜色变化,或为标题加入背景图片.边框等.所有这些用来改变内容外观的东西称之为表现. 3. JavaScript是用来实

初学github

初学github 这两天初学了一下github,学会了如何在github上创建一个仓库,并向仓库中将写的程序push到仓库中.在这里做一个小结. git和github 首先说说什么是git什么是github. git Git是一个开源的分布式版本控制系统,它可以有效.高速的处理从很小到非常大的项目版本管理.相信很多人都有过这样的遭遇:我写好了一版代码,然后发现有个地方写的不太对,然后开始修改代码,改了一大片.改完之后运行,然后发现,修改之前的某个函数还需要用,这时候又不能疯狂ctrl+z退回去,