hibernate对单表增删改查(CRUD)

增删改查:

  • save
  • update
  • delete
  • get/load(查询单个记录)
import java.util.Date;


import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

//测试类
public class StudentsTest {

    private SessionFactory sessionFactory;
    private Session session;
    private Transaction transaction;

    @Before
    public void init(){  //初始化
        //创建配置对象
        Configuration config=new Configuration().configure();
        //创建服务注册对象
        ServiceRegistry serviceRegistry=new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
        //创建会话工厂对象
        sessionFactory=config.buildSessionFactory(serviceRegistry);
        //会话对象,打开会话
        session=sessionFactory.openSession();       
        //打开事务
        transaction=session.beginTransaction();
    }

    @After
    public void destory(){ //释放资源
        //提交事务
        transaction.commit();
        //关闭会话
        session.close();
        //关闭会话工厂
        sessionFactory.close();
    }

    @Test
    public void testSaveStudents(){
        //生成学生对象
//      Students s=new Students(1,"张三丰","男",new Date(),"武当山");
        Students s=new Students();
//      s.setSid(1);  //native:主键自动增长,无须赋值;若强制赋值无效果
        s.setSname("张三丰");
        s.setGender("男");
        s.setBirthday(new Date());
//      s.setAddress("武当山");    
        Address address=new Address("710068","02988567123","西安市");
        s.setAddress(address);      
        //保存对象进入数据库
        session.save(s);        
    }

    @Test
    public void testGetStudents(){  //查:get方法
        Students s=(Students)session.get(Students.class, 1); //第一个参数表示类对象(即查询的表所对应的类对象,本例查询students表,对应Students类);第二个参数是标识符,即所要查询的记录对应的主键。
        System.out.println(s);
    }

    @Test
    public void testLoadStudents(){  //查:load方法
        Students s=(Students)session.load(Students.class, 1); //第一个参数表示类对象(即查询的表所对应的类对象,本例查询students表,对应Students类);第二个参数是标识符,即所要查询的记录对应的主键。
        System.out.println(s);
    }

    @Test
    public void testUpdateStudents(){  //更新
        Students s=(Students)session.get(Students.class, 1); //第一个参数表示类对象(即查询的表所对应的类对象,本例查询students表,对应Students类);第二个参数是标识符,即所要查询的记录对应的主键。
        s.setGender("女");
        session.update(s);
    }

    @Test
    public void testDeleteStudents(){ //删除
        Students s=(Students)session.get(Students.class, 1); //第一个参数表示类对象(即查询的表所对应的类对象,本例查询students表,对应Students类);第二个参数是标识符,即所要查询的记录对应的主键。
        session.delete(s);
    }
}

hibernate.cfg.xml:

<property name="hbm2ddl.auto">update</property>

执行save,数据库:
这里写图片描述
查询get方法,控制台:
这里写图片描述
查询load,控制台:
这里写图片描述
执行update,数据库:
这里写图片描述
执行delete,数据库:
这里写图片描述


get和load的区别:
一:
这里写图片描述
get:立刻发送sql语句,返回的就是本身的持久化类的对象。
load:不立刻发送sql语句,返回代理对象,只有真正使用这个对象时才发送sql语句。
二:
这里写图片描述

@Test
    public void testGetStudents(){  //查:get方法
        Students s=(Students)session.get(Students.class, 100); //第一个参数表示类对象(即查询的表所对应的类对象,本例查询students表,对应Students类);第二个参数是标识符,即所要查询的记录对应的主键。
//      System.out.println(s.getClass().getName());  //打印对象的类对象的名字
        System.out.println(s);
    }

    @Test
    public void testLoadStudents(){  //查:load方法
        Students s=(Students)session.load(Students.class, 100); //第一个参数表示类对象(即查询的表所对应的类对象,本例查询students表,对应Students类);第二个参数是标识符,即所要查询的记录对应的主键。
//      System.out.println(s.getClass().getName());  //打印对象的类对象的名字
        System.out.println(s);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章