SSH数据库与整合

本文详细介绍了SSH(Spring、Struts、Hibernate)整合的步骤,包括数据库创建、项目搭建、依赖添加、配置文件编写、实体类和注解使用等。通过多个测试类展示了Hibernate的增删改查操作,强调了数据状态转换的重要性,特别是持久状态在修改和删除操作中的作用。还探讨了如何进行数据库查询,包括模糊查询、计数查询、分页查询等,并解释了游离状态和持久状态之间的转换。
摘要由CSDN通过智能技术生成
SSH整合的步骤:
1.创建数据库 db1707
2.创建java项目hibernate1_helloworld
3.加入架包
(1)c3p0 (2)mysql (3)required

4.创建配置文件hibernate.cfg.xml
5.创建实体类com.test.po.News
6.在News中加入hibernate注解
7.写一个工具类.com.test.util.DBUitls, 在类中封装创建SessionFactory对象,
创建SessionFactory对象中封装了hibernate.cfg.xml的信息
8.写一个测式类,来使用数据库,  类名:  com.test.test.TestDao;

在数据库中可以没有表,在JAVAWEB项目中配置如下相关操作,会自动生成响应的表。
@Entity
//@Table(name = "news_inf") // 配置对应的表名,默认表名为类名。
public class News implements Serializable {
@Id // 表示该字段为主键
@GeneratedValue(strategy = GenerationType.IDENTITY)//设置字段自增长
@Column(name="xxx")
private int id;
......

@Test
public void queryById() {
SessionFactory sf = DBUtils.getSF();// 创建SessionFactory
Session sess = sf.openSession();// 创建Session
Transaction tr = sess.beginTransaction(); // 开启事务

// News news = (News) sess.get(News.class, 5); //Integer
News news = (News) sess.load(News.class, 5);// 根据主键的值2查询记录。

System.out.println(news);

tr.commit();// 提交事务,事务结束1
sess.close();
System.out.println(news);
}

@Test
public void hqlQuery() {
SessionFactory sf = DBUtils.getSF();// 创建SessionFactory
Session sess = sf.openSession();// 创建Session
Transaction tr = sess.beginTransaction(); // 开启事务

String hql = "select s from News s where s.id> :xid and s.title = :xtitle";
Query query = sess.createQuery(hql);
query.setInteger("xid", 0);
query.setString("xtitle", "手机");

Iterator it = query.iterate();

while (it.hasNext()) {
News news = (News) it.next();
System.out.println(news);
}
tr.commit();// 提交事务,事务结束1
sess.close();
}



hibernate的状态转换图


下面来讲解增删改需要注意的问题:
hibernate  的修改和删除,只有在持久状态下才能进行,其它的状态是不生效的。
让数据变为持久状态有两种方式:①先执行 查询操作,将查询出来的数据做响应增删改操作。
   ② 保存之后在做其它的增删改操作。

示例1:
// 查出后才能修改
@Test
public void update1() {
SessionFactory sf = DBUtils.getSF();// 创建SessionFactory
Session sess = sf.openSession();// 创建Session
Transaction tr = sess.beginTransaction(); // 开启事务

News news = (News) sess.load(News.class, 7);// 根据主键的值6查询记录。
news.setTitle("学校1");
news.setContent("华清远见就是好1");
news.setGrade(100);
tr.commit();// 提交事务,事务结束
sess.close();
}
示例2:
@Test
public void saveNews() {
News news = new News();//临时状态
news.setTitle("好专业");
news.setContent(";
news.setGrade(100);
SessionFactory sf = DBUtils.getSF();// 得到SessionFactory
Session sess = sf.openSession();// 创建Session
Transaction tr = sess.beginTransaction(); // 开启事务

sess.save(news);// 执行保存,只能传递临时状态的news,保存之后变成了持久状态
sess.save(news);//此条语句将不生效,只会生成一条记录。
// sess.saveOrUpdate(news);// 执行保存
// sess.delete(news);//只能删除持久状态,删除后变成了临时状态
tr.commit();// 提交事务,事务结束
sess.close();
}

数据库查询的其它重要知识点。
示例3:
//根据key模糊查询
public List getNewsByKeyTitle(String key) {
Session session = DBUtils.getSF().openSession();
// Transaction ts = session.beginTransaction();
session.beginTransaction();
//模糊查询的关键字like.
String hql = "select s from News s where s.title like :title";
Query query = session.createQuery(hql);
query.setString("title", "%"+key+"%");
List list = query.list();
// ts.commit();
session.getTransaction().commit();
session.close();
return list;
}

示例4:
public Long functionQuery() {
Session session = DBUtils.getSF().openSession();
session.beginTransaction();
String hql = "select count(s.id) from News s";
Query query = session.createQuery(hql);
List list = query.list();
Long x = list.get(0);
session.getTransaction().commit();
session.close();
return x;
}

示例5:
@Test
public void pageQuery() {
Session session = DBUtils.getSF().openSession();
session.beginTransaction();
String hql = "select s from News s";    
Query query = session.createQuery(hql);
query.setFirstResult(10);//索引
query.setMaxResults(5);//每页条数
 
List list = query.list();
for (News news : list) {
System.out.println(news);
}
session.getTransaction().commit();
session.close();
}

状态的切换
//进入游离状态
@Test
public void m3() {
SessionFactory sf = DBUtils.getSF(); 
Session session = sf.openSession(); 
Transaction tr = session.beginTransaction();  
//News是po中的一个JAVABEANS,与数据库交接
News news1 = (News) session.get(News.class, 6);//持久化状态
News news2 = (News) session.get(News.class, 7);//持久化状态
// session.clear();//把session中的持化状态对象全部丢出,变成游离状态
// session.evict(news1);//把news1中的news1丢出,变成游离状态
tr.commit(); 
session.close();//状态session,则session中的所有持久状态都变成游离状态
}

//游离状态变成持久状态
@Test
public void m4() {
SessionFactory sf = DBUtils.getSF(); 
Session session = sf.openSession(); 
Transaction tr = session.beginTransaction();  
News news1 = (News) session.get(News.class, 6);//持久化状态
News news2 = (News) session.get(News.class, 7);//持久化状态
session.evict(news1);//把news1中的news1丢出,变成游离状态
news1.setContent("小明");//修改游离状态
session.update(news1);//从游离状态--->持久状态
tr.commit(); 
session.close();//状态session,则session中的所有持久状态都变成游离状态
Session session2 = sf.openSession(); 
Transaction tr2 = session2.beginTransaction();  
session2.update(news2);//从游离状态--->持久状态
news2.setGrade(10000);
tr2.commit(); 
session2.close();//状态session,则session中的所有持久状态都变成游离状态
}



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值