hibernate的配置, 增删改查
路径:查找路径 实际上都是查找编译后的对应的路径,在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的配置, 增删改查的更多相关文章
- Hibernate下的增删改查
概述: 关系--对象映射的中间件,属于开源ORM框架,是我们业务逻辑层中的调用数据库的中间件 演变: jdbc---hibernater---mybatis hibernate和mybatis区别? ...
- Hibernate入门_增删改查
一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private ...
- hibernate搭建及其增删改查
一.jar包 最基础的hibernatejar包,以及数据库驱动的jar包 二.数据库 t_user表 id int 主键 自动增长 name varchar() 三.配置文件 <?xml ve ...
- struts+hibernate 请求数据库增删改查(小项目实例)
StudentAction.java package com.action; import java.util.ArrayList; import java.util.List; import j ...
- 5.Hibernate实现全套增删改查和ajax异步分页
1.1 创建如下oracle数据库脚本 drop sequence seq_stu; create sequence SEQ_STU minvalue maxvalue start increment ...
- Springboot+hibernate简单的增删改查
1.创建好项目之后在配置端口号(也可以不用配置,默认端口8080) #server server.port= server.tomcat.uri-encoding=utf- 2.配置mysql #My ...
- Mybatis数据连接池的配置---增删改查(以及遇见的问题)
1.首先创建项目和各个文件,如图所示: 2.配置相关数据库连接 在jdbc.properties中加入 1 db.driver=com.mysql.jdbc.Driver 2 db.url=jdbc: ...
- Hibernate的入门(增删改查):
注意:本次的记录是在上一篇Hibernate入门的基础上应用的 1.目录 2.实体类修改 package com.itheima.domain; /* * 客户的javaBean * @author ...
- JPA+Hibernate 3.3 ——增删改查
1. 查找对象 1) 用find()方法查找对象 public void getPerson(){ EntityManagerFactory factory = Persistence. ...
随机推荐
- [CF600E]Dsu on tree
题意:树上每个点都有颜色,称一个颜色占领一棵子树,当且仅当没有别的颜色在这棵子树内的数量比它多.求所有子树的占领颜色之和.题解:最显然的是DFS序+主席树或莫队,这里使用Dsu on tree. 每次 ...
- rmq问题:ST表
存板子.O(nlogn)预处理,O(1)查询.空间O(nlogn). int d[1000006][25]; int mn[1000006]; void rmq_init() { for(int i= ...
- 【模拟退火】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem F. Factory
让你在平面上取一个点,使得其到给定的所有点的距离和最小. 就是“费马点”. 模拟退火……日后学习一下,这是从网上扒的,先存下. #include<iostream> #include< ...
- 【最小割】BZOJ3438-小M的作物(Rank 2???!!!)(含新款Dinic模板)
一开始被T掉了之后,才害怕地发现之前写的Dinic基本上都是错的??!!!正确的写在注释里了,注意一下(;3<)馬鹿やろ 一个丧心病狂的优化前后效率对比:
- 操作系统介绍、python基础
操作系统 什么是操作系统? 操作系统位于计算机硬件与应用软件之间,是一个协调.管理.控制计算机硬件资源与软件资源的控制程序. 2.为何要操作系统 ① .控制硬件 ② .把对硬件的复杂的操作封装成 ...
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 1) Linear Regression
Andrew NG的Machine learning课程地址为:https://www.coursera.org/course/ml 在Linear Regression部分出现了一些新的名词,这些名 ...
- [bzoj1014](JSOI2008)火星人 prefix (Splay维护哈希)
Description 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀. 比方说,有这样一个字符串:madamimadam,我们将这个字符串的各个字符予以标号:序号: 1 2 3 4 5 6 ...
- #iOS问题记录#UITableView加载后直接滑动倒最底部
类似QQ的聊天框,当进入聊天框,直接滑动倒最底部: 需要先将以他变了view滚动倒底部,再来移动NSIndexPath, 代码如下: -(void) doForceScrollToBottom { d ...
- linux命令查看开放哪些端口
netstat -nupl (UDP类型的端口)netstat -ntpl (TCP类型的端口) a 表示所有 n表示不查询dns t表示tcp协议 u表示udp协议 p表示查询占用的程序 l表示查询 ...
- GridControl事件
private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventA ...