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 ...
随机推荐
- ESP-IDF3.0
发行版v3.0的文档可在http://esp-idf.readthedocs.io/en/v3.0/上找到. 这是自发布v3.0-rc1以来的更改列表. 如果从以前的稳定版本V2.1进行升级,请检查v ...
- 类变量的初始化时机(摘录自java突破程序员基本功德16课)
先看书本的一个例子,代码如下: public class Price { final static Price INSTANCE=new Price(2.8); static double initP ...
- [php-error-report]PHP Strict Standards: Only variables should be passed by reference
// 报错代码:PHP Strict Standards: Only variables should be passed by reference $arr_userInfo['im_nation_ ...
- php支付宝手机网页支付类实例
<?php $alipayConfig = array( 'key' => 'xxxxx', //买卖安全校验码,用于签名的32位密钥 'transport' => 'https', ...
- 关于tableview下拉刷新崩溃的问题
逻辑应该是这样的:1. 下拉2. 达到下拉临界值以后再请求网络数据3. 待数据加载到本地以后才更新 data source4. reload tableview 如果先清空再下拉,后果就是往下拉的距离 ...
- Windows安装配置docker
如果是win10的,请在https://docs.docker.com/docker-for-windows/install/#download-docker-for-windows 下载Stable ...
- C# 加特效
public class BulletMove : MonoBehaviour { public float Speed = 5f; public Transform Fx; // Use this ...
- 实现输入框不可输入、解决Enable,Disable等不能更新值问题
当在前台JS中更新不可用输入框(TextBox.Enable ="false" or Input box ReadOnly ="True")的值时, 后台可能 ...
- WPF Slider滑动条的颜色修改
效果如下: 鄙人虽然开发WPF有些时间,但之前一直是一些简单Template和Style改改之类的工作,并没有深入研究过.此次为了完成工作,首先也是网上搜了半天,没有找到合适的代码直接拷贝(搜索能力待 ...
- Angular build Error:In this configuration Angular requires Zone.js
Angular cli 运行 build后打开生成的index.html报错:In this configuration Angular requires Zone.js 生成代码如下: ng bui ...