Hibernate进行对象的增删改查
首先我们看看hibernate手动配置步骤
(这个了解一点就可以了,以后是不会自己全部手动配置的)
1、 创建WEB项目
2 下载hibernate-release-4.3.11.Final.zip,并解压。
3 将hibernate必须的包加入lib
4 打开hibernate-release-4.3.11.Final\lib\required文件夹,导入jar文件:
5 打开hibernate-release-4.3.11.Final\lib\optional\ehcache文件夹,导入jar文件:
6 打开hibernate-release-4.3.11.Final\lib\optional\c3p0文件夹,导入jar文件:
7 配置hibernate.cfg.xml 打开hibernate-release-4.3.11.Final\project\etc文件夹,选择hibernate.cfg.xml文件并 复制到src下。
8 打开hibernate.cfg.xml文件,并设置数据库连接
如:
<!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>
<!-- 用于配置数据库连接信息 -->
<!-- 定义Hibernate访问数据库的方言 -->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!-- 定义数据库的连接信息 -->
<property name="connection.url">
jdbc:mysql://127.0.0.1:3306/j2ee?characterEncoding=utf-8
</property>
<!-- 定义连接用户名及密码 -->
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<!-- 定义连接驱动 -->
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property> <!-- 要求Hibernate执行SQL标准 -->
<property name="format_sql">true</property>
<!-- 要求Hibernate在控制台显示SQL -->
<property name="show_sql">true</property> <!-- 数据库基本配置完毕,继续配置数据源(DataSource) -->
<!-- 配置C3P0数据源信息 -->
<property name="hibernate.connection.provider_class">
org.hibernate.c3p0.internal.C3P0ConnectionProvider
</property> <!-- 指定连接池的最大连接量 -->
<property name="hibernate.c3p0.max_size">30</property>
<!-- 指定连接池的最小连接量 -->
<property name="hibernate.c3p0.min_size">1</property>
<!-- 指定连接池内连接的超时时长 -->
<property name="hibernate.c3p0.timeout">5000</property>
<!-- 指定连接池最大可以缓存多少个PreparedStatement -->
<property name="hibernate.c3p0.max_statements">100</property>
<!-- 指定连接池检查线程间隔多长时间,检测一次池内的所有连接的对象是否超时 -->
<property name="hibernate.c3p0.idle_test_period">3000</property>
<!-- 当连接池里面的连接用完的之后,C3p0数据源可以重新获取的连接数 -->
<property name="hibernate.c3p0.acquire_increment">5</property>
<!-- 以上就是C3P0数据源的一个配置 --> <!-- 添加"对象.hbm.xml"文件 -->
<mapping resource="com/cy/xmls/UserBean.hbm.xml"/> </session-factory>
</hibernate-configuration>
9 创建数据库表,并封装实体Bean与XXX.hbm.xml文件,
如:
package com.cy.beans; import java.io.Serializable; public class UserBean implements Serializable { private static final long serialVersionUID = 1L; private Integer id;
private String userName;
private String password;
public UserBean() {
super();
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "UserBean [id=" + id + ", userName=" + userName + ", password="
+ password + "]";
} }
<?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> <class name="com.cy.beans.UserBean" table="t_user" catalog="j2ee"> <!-- catalog数据库 --> <id name="id" type="int"><!-- 此行的ID,为对象的属性ID -->
<column name="id"></column><!-- 此行的ID,为表字段ID -->
<generator class="identity"></generator><!-- 给ID指定生成策略 -->
</id> <property name="userName" type="java.lang.String">
<column name="userName"></column>
</property> <property name="password" type="java.lang.String">
<column name="pwd"></column>
</property> </class> </hibernate-mapping>
10 hibernate如何CRUD 获取Session对象:
如:
package com.cy.tools; import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry; /**
* session工厂的工具类
* @author acer
*
*/ public class HibernateUtils { private static Configuration cfg;
private static SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry; static{ cfg = new Configuration().configure();
System.out.println(cfg);
serviceRegistry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
System.out.println(serviceRegistry);
sessionFactory = cfg.buildSessionFactory(serviceRegistry); } public static SessionFactory getSessionFactory(){
return sessionFactory;
} }
今天主要学习的内容就是hibernate的增删改查;
我们以一个t_user表为例:
先把框架写好:
看UserDaoImpl里的代码:
package com.cy.dao.impl; import java.io.Serializable;
import java.util.List;
import java.util.Map; import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction; import com.cy.beans.UserBean;
import com.cy.dao.IUserDao;
import com.cy.tools.HibernateUtils; public class UserDaoImpl implements IUserDao { @Override
public void saveUser(UserBean ub) {
//获取Session
Session session = null;
Transaction tx = null;
try {
session = HibernateUtils.getSessionFactory().openSession();
tx = session.beginTransaction();//开启事务
session.save(ub);//将user对象交给Session管理
tx.commit();//提交
} catch (Exception e) {
e.printStackTrace();
tx.rollback();//回滚
}finally{
session.close();//关闭
}
} @Override
public void updateUser(UserBean ub) {
Session session = null;
Transaction tx = null;
try {
session=HibernateUtils.getSessionFactory().openSession();
tx=session.beginTransaction();
session.update(ub);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
session.close();
} } @Override
public void deleteUser(UserBean ub) {
Session session = null;
Transaction tx = null;
try {
session=HibernateUtils.getSessionFactory().openSession();
tx=session.beginTransaction();
session.delete(ub);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
session.close();
} } @Override
public List<?> findUser(String sql, Map<String, Object> pram) {
Session session = null;
Transaction tx = null;
List<?> list=null;
try {
session=HibernateUtils.getSessionFactory().openSession();
tx=session.beginTransaction();
Query query= session.createQuery(sql).setCacheable(true);//查询
String userName=pram.get("userName").toString();
String password=pram.get("password").toString();
query.setString("userName", '%'+userName+'%');
query.setString("password",'%'+password+'%');
list=query.list();
tx.commit(); } catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
session.close();
}
return list;
} @Override
public UserBean getUser(Class<?> cls, Serializable pk) {
Session session = null;
Transaction tx = null;
UserBean user=null; try {
session=HibernateUtils.getSessionFactory().openSession();
tx=session.beginTransaction(); user=(UserBean)session.get(cls, pk); tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
session.close();
} return user;
} }
看UserServerImpl的代码:
package com.cy.server.impl; import java.io.Serializable;
import java.util.List;
import java.util.Map; import com.cy.beans.UserBean;
import com.cy.dao.IUserDao;
import com.cy.dao.impl.UserDaoImpl;
import com.cy.server.IUserServer; public class UserServerImpl implements IUserServer{ IUserDao iusUserDao=new UserDaoImpl();
/**
* 添加
*/
@Override
public void saveUser(UserBean ub) {
iusUserDao.saveUser(ub); } /**
* 修改
*/
@Override
public void updateUser(UserBean ub) {
iusUserDao.updateUser(ub); } /**
* 删除
*/
@Override
public void deleteUser(Integer id) {
//先查询
UserBean ub=iusUserDao.getUser(UserBean.class,id);
//后删除
if(ub!=null){
iusUserDao.deleteUser(ub);
} } /**
* 数据集合
*/
@Override
public List<?> findUser(Map<String,Object>pram) {
//模糊查询
String hql="from UserBean where 1=1 and userName like :userName and password like :password";
return iusUserDao.findUser(hql, pram);
} /**
* 查询
*/
@Override
public UserBean getUser(Class<?> cls, Serializable pk) {
return iusUserDao.getUser(cls, pk);
} }
TestAction的代码:
package com.cy.action; import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.cy.beans.UserBean;
import com.cy.server.IUserServer;
import com.cy.server.impl.UserServerImpl; public class TestAction { public static void main(String[] args) {
// saveUser();
// delete();
// update();
// queryUserBean();
} /**
*测试 根据条件来查询数据
*/
/*private static void queryUserBean() {
Map<String,Object> map=new HashMap<String, Object>();
IUserServer ius=new UserServerImpl();
//模糊查询
map.put("userName", "kitty");
map.put("password", "kitty");
List<?> list=ius.findUser(map);
for (Object object : list) {
UserBean ub=(UserBean) object;
System.out.println(ub);
}
}
*/ /**
* 测试修改数据
*/
/*private static void update() {
IUserServer ius=new UserServerImpl();
UserBean ub=new UserBean();
//先查询
ub=ius.getUser(UserBean.class, Integer.valueOf(1));
//后修改
if(ub!=null){
ub.setUserName("tomcat");
}
ius.updateUser(ub);
}
*/ /**
* 测试删除数据
*/
/*private static void delete() {
IUserServer ius=new UserServerImpl();
ius.deleteUser(Integer.valueOf(11)); }*/ /**
* 测试添加数据
*/
/*private static void saveUser() {
//首先从页面获取数据
IUserServer ius=new UserServerImpl();
UserBean ub=new UserBean();
ub.setPassword("111");
ub.setUserName("111");
ius.saveUser(ub);
}*/ }
数据库表:
create DATABASE j2ee;
create table t_user(
id int primary key auto_increment,
userName varchar(20),
pwd varchar(20)
);
作业 分页!
问题:
在完成这些之前呢,我遇到了个问题,就是我的session就是一直都得不到。
找了很久的错误,在上课的时候就一直没找到,放学的时候同学提醒了我,回去看看你的xml文件配置的问题,一个单词都不可以错的。
我在想会不会是我的表的名字有误呢。我直接把表名设置为user。
映射文件通常是以"类名+.hbm.xml"这样命名的。
我之前的UserBean.hbm.xml
<?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> <class name="com.cy.beans.UserBean" table="user" catalog="car"> <!-- catalog数据库 --> <id name="id" type="java.lang.integer"><!-- 此行的ID,为对象的属性ID -->
<column name="userId"></column><!-- 此行的ID,为表字段ID -->
<generator class="identity"></generator><!-- 给ID指定生成策略 -->
</id> <property name="userName" type="java.lang.String">
<column name="userName"></column>
</property> <property name="password" type="java.lang.String">
<column name="pwd"></column>
</property> </class> </hibernate-mapping>
后来我重新建立了个数据库,j2ee,重新建表t_user。
改过之后的UserBean.hbm.xml
<?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> <class name="com.cy.beans.UserBean" table="t_user" catalog="j2ee"> <!-- catalog数据库 --> <id name="id" type="int"><!-- 此行的ID,为对象的属性ID --> <!--这里的type我就没有使用包装类-->
<column name="id"></column><!-- 此行的ID,为表字段ID -->
<generator class="identity"></generator><!-- 给ID指定生成策略 -->
</id> <property name="userName" type="java.lang.String">
<column name="userName"></column>
</property> <property name="password" type="java.lang.String">
<column name="pwd"></column>
</property> </class> </hibernate-mapping>
这样改了之后就可以得到session了。所以总之在配置的时候,需要细心的!字母的大小写
,type="integer";,这样也是对的。
type="java.lang.Integer".
Hibernate进行对象的增删改查的更多相关文章
- hibernate关联对象的增删改查------查
本篇博客是之前博客hibernate关联对象的增删改查------查 的后继,本篇代码的设定都在前文已经写好,因此读这篇之前,请先移步上一篇博客 //代码片5 SessionFactory sessi ...
- hibernate关联对象的增删改查------增
本文可作为,北京尚学堂马士兵hibernate课程的学习笔记. 这一节,我们看看hibernate关联关系的增删改查 就关联关系而已,咱们在上一节已经提了很多了,一对多,多对一,单向,双向... 其实 ...
- Python之实例对象的增删改查
#实例对象的增删改查p1 = ChinesePeople('wangyue')#print (p1.__dict__) #查看实例对象的属性#print (p1.name)(p1.play_ball( ...
- Hibernate入门案例及增删改查
一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...
- Struts2+Spring+Hibernate实现员工管理增删改查功能(一)之ssh框架整合
前言 转载请标明出处:http://www.cnblogs.com/smfx1314/p/7795837.html 本项目是我写的一个练习,目的是回顾ssh框架的整合以及使用.项目介绍: ...
- Hibernate——(2)增删改查
案例名称:Hibernate完成增删改查 案例描述:抽取出工具类并完成删除.修改.查询功能. 具体过程: 1.使用上面的例子(Hibernate--(1)Hibernate入门http://blog. ...
- 页面循环绑定(变量污染问题),js面向对象编程(对象属性增删改查),js字符串操作,js数组操作
页面循环绑定(变量污染问题) var lis = document.querySelectorAll(".ul li") for ( var i = 0 ; i < lis. ...
- Hibernate常用api以及增删改查
一 .API的定义 所谓的API全称就是(Application Programming Interface,应用程序编程接口).就是类库对外提供的接口.类.枚举.注解等元素. 如:JDK API ...
- 简述ADO中如何使用参数化的命令对象以及增删改查,存储过程的操作
连接数据库代码: private SqlConnection con = null; public void OpenConnection(string connectionString) { con ...
随机推荐
- 探Java多线程Thread类和Runnable接口之间的联系
首先复习一下Java多线程实现机制,Java实现多线程方法有如下这么几种: 1.继承了(extends)Thread类 2.实现了(implements)Runnable接口 也就是说 有如下两种情 ...
- Android记录10--android.os.NetworkOnMainThreadException异常解决办法
2013年11月1日小光棍节 有一段时间没有发表新的博客了,最近一直在忙着开发新浪微博客户端遇到很多问题比较头痛,比如说本篇博客要讲的NetworkOnMainThreadException这个异常, ...
- HDU 4893 线段树的 点更新 区间求和
Wow! Such Sequence! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- Android-Java静态代码块&局部代码块
静态代码块: 静态代码块什么时候执行,是由当前类被加载进内存的时候,什么时候当前类被加载进内存? 答:例如 描述好了Student对象,当 new Student(); 的时候,第一步:是把Stude ...
- 三、Kubernetes之深入了解Pod
1.yaml格式的Pod配置文件内容及注解 深入Pod之前,首先我们来了解下Pod的yaml整体文件内容及功能注解. 如下: # yaml格式的pod定义文件完整内容: apiVersion: v ...
- Spring与多线程
前言背景 在做新项目,作为中间件的项目,主要做数据服务.这次想把项目做的简洁一些,之前用的什么ActiveMq等中间件产品,这次全部不用,能自己实现就自己实现.自己用BlockingQueue阻塞队列 ...
- 利用CPaintDC::IntersectClipRect将绘图限制在局部区域
问题背景:画带坐标的图,例如 画里面那条曲线的时候,希望将绘图区域局限在坐标范围内,范围外的就自动屏蔽掉. 两个方案,一是用CPaintDC的SelectClipRgn函数,感觉略麻烦.另一个函数,就 ...
- 58VIP账号发贴器
因公司有招聘大量普工需求,需要大量简历资源,直接从58买一份简历动辄几块到几十块,如果做精准少则1块以上的点击.而且收到的简历不太精准,应公司需求写了一款自动发贴器.完全模拟人工发贴,经过一个月的测试 ...
- 剑指offer编程题Java实现——面试题7相关题用两个队列实现一个栈
剑指offer面试题7相关题目:用两个队列实现一个栈 解题思路:根据栈的先入后出和队列的先入先出的特点1.在push的时候,把元素向非空的队列内添加2.在pop的时候,把不为空的队列中的size()- ...
- Data - 数据思维
数据思维 数据思维全解析 如何建立数据分析的思维框架 做数据分析时,你的方法论是什么? 数据分析全流程资料,适合各路人马 百度内部培训资料PPT:数据分析的道与术 学会数据分析背后的挖掘思维,分析就完 ...