首先我们看看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 4 56 7 8 9 5810 org.hibernate.dialect.MySQLDialect11 12 1314 jdbc:mysql://127.0.0.1:3306/j2ee?characterEncoding=utf-815 16 17root 18root 19 2021 com.mysql.jdbc.Driver22 23 24 25true 26 27true 28 29 30 31 32 33 3435 org.hibernate.c3p0.internal.C3P0ConnectionProvider36 37 38 3930 40 411 42 435000 44 45100 46 473000 48 495 50 51 52 53 54 5556 57
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 @Override37 public String toString() {38 return "UserBean [id=" + id + ", userName=" + userName + ", password="39 + password + "]";40 }41 42 43 }
1 2 5 67 8 9 10 24 2511 14 1512 13 16 18 1917 20 22 2321
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 acer11 *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, Mappram) { 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 @Override102 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 @Override19 public void saveUser(UserBean ub) {20 iusUserDao.saveUser(ub);21 22 }23 24 25 /**26 * 修改27 */28 @Override29 public void updateUser(UserBean ub) {30 iusUserDao.updateUser(ub);31 32 }33 34 /**35 * 删除36 */37 @Override38 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 @Override52 public List findUser(Mappram) {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 @Override62 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 Mapmap=new HashMap ();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 2 5 67 8 9 10 24 2511 14 1512 13 16 18 1917 20 22 2321
后来我重新建立了个数据库,j2ee,重新建表t_user。
改过之后的UserBean.hbm.xml
1 2 5 67 8 9 10 24 2511 14 1512 13 16 18 1917 20 22 2321
这样改了之后就可以得到session了。所以总之在配置的时候,需要细心的!字母的大小写
,type="integer";,这样也是对的。
type="java.lang.Integer".