路径:查找路径 实际上都是查找编译后的对应的路径,在bin文件夹中总

增删改必须开启事务才行

hibernate加载文件的两种方式 configure

1.引包

 antlr-2.7.6.jar
backport-util-concurrent.jar
c3p0-0.9.1.jar
commons-collections-3.1.jar
commons-logging-1.1.1.jar
dom4j-1.6.1.jar
ehcache-1.5.0.jar
hibernate3.jar
javassist-3.9.0.GA.jar
jta-1.1.jar
log4j.jar
mysql-connector-java-5.1.10-bin.jar
slf4j-api-1.5.8.jar
slf4j-log4j12.jar

2.建立Person.java类

 package cn.itcast.hibernate.sh.domain;

 import java.io.Serializable;

 /**
* 对象的序列化的作用:让对象在网络上传输,以二进制的形式传输
* @author Think
* Serializable标示接口
*/
public class Person implements Serializable{
private Long pid;
private String pname;
private String psex;
public Long getPid() {
return pid;
}
public void setPid(Long pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getPsex() {
return psex;
}
public void setPsex(String psex) {
this.psex = psex;
} }

3.建立 在类的同包下

Person.hbm.xml

 <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--
用来描述一个持久化类
name 类的全名
table 可以不写 默认值和类名一样
catalog 数据库的名称 一般不写
-->
<class name="cn.itcast.hibernate.sh.domain.Person">
<!--
标示属性 和数据库中的主键对应
name 属性的名称
column 列的名称
-->
<id name="pid" column="pid" length="200" type="java.lang.Long">
<!--
主键的产生器
就该告诉hibernate容器用什么样的方式产生主键
-->
<generator class="increment"></generator>
</id>
<!--
描述一般属性
-->
<property name="pname" column="pname" length="20" type="string">
</property> <property name="psex" column="psex" length="10" type="java.lang.String"></property>
</class>
</hibernate-mapping>

在src中建立 hibernate.cfg.xml

 <?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<!--
一个session-factory只能连接一个数据库
-->
<session-factory>
<!--
数据库的用户名
-->
<property name="connection.username">root</property>
<!--
密码
-->
<property name="connection.password">friends</property>
<!--
url
-->
<property name="connection.url">
jdbc:mysql://localhost:3306/hibernate_basic
</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> <!--
作用:根据持久化类和映射文件生成表
validate
create-drop
create
update
-->
<property name="hbm2ddl.auto">update</property>
<!--
显示hibernate内部生成的sql语句
-->
<property name="show_sql">true</property>
<mapping resource="cn/itcast/hibernate/sh/domain/Person.hbm.xml" /> </session-factory>
</hibernate-configuration>

写测试语句

 package cn.itcast.hibernate.sh.test;

 import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; import cn.itcast.hibernate.sh.domain.Person; public class CreateTable {
@Test
public void testCreateTableAndInsertData()
{
//在数据库下创建了表
//根据这语句的意思<property name="hbm2ddl.auto">update</property>
Configuration configuration=new Configuration();
//这种加载方式的源码是 configure( "/hibernate.cfg.xml" );
//configuration.configure(); //第二种加载方式
//参数resource代表加载配置文件的名称和路径
configuration.configure("/cn/itcast/hibernate/sh/domain/hibernate.cfg.xml"); SessionFactory sessionFactory=configuration.buildSessionFactory();
Session session=sessionFactory.openSession();
//------------------------------ //因为 主键id increasement 所以 递增添加数据
//往数据库中添加数据, 对象的持久化
Transaction transaction= session.beginTransaction();
Person person=new Person();
person.setPname("aaaaaaaaaaaa");
person.setPsex("男");
session.save(person);
transaction.commit();
session.close();
}
}

测试二。 CRUD

 package cn.itcast.hibernate.sh.test;

 import java.util.List;

