首先我们看看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进行对象的增删改查的更多相关文章

  1. hibernate关联对象的增删改查------查

    本篇博客是之前博客hibernate关联对象的增删改查------查 的后继,本篇代码的设定都在前文已经写好,因此读这篇之前,请先移步上一篇博客 //代码片5 SessionFactory sessi ...

  2. hibernate关联对象的增删改查------增

    本文可作为,北京尚学堂马士兵hibernate课程的学习笔记. 这一节,我们看看hibernate关联关系的增删改查 就关联关系而已,咱们在上一节已经提了很多了,一对多,多对一,单向,双向... 其实 ...

  3. Python之实例对象的增删改查

    #实例对象的增删改查p1 = ChinesePeople('wangyue')#print (p1.__dict__) #查看实例对象的属性#print (p1.name)(p1.play_ball( ...

  4. Hibernate入门案例及增删改查

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

  5. Struts2+Spring+Hibernate实现员工管理增删改查功能(一)之ssh框架整合

    前言        转载请标明出处:http://www.cnblogs.com/smfx1314/p/7795837.html 本项目是我写的一个练习,目的是回顾ssh框架的整合以及使用.项目介绍: ...

  6. Hibernate——(2)增删改查

    案例名称:Hibernate完成增删改查 案例描述:抽取出工具类并完成删除.修改.查询功能. 具体过程: 1.使用上面的例子(Hibernate--(1)Hibernate入门http://blog. ...

  7. 页面循环绑定(变量污染问题),js面向对象编程(对象属性增删改查),js字符串操作,js数组操作

    页面循环绑定(变量污染问题) var lis = document.querySelectorAll(".ul li") for ( var i = 0 ; i < lis. ...

  8. Hibernate常用api以及增删改查

    一   .API的定义 所谓的API全称就是(Application Programming Interface,应用程序编程接口).就是类库对外提供的接口.类.枚举.注解等元素. 如:JDK API ...

  9. 简述ADO中如何使用参数化的命令对象以及增删改查,存储过程的操作

    连接数据库代码: private SqlConnection con = null; public void OpenConnection(string connectionString) { con ...

随机推荐

  1. 团队项目之UML图设计---WeEdit

    团队信息: 学号: 姓名: 本次博客链接: 041602209 黄毓明(临时队长)  https://www.cnblogs.com/mingsonic/p/9820702.html 06160023 ...

  2. js-判断当前日期的天数

    <!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...

  3. 数字签名、数字证书的原理以及证书的获得java版

    数字签名原理简介(附数字证书) 首先要了解什么叫对称加密和非对称加密,消息摘要这些知识. 1. 非对称加密 在通信双方,如果使用非对称加密,一般遵从这样的原则:公钥加密,私钥解密.同时,一般一个密钥加 ...

  4. UniGUI的TUniLoginForm窗口自定义背景色和背景图片

    雨田家园 UniGUI的TUniLoginForm窗口自定义背景色 uniGUI的TUniLoginForm类创建的登录窗口默认是不带颜色,可以自定义css风格来改变背景颜色. 一般是通过在UniSe ...

  5. 使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能

    先来看看下面实时效果演示: 用户点击编辑时,在点击行下动态产生一行.编辑铵钮变为disabled.新产生的一行有更新和取消的铵钮,点击“取消”铵钮,删除刚刚动态产生的行.编辑铵钮状态恢复. 更新与删除 ...

  6. Lerning Entity Framework 6 ------ Introduction to TPT

    Sometimes, you've created a table for example named Person. Just then, you want to add some extra in ...

  7. UCore-Lab1

      日期:2019/3/31 内容:makefile分析: 一."Makefile"分析 1.1 ucore.img lab1已有的源文件 目录 文件 boot asm.h.boo ...

  8. canvas制作完美适配分享海报

    基于mpvue实现的1080*1900小程序海报 html   <canvas class="canvas" :style="'width:'+windowWidt ...

  9. Swift5 语言指南(二十一) 嵌套类型

    通常创建枚举以支持特定类或结构的功能.类似地,定义纯粹在更复杂类型的上下文中使用的实用程序类和结构可能是方便的.为此,Swift允许您定义嵌套类型,从而在它们支持的类型定义中嵌套支持枚举,类和结构. ...

  10. MyBatis全局配置文件标签详解

    一.全局配置文件结构 configuration 配置 properties 属性:可以加载properties配置文件的信息 settings 设置:可以设置mybatis的全局属性 typeAli ...