struts2与hibernate结合的一对一增删改查以及hiberbate当中一对一的增删改

本文介绍了Hibernate框架中的游离态、持久态和自由态的概念,并详细阐述如何在Hibernate中设置一对一关系,以及在Struts2框架下实现这种关系的增删改查操作。通过在`hibernate.cfg.xml`配置文件中添加相关设置,以及在实体类映射文件中定义一对一关系,开发者可以在不使用通用DAO层的情况下,直接在Action中完成业务逻辑,再配合Struts.xml的配置即可运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hibernate框架中的游离态与持久态和自由态分别是什么
游离态是指session空间中没有这个对象(这个对象没有纳入session的管理范围内),数据库有与之对应的数据

//创建对象
Student stu=new Student();
//将对象从session当中踢出
session.evict();
s.setAge(10);

持久态是指:session空间中有这个对象(在session的管理范围之内)数据
库中有与之对应的数据

//将对象保存到session当中
Student stu=session.get(Student.getClass,2);
//直接给值设置就能够修改不用写session.update();
stu.setAge(20);

自由态是指:session空间当中没有这个对象(不在session的管理范围内)数据
库中没有与之对应的数据

Student stu=new Student();

一对一关系
在hibernate当中要实现hibernate当中的增删改查在
hibernate.cfg.xml中加入

 <!-- 显示sql语句 -->
        <property name="show_sql">true</property>
       <!-- 格式化sql语句 -->
        <property name="format_sql">true</property>
        <!-- 配置实体类映射文件 -->
        <mapping resource="com/hlp/entity/Card.hbm.xml"/>
        <mapping resource="com/hlp/entity/Users.hbm.xml"/>

然后在两个实体类映射文件中分别加入对一对一关系所需要的内容
首先我们在主表配置文件当中

//把主键的生成方式改为自增长行(对于MySQL与SQL servel)
<generator class="native" />
//在创立一对一配置里面的name写一对一中的属性名,class写从表所在的路径,cascade级联
<one-to-one name="card" class="com.hlp.entity.Card" cascade="all"></one-to-one>
然后在从表的配置文件中
//把主键的生成模式改为外键,以及作为外键所对应的属性名
<generator class="foreign">
            <param name="property">users</param>
            </generator>
            //创立一对一关系
             <one-to-one name="users" class="com.hlp.entity.Users"></one-to-one>

//进行一对一模式的增删改查

@Before
	public void before() {
		//创建configuration连接
		Configuration configuration=new Configuration().configure();
		//创建session仓库
		factory = configuration.buildSessionFactory();
		//打开session
		session = factory.openSession();
		//创建事务
		transaction = session.beginTransaction();
		
	}
	@Test
	public void test() {
		//查询
//		Users users = session.get(Users.class, 2);
//		System.out.println(users.getUname()+"_____"+users.getCard().getCnumber());
         
		//增加
//		Users users=new Users("大大");
//		Card card=new Card("567346789");
//		users.setCard(card);
//		card.setUsers(users);
//		session.save(users);
		
		//找到人并且找到这个卡
//		Users users = session.get(Users.class, 7);
//		System.out.println(users.getCard().getCnumber());
		
		//找到一张卡找到这张卡的持有人
//		Card card=session.get(Card.class, 7);
//		System.out.println(card.getUsers().getUname());
		
		//删除用户同时删除该用户的卡
//		Users users = session.get(Users.class, 7);
//		session.delete(users);
		
		//修改
		Users users = session.get(Users.class, 2);
		users.getCard().setCnumber("34567890");
	}
	@After
	public void after() {
		//运行事务
		transaction.commit();
		//关闭session
		session.close();
		//关闭仓库
		factory.close();
	}

//hibernate 与struts2相结合的增删改
//唯一的区别就是不再用麻烦的通用dao层了,只要把这两个的基本配置弄好就可以了
然后同样是在action当中书写内容最后再在struts.xml当中进行配置然后运行就可以了

public class AllAction extends ActionSupport implements ServletRequestAware{
//使用实现接口的方式得到请求作用域
private HttpServletRequest request;
//创建Users 对象
private Users users=new Users();
//创建Card对象
private Card card=new Card();
//创建Configuration 对象
private Configuration configuration=new Configuration().configure();
//创建session工厂
private SessionFactory factory=configuration.buildSessionFactory();
打开session
private Session session=factory.openSession();
创建事务
private Transaction transaction=session.beginTransaction();
//查询所有
public String selectall() {
	
	List<Users> list = session.createQuery("from Users").list();
	request.setAttribute("list", list);
	for (Users users : list) {
		System.out.println(users.getUname());
	}
	return SUCCESS;
}
//删除
public String delete() {
	Users users2 = session.get(users.getClass(), users.getUid());
		session.delete(users2);
		//提交事务以及关闭sesion和工厂
		transaction.commit();
		session.close();
		factory.close();
	return "delete";
}
//添加
public String add() {
	users =new Users(users.getUname());
	card=new Card(card.getCnumber());
	users.setCard(card);
	card.setUsers(users);//互设级联
	session.save(users);
	transaction.commit();
	session.close();
	factory.close();
	return "add";
	
}
//根据id查询
public String byid() {
	Users users2 = session.get(users.getClass(), users.getUid());
	request.setAttribute("users2", users2);
return "byid";
}
//x修改
public String update() {
	users.setCard(card);
	session.update(users);
	transaction.commit();
	session.close();
	factory.close();
	return "update";
}
	public void setServletRequest(HttpServletRequest request) {
              this.request=request;		
	}

//创建对象的set和get方法
	public Users getUsers() {
		return users;
	}


	public void setUsers(Users users) {
		this.users = users;
	}


	public Card getCard() {
		return card;
	}


	public void setCard(Card card) {
		this.card = card;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值