首先我们看看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. [转]Android SQLite

    数据库操作SQLite Expert Personal 3 注:下载相关SQLite的文档在:http://www.sqlite.org/ 具体的sql语句不作长细介绍,在本博客中也有相关的文章. 一 ...

  2. hdu 1443 Joseph【约瑟夫环】

    题目 题意:一共有2k个人,分别为k个好人和k个坏人,现在我们需要每隔m个人把坏人挑出来,但是条件是最后一个坏人挑出来前不能有好人被挑出来..问最小的m是多少 约瑟夫环问题,通常解决这类问题时我们把编 ...

  3. Android中去掉标题栏

    在Android中去掉标题栏有三种方法,它们也有各自的特点. 1.在代码里实现 this.requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏 记 ...

  4. activemq生产者和消费者的双向通信

    http://websystique.com/spring/spring-4-jms-activemq-example-with-jmslistener-enablejms/

  5. php+sqlserver之如何操作sqlserver数据库

    https://blog.csdn.net/xia13100004562/article/details/58598872 2016年12月19日 17:15:39 阅读数:6790 前面已经基本配置 ...

  6. Spring Boot 应用系列 6 -- Spring Boot 2 整合Quartz

    Quartz是实现定时任务的利器,Quartz主要有四个组成部分,分别是: 1. Job(任务):包含具体的任务逻辑: 2. JobDetail(任务详情):是对Job的一种详情描述: 3. Trig ...

  7. PS插件CameraRaw-初次尝试

    一.百度百科原话 RAW的原意就是“未经加工”.可以理解为:RAW图像就是CMOS或者CCD图像感应器将捕捉到的光源信号转化为数字信号的原始数据.RAW文件是一种记录了数码相机传感器的原始信息,同时记 ...

  8. [学习笔记]树形dp

    最近几天学了一下树形\(dp\) 其实早就学过了 来提高一下打开树形\(dp\)的姿势. 1.没有上司的晚会 我的人生第一道树形\(dp\),其实就是两种情况: \(dp[i][1]\)表示第i个人来 ...

  9. Spring Boot切换为APR模式

    Spring Boot内置了tomcat容器,直接运行Application就可以启动web服务器. 在tomcat中提供了三种方式:BIO.NIO.APR. BIO tomcat7以下的版本都是BI ...

  10. linux apache+php+mysql安装及乱码解决办法

    1.乱码解决方法 首先确认mysql数据库字符集设置正确,php页面字符设置正确,之后修改apache配制文件http.conf 注释掉以下字符 AddDefaultCharset UTF-8 此为乱 ...