yxhxj2006
导航
BlogJava
首页
新随笔
联系
聚合
管理
<
2012年6月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
留言簿
(7)
给我留言
查看公开留言
查看私人留言
随笔分类
J2EE(17)
(rss)
java(13)
(rss)
Javascipt
(rss)
Linux(3)
(rss)
PHP(4)
(rss)
SQL(12)
(rss)
励志(3)
(rss)
测试
(rss)
文章分类
paypal
(rss)
随笔档案
2016年6月 (1)
2015年12月 (1)
2015年11月 (1)
2015年10月 (1)
2015年8月 (1)
2015年6月 (1)
2015年5月 (3)
2015年4月 (6)
2015年3月 (1)
2015年2月 (4)
2015年1月 (4)
2014年12月 (6)
2014年11月 (1)
2014年9月 (3)
2014年6月 (2)
2014年5月 (5)
2014年4月 (3)
2014年3月 (3)
2014年2月 (15)
2014年1月 (11)
2013年12月 (1)
2013年11月 (8)
2013年10月 (6)
2013年9月 (2)
2013年8月 (19)
2013年7月 (1)
2013年6月 (1)
2013年5月 (3)
2013年4月 (3)
2013年3月 (5)
2012年12月 (3)
2012年11月 (4)
2012年10月 (1)
2012年9月 (25)
2012年8月 (54)
2012年7月 (10)
2012年6月 (7)
阅读排行榜
1. Hibernate实现有两种配置,xml配置与注释配置(49832)
2. 公钥与私钥 (42304)
3. 使用POI读取EXCEL中的所有Sheet表 (25882)
4. Maven实战(六)依赖(11931)
5. Oracle中把一个查询结果插入到一张表中(11018)
评论排行榜
1. 公钥与私钥 (31)
2. Hibernate实现有两种配置,xml配置与注释配置(4)
3. Java通过URL获取网站Html源代码 (3)
4. 让HTML中的文本框中的文字垂直居中 .(3)
5. struts2表单传值(2)
常用链接
我的随笔
我的评论
我的参与
最新评论
统计
随笔 - 228
文章 - 0
评论 - 53
引用 - 0
最新评论
1. re: 公钥与私钥
评论内容较长,点击标题查看
--chinaltang
2. re: 如何在magento中建立自定义页面
请问站长,你这个增加以下片段是在哪里增加的,还有你这是怎么显示出来页面呢,总要点击页面上的哪个东西跳转到这个页面吧,那点击跳转怎么操作
--王小丫
3. re: 公钥与私钥
343434
--zhangsa
4. re: 公钥与私钥
真的写的非常好,通俗易懂,但是不知道有demo没有,要是有求一份。
--Divella
5. re: Hibernate实现有两种配置,xml配置与注释配置[未登录]
sa
--sa
Hibernate实现CRUD操作
最近学习hibernate有几天了,基本学会简单的增删改查,现在就把实现分享如下:
一: 首先需要建立数据库,而我采用的mysql数据库,为了更详细hibernate的映射,我把数据库表名和字段名与实体类的类名与属性名取得不一致。
create table t_teacher(
id
int
auto_increment,
t_username varchar(
50
),
t_age
int
,
primary key(id)
);
二:建立数据源连接:hibernate.cfg.xml
<?
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
>
<!--
Database connection settings
-->
<
property name
=
"
connection.driver_class
"
>
com.mysql.jdbc.Driver
</
property
>
<
property name
=
"
connection.url
"
>
jdbc:mysql:
//
localhost:3306/hxj</property>
<
property name
=
"
connection.username
"
>
root
</
property
>
<
property name
=
"
connection.password
"
>
root
</
property
>
<!--
JDBC connection pool (use the built
-
in)
-->
<!--
<
property name
=
"
connection.pool_size
"
>
1
</
property
>
-->
<!--
SQL dialect
-->
<
property name
=
"
dialect
"
>
org.hibernate.dialect.MySQLDialect
</
property
>
<!--
Enable Hibernate
'
s automatic session context management -->
<
property name
=
"
current_session_context_class
"
>
thread
</
property
>
<!--
Disable the second
-
level cache
-->
<
property name
=
"
cache.provider_class
"
>
org.hibernate.cache.NoCacheProvider
</
property
>
<!--
Echo all executed SQL to stdout
-->
<
property name
=
"
show_sql
"
>
true
</
property
>
<!--
Drop and re
-
create the database schema on startup
-->
<
property name
=
"
hbm2ddl.auto
"
>
update
</
property
>
<
mapping
class
=
"
com.wsw.hibernate.model.Teacher
"
/>
<!--
<
mapping resource
=
"
com/wsw/hibernate/model/Person.hbm.xml
"
/>-->
</
session
-
factory
>
</
hibernate
-
configuration
>
三:建立实体类:Teacher,由于我采用注解方式进行配置,所以需要再实体类上面加上注解。
package
com.wsw.hibernate.model;
import
java.io.Serializable;
import
javax.persistence.Column;
import
javax.persistence.Entity;
import
javax.persistence.GeneratedValue;
import
javax.persistence.Id;
import
javax.persistence.Table;
import
org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name
=
"
t_teacher
"
)
public
class
Teacher
implements
Serializable
{
private
int
id;
private
String username;
private
int
age;
@Id
@GenericGenerator(name
=
"
generator
"
, strategy
=
"
increment
"
)
@GeneratedValue(generator
=
"
generator
"
)
@Column(name
=
"
id
"
)
public
int
getId()
{
return
id;
}
public
void
setId(
int
id)
{
this
.id
=
id;
}
@Column(name
=
"
t_username
"
)
public
String getUsername()
{
return
username;
}
public
void
setUsername(String username)
{
this
.username
=
username;
}
@Column(name
=
"
t_age
"
)
public
int
getAge()
{
return
age;
}
public
void
setAge(
int
age)
{
this
.age
=
age;
}
}
四:创建获取SessionFactory的单例类:
package
com.wsw.hibernate.util;
import
org.hibernate.SessionFactory;
import
org.hibernate.cfg.AnnotationConfiguration;
import
org.hibernate.cfg.Configuration;
public
class
HibernateUtil
{
private
static
final
SessionFactory sessionFactory;
static
{
try
{
//
Create the SessionFactory from hibernate.cfg.xml
//
sessionFactory = new Configuration().configure().buildSessionFactory();
sessionFactory
=
new
AnnotationConfiguration().configure()
.buildSessionFactory();
}
catch
(Throwable ex)
{
//
Make sure you log the exception, as it might be swallowed
System.err.println(
"
Initial SessionFactory creation failed.
"
+
ex);
throw
new
ExceptionInInitializerError(ex);
}
}
public
static
SessionFactory getSessionFactory()
{
return
sessionFactory;
}
}
五:实现hibernate的CURD操作:
package
com.wsw.hibernate.action;
import
java.util.List;
import
org.hibernate.Query;
import
org.hibernate.Session;
import
org.hibernate.Transaction;
import
com.wsw.hibernate.model.Person;
import
com.wsw.hibernate.model.Teacher;
import
com.wsw.hibernate.util.HibernateUtil;
public
class
TeacherManager
{
public
static
void
main(String[] args)
{
//
selectTeacher_By_Load(1);
insertTeacher();
//
deleteTeacher();
selectAll();
//
updateTeacher();
//
insertTeacher();
//
createAndStoreTeacher();
//
select_All_By_Get(2);
//
select_AllPerson_By_Get();
//
annotation();
//
HibernateUtil.getSessionFactory().close();
}
/** */
/**
* 插入记录
*/
private
static
void
insertTeacher()
{
Session session
=
HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Teacher teacher
=
new
Teacher();
teacher.setUsername(
"
aaa
"
);
teacher.setAge(
25
);
session.save(teacher);
session.getTransaction().commit();
System.out.println(
"
insert teacher successfully
"
);
}
/** */
/**
* 删除记录操作
*/
private
static
void
deleteTeacher()
{
int
count;
Session session
=
HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Query query
=
session.createQuery(
"
delete Teacher where id=?
"
);
query.setParameter(
0
,
1
);
count
=
query.executeUpdate();
//
删除记录采用Update方式
session.getTransaction().commit();
System.out.println(
"
删除
"
+
count
+
"
条teacher记录
"
);
}
/** */
/**
* 根据id采用load方式查询
*
@param
id
*/
private
static
void
selectTeacher_By_Load(
int
id)
{
Session session
=
HibernateUtil.getSessionFactory().openSession();
//
load获取值不能采用这种方式获取session对象,因为load采用延迟加载/懒加载。而getCurrentSession()获取session时会自动关闭session对象,
//
所以会导致对象没有保存到内存中,然后你使用该对象了,导致该:org.hibernate.LazyInitializationException异常。
//
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Teacher teacher
=
(Teacher)session.load(Teacher.
class
, id);
//
只能是主键id获取对象值,不能以其他的表字段名获取对象值,否则,只能用HQL语句查询。
System.out.println(
"
load方式commit之前====>Id:
"
+
teacher.getId()
+
"
UserName:
"
+
teacher.getUsername()
+
"
Age:
"
+
teacher.getAge());
session.getTransaction().commit();
System.out.println(
"
load方式commit之后====》Id:
"
+
teacher.getId()
+
"
UserName:
"
+
teacher.getUsername()
+
"
Age:
"
+
teacher.getAge());
session.close();
//
load获取值session方式需要手动关闭session对象,而通过getCurrentSession()则会自动关闭session对象
}
/** */
/**
* 根据id采用get方式查询
*
@param
id
*/
private
static
void
selectTeacher_By_Get(
int
id)
{
Session session
=
HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Teacher teacher
=
(Teacher)session.get(Teacher.
class
, id);
System.out.println(
"
get方式commit之前====>Id:
"
+
teacher.getId()
+
"
UserName:
"
+
teacher.getUsername()
+
"
Age:
"
+
teacher.getAge());
session.getTransaction().commit();
System.out.println(
"
get方式commit之后====>Id:
"
+
teacher.getId()
+
"
UserName:
"
+
teacher.getUsername()
+
"
Age:
"
+
teacher.getAge());
}
/** */
/**
* 按条件查询记录
*/
private
static
void
selectAll_By_Request()
{
Session session
=
HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Query query
=
session.createQuery(
"
from Teacher where id=? and age=:tage
"
);
//
在条件语句中,可以用?和:两种方式。两者方式各有不同。
query.setParameter(
0
,
2
);
//
从0开始,而不是从1开始。采用?方式。
//
query.setInteger(0, 2);
//
上面的query.setParameter(0, 2)也可以用query.setInteger(0, 2)代替,效果一样
query.setParameter(
"
tage
"
,
27
);
//
采用:方式。前面参数名与之前的:后面的参数名必须一致。
//
query.setInteger("tage", 27);
//
上面的query.setParameter("tage", 27)也可以用query.setInteger("tage", 27)代替,效果一样
List
<
Teacher
>
listteacher
=
(List
<
Teacher
>
)query.list();
printList(listteacher);
}
/** */
/**
* 查询全部记录
*/
private
static
void
selectAll()
{
Session session
=
HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Query query
=
session.createQuery(
"
from Teacher
"
);
List
<
Teacher
>
listteacher
=
(List
<
Teacher
>
)query.list();
printList(listteacher);
}
/** */
/**
* 更新操作
*/
private
static
void
updateTeacher()
{
int
count;
Session session
=
HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Query query
=
session.createQuery(
"
update Teacher set t_username='何小景' where id=?
"
);
query.setInteger(
0
,
2
);
count
=
query.executeUpdate();
session.getTransaction().commit();
System.out.println(
"
更新
"
+
count
+
"
条记录
"
);
}
/** */
/**
* 打印List<Person>对象集合
*
@param
listteacher
*/
private
static
void
printList(List
<
Teacher
>
listteacher)
{
for
(Teacher teacher : listteacher)
{
System.out.println(
"
Id:
"
+
teacher.getId()
+
"
UserName:
"
+
teacher.getUsername()
+
"
Age:
"
+
teacher.getAge());
}
}
}
posted on 2012-06-30 10:29
奋斗成就男人
阅读(2942)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
Powered by:
BlogJava
Copyright © 奋斗成就男人