 import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; import cn.itcast.hibernate.sh.domain.Person; public class CreateTable
{
//除了查询,其他操作必须开启事务 否则 不成功
@Test
public void testCreateTable()
{
//在数据库下创建了表
//根据这语句的意思<property name="hbm2ddl.auto">update</property>
Configuration configuration=new Configuration();
//这种加载方式的源码是 configure( "/hibernate.cfg.xml" );
//configuration.configure(); //第二种加载方式
//参数resource代表加载配置文件的名称和路径
configuration.configure("/hibernate.cfg.xml");
       configuration.buildSessionFactory(); 
} @Test
public void testInsertData()
{
Session session = getSession();
//------------------------------ //因为 主键id increasement 所以 递增添加数据
//往数据库中添加数据, 对象的持久化
Transaction transaction= session.beginTransaction();
Person person=new Person();
person.setPname("aaaaaaaaaaaa");
person.setPsex("男");
/**
* 参数必须持久化对象
*/
session.save(person);
transaction.commit(); session.close();
} private Session getSession() {
//在数据库下创建了表
//根据这语句的意思<property name="hbm2ddl.auto">update</property>
Configuration configuration=new Configuration();
//这种加载方式的源码是 configure( "/hibernate.cfg.xml" );
//configuration.configure(); //第二种加载方式
//参数resource代表加载配置文件的名称和路径
configuration.configure(); SessionFactory sessionFactory=configuration.buildSessionFactory();
Session session=sessionFactory.openSession();
return session;
}
@Test
public void testQueryPerson()
{
Session session=getSession();
List<Person> list=session.createQuery("from Person").list();
for(Person p:list)
{
System.out.println(p);
}
session.close();
}
@Test
public void testQueryPersonById()
{
Session session=getSession();
/**
* 按照主键的方式查询数据库表中的记录
* 第二个参数的类型必须和持久化中标示符的类型保持一致
*/
Person person=(Person) session.get(Person.class, 1L);
System.out.println(person); session.close();
}
/**
* hibernate内部会检查标示符,看标示符中的值在数据库相应的表中有没有对应的记录,如果有,则删除
*/
@Test
public void testDelPersonById()
{
Session session=getSession();
Transaction t=session.beginTransaction();
/**
* 1、根据id把值从数据库中查找出来
* 2、把对象删除掉
*/
Person person=(Person) session.get(Person.class, 1L);
session.delete(person); /**
* 1、新创建一个person对象
* 2、给person对象的标示符赋值
* 3、调用session.delete方法删除
*/
// Person person = new Person();
// //person.setPid(2L);
// session.delete(person); System.out.println(person);
t.commit();
session.close();
}
@Test
public void testupdatePersonById()
{
Session session=getSession();
Transaction t=session.beginTransaction();
/**
* 1、根据id把持久化对象提取出来
* 2、进行修改
* 3、执行upate操作
*/ Person person=(Person) session.get(Person.class, 2L);
person.setPsex("人妖"); //第二种方式,其他值都要一一设 否则为null了
// Person person = new Person();
// person.setPid(1L);
session.update(person);
System.out.println(person);
t.commit();
session.close();
} //在hibernate中,不运行出现两个持久化对象,但是标识符是一样的
@Test
public void testIdentity(){
Session session = this.getSession();
Transaction transaction = session.beginTransaction();
Person person = (Person)session.get(Person.class, 2L);
Person person2 = new Person();
person2.setPid(2L);
session.update(person2);
transaction.commit();
session.close();
}
}

参考:

 package cn.itcast.hibernate.sh.test;

 import java.io.Serializable;
import java.util.List; import org.hibernate.Session; import org.hibernate.Transaction;
import org.junit.Test; import cn.itcast.hibernate.sh.domain.Person;
import cn.itcast.hibernate.sh.utils.HiberanteUtils; public class PersonTest extends HiberanteUtils{
@Test
public void testSavePerson(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction(); Person person = new Person();
person.setPname("上海第一期班长");
person.setPsex("女"); /**
* 参数必须持久化对象
*/
session.save(person); transaction.commit();
session.close();
} @Test
public void testQueryPerson(){
Session session = sessionFactory.openSession();
List<Person> personList = session.createQuery("from Person").list();
for(Person person:personList){
System.out.println(person.getPname());
}
session.close();
} @Test
public void testQueryPersonByID(){
Session session = sessionFactory.openSession();
/**
* 按照主键的方式查询数据库表中的记录
* 第二个参数的类型必须和持久化中标示符的类型保持一致
*/
Person person = (Person)session.get(Person.class, 1L);
System.out.println(person.getPname());
session.close();
} /**
* hibernate内部会检查标示符,看标示符中的值在数据库相应的表中有没有对应的记录,如果有,则删除
*/
@Test
public void testDeletePerson(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
/**
* 1、根据id把值从数据库中查找出来
* 2、把对象删除掉
*/
// Person person = (Person)session.get(Person.class, 1L);
// session.delete(person); /**
* 1、新创建一个person对象
* 2、给person对象的标示符赋值
* 3、调用session.delete方法删除
*/
Person person = new Person();
//person.setPid(2L);
session.delete(person);
transaction.commit();
session.close();
} @Test
public void testUpdatePerson(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction(); /**
* 1、根据id把持久化对象提取出来
* 2、进行修改
* 3、执行upate操作
*/
Person person = (Person)session.get(Person.class, 1L);
person.setPsex("不详");
// Person person = new Person();
// person.setPid(1L);
session.update(person);
transaction.commit();
session.close();
} @Test
public void testIdentity(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person = (Person)session.get(Person.class, 1L);
Person person2 = new Person();
//person2.setPid(1L);
session.update(person2);
transaction.commit();
session.close();
}
}

原理性和排错

排错

hibernate的配置, 增删改查的更多相关文章

