Hibernate笔记(二)
来源:互联网 发布:淘宝一元抢购在哪里 编辑:程序博客网 时间:2024/05/28 05:14
努力是最不值得炫耀的,只要有了渴望和意愿,人人都会。
安装好hibernate tools之后,写个使用hibernate对数据库表实现增删改查的demo(新建项目并导入hibernate、mysql、junit的jar包就不用说了吧)
1. 创建hibernate配置文件(怎么创建就不用说了吧,用hibernate tools自动生成或者在别的地方复制一份过来),即hibernate.cfg.xml。配置基本的数据库连接信息和一些可选的其他配置。
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration> <session-factory> <!-- 数据库连接信息 --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql:///hibernate?useUnicode=true&characterEncoding=UTF-8</property> <property name="connection.username">root</property> <property name="connection.password">123456</property> <!-- 方言 --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 打印SQL语句 --> <property name="show_sql">true</property> <!-- 格式化SQL语句 --> <property name="format_sql">true</property> <!--ddl语句生成策略 save自动创建数据库并覆盖以前的 update更新不会覆盖以前的--> <property name="hbm2ddl.auto">update</property> <!-- 创建数据库时 给表加上前缀 --> <!-- <property name="default_schema">hibernate</property> --> <!-- 使用getCurrentSession时的事物配置 thread本地事务(jdbc事务) 全局事务(jta事务)--> <!-- <property name="current_session_context_class">thread</property> --> <mapping resource="com/hibernate/bean/Student.hbm.xml"/> </session-factory></hibernate-configuration>
注意:配置文件中的mapping是在步骤二完成后才写入的
2. 创建数据库表的实体类和对应的hibernate mapping文件
学生类实体:
public class Student { private int sid;//ID private String sname;//姓名 private String gender;//性别 private Date birthday;//出生日期 private String address;//地址 private Blob picture;//照片 public Student() { } public Student(int sid, String sname, String gender, Date birthday, String address) { this.sid = sid; this.sname = sname; this.gender = gender; this.birthday = birthday; this.address = address; } public int getSid() { return sid; } public void setSid(int sid) { this.sid = sid; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public Blob getPicture() { return picture; } public void setPicture(Blob picture) { this.picture = picture; } @Override public String toString() { return "Student [sid=" + sid + ", sname=" + sname + ", gender=" + gender + ", birthday=" + birthday + ", address=" + address + "]"; }}
学生类的hibernate映射文件:
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2017-6-23 16:17:40 by Hibernate Tools 3.5.0.Final --><hibernate-mapping> <class name="com.hibernate.bean.Student" table="STUDENT"> <id name="sid" type="int"> <column name="SID" /> <generator class="assigned" /> </id> <property name="sname" type="java.lang.String"> <column name="SNAME" /> </property> <property name="gender" type="java.lang.String"> <column name="GENDER" /> </property> <property name="birthday" type="java.util.Date"> <column name="BIRTHDAY" /> </property> <property name="address" type="java.lang.String"> <column name="ADDRESS" /> </property> <property name="picture" type="java.sql.Blob"> <column name="PICTURE" /> </property> </class></hibernate-mapping>
3. 写测试类
新建一个StudentTest类,使用junit的三个方法注解@Before、@Test、@After。新建初始化、运行、销毁三个方法(使用hibernate的代码可能根据使用的hibernate版本有些细微差别,这里使用的是hibernate4.2.4的版本,如果你使用最新的hibernate版本创建服务注册对象的代码就会报错,可以根据代码提示进行修改)
public class StudentTest { private SessionFactory sessionFactory; private Session session; private Transaction transaction; @Before public void init(){ //创建配置对象 读取配置文档Hibernate.cfg.xml Configuration config = new Configuration().configure(); //创建服务注册对象 ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry(); //创建回话工厂对象 创建和注销都比较耗费资源 sessionFactory = config.buildSessionFactory(serviceRegistry); //打开会话 操作数据库的对象 session = sessionFactory.openSession(); //开启事务 transaction = session.beginTransaction(); } @Test public void saveStudentTest(){ } @After public void destory(){ transaction.commit();//提交事物 session.close();//关闭会话 sessionFactory.close();//关闭会话工厂 }}
4. 保存对象
编辑一下saveStudentTest()方法的内容
/** * 保存学生对象 */ @Test public void saveStudentTest(){ Student stu = new Student(1,"张三","男",new Date(),"武汉"); session.save(stu); }
执行一下这个方法,可以看到控制台打印了执行的sql语句
再看数据库,数据已经成功插入学生表
5. 依次加上查询、修改、删除的方法
/** * 查询 * get在调用之后立即向数据库发出sql语句,返回持久化对象 * 查询数据不存在 返回null */ @Test public void testGetStudents(){ Student s= (Student) session.get(Student.class, 1); System.out.println(s); } /** * 查询 * load方法会在调用后返回一个代理对象 * 该代理对象之保存了实体对象的id,直到使用对象的非主键属性时才会发出sql语句 * 查询数据不存在 抛出异常 */ @Test public void testLoadStudent(){ Student s = (Student) session.load(Student.class, 1); System.out.println(s); } /** * 修改 */ @Test public void testUpdateStudent(){ Student s= (Student) session.get(Student.class, 1); s.setGender("女"); session.update(s); System.out.println(s.toString()); } /** * 删除 */ @Test public void testDeleteStudent(){ Student s= (Student) session.get(Student.class, 1); session.delete(s); }
查询要注意get和load的区别,另外执行下面方法可能会报错,因为配置文件里面的ddl语句生成策略配置的create,每次都会覆盖原来的表导致表数据总是空的,我们把create换成update就可以了。
- hibernate笔记(二)
- Hibernate笔记(二)
- Hibernate学习 笔记(二)
- hibernate 笔记(二)-----one2many
- Hibernate学习笔记(二)
- Hibernate复习笔记(二)
- Hibernate学习笔记(二)
- hibernate学习笔记(二)
- Hibernate学习笔记 (二)
- Hibernate学习笔记(二)
- Hibernate学习笔记(二)
- Hibernate学习笔记(二)
- Hibernate学习笔记(二)
- Hibernate学习笔记(二)
- hibernate笔记(二)ORM基础
- Hibernate学习笔记(二)基本配置
- Hibernate 复习笔记二
- Hibernate学习笔记(二)
- tp5中获取参数。tp5中未定义变量
- python环境配置-Linux系统
- LeetCode(4)
- 【0036】SQL数据操纵语言INSERT,UPDATE,DELETE
- Swift_for while循环,if语句
- Hibernate笔记(二)
- 电报
- 通过system调用颜色函数
- Maven学习笔记(一)
- HTML5实现图片淡入淡出效果
- java使用jbarcode生成条形码
- 无需安装redis,在线练习
- android代码规范
- sqlload导入txt文件