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;
}