  1. Hibernate下的增删改查

    概述: 关系--对象映射的中间件,属于开源ORM框架,是我们业务逻辑层中的调用数据库的中间件 演变: jdbc---hibernater---mybatis hibernate和mybatis区别? ...

  2. Hibernate入门_增删改查

    一.Hibernate入门案例剖析:  ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private ...

  3. hibernate搭建及其增删改查

    一.jar包 最基础的hibernatejar包,以及数据库驱动的jar包 二.数据库 t_user表 id int 主键 自动增长 name varchar() 三.配置文件 <?xml ve ...

  4. struts+hibernate 请求数据库增删改查(小项目实例)

      StudentAction.java package com.action; import java.util.ArrayList; import java.util.List; import j ...

  5. 5.Hibernate实现全套增删改查和ajax异步分页

    1.1 创建如下oracle数据库脚本 drop sequence seq_stu; create sequence SEQ_STU minvalue maxvalue start increment ...

  6. Springboot+hibernate简单的增删改查

    1.创建好项目之后在配置端口号(也可以不用配置,默认端口8080) #server server.port= server.tomcat.uri-encoding=utf- 2.配置mysql #My ...

  7. Mybatis数据连接池的配置---增删改查(以及遇见的问题)

    1.首先创建项目和各个文件,如图所示: 2.配置相关数据库连接 在jdbc.properties中加入 1 db.driver=com.mysql.jdbc.Driver 2 db.url=jdbc: ...

  8. Hibernate的入门(增删改查):

    注意:本次的记录是在上一篇Hibernate入门的基础上应用的 1.目录 2.实体类修改 package com.itheima.domain; /* * 客户的javaBean * @author ...

  9. JPA+Hibernate 3.3 ——增删改查

    1.     查找对象   1)  用find()方法查找对象 public void getPerson(){ EntityManagerFactory factory = Persistence. ...

随机推荐

  1. 某5道CF水题

    1.PolandBall and Hypothesis 题面在这里! 大意就是让你找一个m使得n*m+1是一个合数. 首先对于1和2可以特判,是1输出3,是2输出4. 然后对于其他所有的n,我们都可以 ...

  2. [xsy1144]选物品

    题意:给定$a_{1\cdots n},b_{1\cdots n}$,询问是给定$l,r$,找出$a',b'$使得$\sum\limits_{i=l}^r\max(\left|a'-a_i\right ...

  3. 【费用流】BZOJ1877[SDOI2009]-晨跑

    [题目大意] Elaxia每天从寝室出发跑到学校,保证寝室编号为1,学校编号为N. Elaxia的晨跑计划是按周期(包含若干天)进行的,由于他不喜欢走重复的路线,所以在一个周期内,每天的晨跑路线都不会 ...

  4. 1.2(SQL学习笔记)高级数据过滤

    一.AND 通过WHERE可以进行条件过滤,但只限于单个条件. 通过AND就可以连接多个条件,AND代表了和,即AND两边的条件全部满足才会通过筛选. 这就类似编程语言中的&&. 以下 ...

  5. [转]web.xml中webAppRootKey

    web.xml中webAppRootKey ------------------------------------------------------------------------------ ...

  6. node.js 安装了express后提示不是内部命令的解决方法

    比较完美的过程应该是这样的: 安装express npm install express-generator -g 再测试 express -V 然而...... 检查了下系统变量: 对比我的路径: ...

  7. sso 自动化运维平台

    单点登录SSO(Single Sign-On)是身份管理中的一部分.本文中作者开发了一个自动化运维平台中的统一认证接口,单点登录平台通过提供统一的认证平台,实现单点登录.因此,应用系统并不需要开发用户 ...

  8. UINavigationController 详解

    // 导航控制器 // 1. 比较常用的视图控制器管理类 // 2. 以栈的形式管理视图控制器, 先进后出 // 3. 创建navigation后, 视图控制器上会多出一个导航栏 // 4. 导航栏高 ...

  9. List 中的最大最小值

    以下实例演示了如何使用 Collections 类的 max() 和 min() 方法来获取List中最大最小值: /* author by w3cschool.cc Main.java */ imp ...

  10. iview2.x版本升级3.x版本icon修改清单

    当前公司使用有一个旧项目的前端组件库是iview2.x,入职以来维护该项目过程中碰到2.x版本无数的坑. 最近需求不多,闲来无事把2.x升级到3.x版本了. 新版本除了网上轻易可查到的button组件 ...