路径:查找路径 实际上都是查找编译后的对应的路径,在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. 【Data URL】【RE】【bugku】逆向入门writeup

    在写wp之前先来了解一下Data URL是什么 Data URL 在浏览器向服务端发送请求来引用资源时,一般浏览器都有同一时间并发请求数不超过4个的限制.所以如果一个网页需要引用大量的服务端资源,就会 ...

  2. vm克隆linux系统 后连接网络

    第一步 vi /etc/udev/rules.d/70-persistent-net.rules     将之前的eth0注释掉,    将eth1改为eth0 并复制mac地址 第二部 vi /et ...

  3. [转]MySQL创建用户与授权方法

    注:我的运行环境是widnows xp professional + MySQL5.0 一, 创建用户: 命令:CREATE USER 'username'@'host' IDENTIFIED BY ...

  4. #Java Web累积#JS动态加载所有同name的select的option

      项目需求: 某一页面,页面使用多列table,每个table中有同相同的<select>,select的option不确定,根据Server端的配置来,所以option需要动态加载: ...

  5. hdu1428漫步校园

    #include <queue> #include <iostream> #include <algorithm> #include <cstring> ...

  6. HDU 4638 Group (2013多校4 1007 离线处理+树状数组)

    Group Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  7. Web API使用记录系列(二)HelpPage优化与WebApiTestClient

    继续使用记录的第二节,HelpPage的优化与测试工具WebApiTestClient的使用. 之前没怎么整理博客,都是记录一下笔记,真正好好整理发现没想像的那么简单.不管怎么说还是培养下写博客的习惯 ...

  8. openssh相关

    openssh相关    DSA RSA,非对称加密,产生公钥.私钥,前者存放在remote,后者存放在local,ssh-keygen产生公钥私钥时,提示输入私钥密码,防止私钥泄露被盗    ssh ...

  9. uboot显示logo的方式

    转:http://blog.chinaunix.net/uid-22030783-id-3257554.html 本文使用uboot2010.03版本,2010.06版本同样适用,在XC2440板上实 ...

  10. 【mybatis】mybatis中批量插入 批量更新 batch 进行insert 和 update,或者切割LIst进行批量操作

    ================================================================== 分别展示 mybatis 批量新增  和 批量更新   的操作: ...