首先我们看看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文件,并设置数据库连接
如:
1 <!DOCTYPE hibernate-configuration PUBLIC 2 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 3 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 4 5 <hibernate-configuration> 6 <session-factory> 7 <!-- 用于配置数据库连接信息 --> 8 <!-- 定义Hibernate访问数据库的方言 --> 9 <property name="dialect"> 10 org.hibernate.dialect.MySQLDialect 11 </property> 12 <!-- 定义数据库的连接信息 --> 13 <property name="connection.url"> 14 jdbc:mysql://127.0.0.1:3306/j2ee?characterEncoding=utf-8 15 </property> 16 <!-- 定义连接用户名及密码 --> 17 <property name="connection.username">root</property> 18 <property name="connection.password">root</property> 19 <!-- 定义连接驱动 --> 20 <property name="connection.driver_class"> 21 com.mysql.jdbc.Driver 22 </property> 23 24 <!-- 要求Hibernate执行SQL标准 --> 25 <property name="format_sql">true</property> 26 <!-- 要求Hibernate在控制台显示SQL --> 27 <property name="show_sql">true</property> 28 29 30 31 32 <!-- 数据库基本配置完毕,继续配置数据源(DataSource) --> 33 <!-- 配置C3P0数据源信息 --> 34 <property name="hibernate.connection.provider_class"> 35 org.hibernate.c3p0.internal.C3P0ConnectionProvider 36 </property> 37 38 <!-- 指定连接池的最大连接量 --> 39 <property name="hibernate.c3p0.max_size">30</property> 40 <!-- 指定连接池的最小连接量 --> 41 <property name="hibernate.c3p0.min_size">1</property> 42 <!-- 指定连接池内连接的超时时长 --> 43 <property name="hibernate.c3p0.timeout">5000</property> 44 <!-- 指定连接池最大可以缓存多少个PreparedStatement --> 45 <property name="hibernate.c3p0.max_statements">100</property> 46 <!-- 指定连接池检查线程间隔多长时间,检测一次池内的所有连接的对象是否超时 --> 47 <property name="hibernate.c3p0.idle_test_period">3000</property> 48 <!-- 当连接池里面的连接用完的之后,C3p0数据源可以重新获取的连接数 --> 49 <property name="hibernate.c3p0.acquire_increment">5</property> 50 <!-- 以上就是C3P0数据源的一个配置 --> 51 52 53 54 <!-- 添加"对象.hbm.xml"文件 --> 55 <mapping resource="com/cy/xmls/UserBean.hbm.xml"/> 56 57 </session-factory> 58 </hibernate-configuration>
9 创建数据库表,并封装实体Bean与XXX.hbm.xml文件,
如:
1 package com.cy.beans; 2 3 import java.io.Serializable; 4 5 public class UserBean implements Serializable { 6 7 private static final long serialVersionUID = 1L; 8 9 private Integer id; 10 private String userName; 11 private String password; 12 public UserBean() { 13 super(); 14 } 15 16 public Integer getId() { 17 return id; 18 } 19 20 public void setId(Integer id) { 21 this.id = id; 22 } 23 24 public String getUserName() { 25 return userName; 26 } 27 public void setUserName(String userName) { 28 this.userName = userName; 29 } 30 public String getPassword() { 31 return password; 32 } 33 public void setPassword(String password) { 34 this.password = password; 35 } 36 @Override 37 public String toString() { 38 return "UserBean [id=" + id + ", userName=" + userName + ", password=" 39 + password + "]"; 40 } 41 42 43 }
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 5 6 <hibernate-mapping> 7 8 <class name="com.cy.beans.UserBean" table="t_user" catalog="j2ee"> <!-- catalog数据库 --> 9 10 <id name="id" type="int"><!-- 此行的ID,为对象的属性ID --> 11 <column name="id"></column><!-- 此行的ID,为表字段ID --> 12 <generator class="identity"></generator><!-- 给ID指定生成策略 --> 13 </id> 14 15 <property name="userName" type="java.lang.String"> 16 <column name="userName"></column> 17 </property> 18 19 <property name="password" type="java.lang.String"> 20 <column name="pwd"></column> 21 </property> 22 23 </class> 24 25 </hibernate-mapping>
10 hibernate如何CRUD 获取Session对象:
如:
1 package com.cy.tools; 2 3 import org.hibernate.SessionFactory; 4 import org.hibernate.boot.registry.StandardServiceRegistryBuilder; 5 import org.hibernate.cfg.Configuration; 6 import org.hibernate.service.ServiceRegistry; 7 8 /** 9 * session工厂的工具类 10 * @author acer 11 * 12 */ 13 14 public class HibernateUtils { 15 16 private static Configuration cfg; 17 private static SessionFactory sessionFactory; 18 private static ServiceRegistry serviceRegistry; 19 20 static{ 21 22 cfg = new Configuration().configure(); 23 System.out.println(cfg); 24 serviceRegistry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build(); 25 System.out.println(serviceRegistry); 26 sessionFactory = cfg.buildSessionFactory(serviceRegistry); 27 28 } 29 30 public static SessionFactory getSessionFactory(){ 31 return sessionFactory; 32 } 33 34 35 36 }
今天主要学习的内容就是hibernate的增删改查;
我们以一个t_user表为例:
先把框架写好:
看UserDaoImpl里的代码:
1 package com.cy.dao.impl; 2 3 import java.io.Serializable; 4 import java.util.List; 5 import java.util.Map; 6 7 8 9 10 import org.hibernate.Query; 11 import org.hibernate.Session; 12 import org.hibernate.Transaction; 13 14 import com.cy.beans.UserBean; 15 import com.cy.dao.IUserDao; 16 import com.cy.tools.HibernateUtils; 17 18 public class UserDaoImpl implements IUserDao { 19 20 21 @Override 22 public void saveUser(UserBean ub) { 23 //获取Session 24 Session session = null; 25 Transaction tx = null; 26 try { 27 session = HibernateUtils.getSessionFactory().openSession(); 28 tx = session.beginTransaction();//开启事务 29 session.save(ub);//将user对象交给Session管理 30 tx.commit();//提交 31 } catch (Exception e) { 32 e.printStackTrace(); 33 tx.rollback();//回滚 34 }finally{ 35 session.close();//关闭 36 } 37 } 38 39 @Override 40 public void updateUser(UserBean ub) { 41 Session session = null; 42 Transaction tx = null; 43 try { 44 session=HibernateUtils.getSessionFactory().openSession(); 45 tx=session.beginTransaction(); 46 session.update(ub); 47 tx.commit(); 48 } catch (Exception e) { 49 e.printStackTrace(); 50 tx.rollback(); 51 }finally{ 52 session.close(); 53 } 54 55 56 } 57 58 @Override 59 public void deleteUser(UserBean ub) { 60 Session session = null; 61 Transaction tx = null; 62 try { 63 session=HibernateUtils.getSessionFactory().openSession(); 64 tx=session.beginTransaction(); 65 session.delete(ub); 66 tx.commit(); 67 } catch (Exception e) { 68 e.printStackTrace(); 69 tx.rollback(); 70 }finally{ 71 session.close(); 72 } 73 74 } 75 76 @Override 77 public List<?> findUser(String sql, Map<String, Object> pram) { 78 Session session = null; 79 Transaction tx = null; 80 List<?> list=null; 81 try { 82 session=HibernateUtils.getSessionFactory().openSession(); 83 tx=session.beginTransaction(); 84 Query query= session.createQuery(sql).setCacheable(true);//查询 85 String userName=pram.get("userName").toString(); 86 String password=pram.get("password").toString(); 87 query.setString("userName", '%'+userName+'%'); 88 query.setString("password",'%'+password+'%'); 89 list=query.list(); 90 tx.commit(); 91 92 } catch (Exception e) { 93 e.printStackTrace(); 94 tx.rollback(); 95 }finally{ 96 session.close(); 97 } 98 return list; 99 } 100 101 @Override 102 public UserBean getUser(Class<?> cls, Serializable pk) { 103 Session session = null; 104 Transaction tx = null; 105 UserBean user=null; 106 107 try { 108 session=HibernateUtils.getSessionFactory().openSession(); 109 tx=session.beginTransaction(); 110 111 user=(UserBean)session.get(cls, pk); 112 113 114 tx.commit(); 115 } catch (Exception e) { 116 e.printStackTrace(); 117 tx.rollback(); 118 }finally{ 119 session.close(); 120 } 121 122 123 return user; 124 } 125 126 }
看UserServerImpl的代码:
1 package com.cy.server.impl; 2 3 import java.io.Serializable; 4 import java.util.List; 5 import java.util.Map; 6 7 import com.cy.beans.UserBean; 8 import com.cy.dao.IUserDao; 9 import com.cy.dao.impl.UserDaoImpl; 10 import com.cy.server.IUserServer; 11 12 public class UserServerImpl implements IUserServer{ 13 14 IUserDao iusUserDao=new UserDaoImpl(); 15 /** 16 * 添加 17 */ 18 @Override 19 public void saveUser(UserBean ub) { 20 iusUserDao.saveUser(ub); 21 22 } 23 24 25 /** 26 * 修改 27 */ 28 @Override 29 public void updateUser(UserBean ub) { 30 iusUserDao.updateUser(ub); 31 32 } 33 34 /** 35 * 删除 36 */ 37 @Override 38 public void deleteUser(Integer id) { 39 //先查询 40 UserBean ub=iusUserDao.getUser(UserBean.class,id); 41 //后删除 42 if(ub!=null){ 43 iusUserDao.deleteUser(ub); 44 } 45 46 } 47 48 /** 49 * 数据集合 50 */ 51 @Override 52 public List<?> findUser(Map<String,Object>pram) { 53 //模糊查询 54 String hql="from UserBean where 1=1 and userName like :userName and password like :password"; 55 return iusUserDao.findUser(hql, pram); 56 } 57 58 /** 59 * 查询 60 */ 61 @Override 62 public UserBean getUser(Class<?> cls, Serializable pk) { 63 return iusUserDao.getUser(cls, pk); 64 } 65 66 }
TestAction的代码:
1 package com.cy.action; 2 3 import java.util.HashMap; 4 import java.util.List; 5 import java.util.Map; 6 7 import com.cy.beans.UserBean; 8 import com.cy.server.IUserServer; 9 import com.cy.server.impl.UserServerImpl; 10 11 public class TestAction { 12 13 public static void main(String[] args) { 14 // saveUser(); 15 // delete(); 16 // update(); 17 // queryUserBean(); 18 } 19 20 /** 21 *测试 根据条件来查询数据 22 */ 23 /*private static void queryUserBean() { 24 Map<String,Object> map=new HashMap<String, Object>(); 25 IUserServer ius=new UserServerImpl(); 26 //模糊查询 27 map.put("userName", "kitty"); 28 map.put("password", "kitty"); 29 List<?> list=ius.findUser(map); 30 for (Object object : list) { 31 UserBean ub=(UserBean) object; 32 System.out.println(ub); 33 } 34 } 35 */ 36 37 38 /** 39 * 测试修改数据 40 */ 41 /*private static void update() { 42 IUserServer ius=new UserServerImpl(); 43 UserBean ub=new UserBean(); 44 //先查询 45 ub=ius.getUser(UserBean.class, Integer.valueOf(1)); 46 //后修改 47 if(ub!=null){ 48 ub.setUserName("tomcat"); 49 } 50 ius.updateUser(ub); 51 } 52 */ 53 54 55 /** 56 * 测试删除数据 57 */ 58 /*private static void delete() { 59 IUserServer ius=new UserServerImpl(); 60 ius.deleteUser(Integer.valueOf(11)); 61 62 }*/ 63 64 /** 65 * 测试添加数据 66 */ 67 /*private static void saveUser() { 68 //首先从页面获取数据 69 IUserServer ius=new UserServerImpl(); 70 UserBean ub=new UserBean(); 71 ub.setPassword("111"); 72 ub.setUserName("111"); 73 ius.saveUser(ub); 74 }*/ 75 76 77 78 }
数据库表:
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
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 5 6 <hibernate-mapping> 7 8 <class name="com.cy.beans.UserBean" table="user" catalog="car"> <!-- catalog数据库 --> 9 10 <id name="id" type="java.lang.integer"><!-- 此行的ID,为对象的属性ID --> 11 <column name="userId"></column><!-- 此行的ID,为表字段ID --> 12 <generator class="identity"></generator><!-- 给ID指定生成策略 --> 13 </id> 14 15 <property name="userName" type="java.lang.String"> 16 <column name="userName"></column> 17 </property> 18 19 <property name="password" type="java.lang.String"> 20 <column name="pwd"></column> 21 </property> 22 23 </class> 24 25 </hibernate-mapping>
后来我重新建立了个数据库,j2ee,重新建表t_user。
改过之后的UserBean.hbm.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 5 6 <hibernate-mapping> 7 8 <class name="com.cy.beans.UserBean" table="t_user" catalog="j2ee"> <!-- catalog数据库 --> 9 10 <id name="id" type="int"><!-- 此行的ID,为对象的属性ID --> <!--这里的type我就没有使用包装类--> 11 <column name="id"></column><!-- 此行的ID,为表字段ID --> 12 <generator class="identity"></generator><!-- 给ID指定生成策略 --> 13 </id> 14 15 <property name="userName" type="java.lang.String"> 16 <column name="userName"></column> 17 </property> 18 19 <property name="password" type="java.lang.String"> 20 <column name="pwd"></column> 21 </property> 22 23 </class> 24 25 </hibernate-mapping>
这样改了之后就可以得到session了。所以总之在配置的时候,需要细心的!字母的大小写
,type="integer";,这样也是对的。
type="java.lang.Integer".