[学习小笔记] hibernate的简单数据库查询

来源:互联网 发布:2017网络作家排行 编辑:程序博客网 时间:2024/05/22 17:33

这些天着手于hibernate的学习,简单记录一下,hibernate对数据库(Mysql)数据的查询。


hibernate 数据库 类 表 属性 字段 对象 数据

准备

  1. 创建一个Java工程,两个包,entity用来存放实体类,main用来存放程序主方法。
  2. 创建数据库:
    学生表Student:

    含义 字段 学生编号 s_id(主键,自增) 学生姓名 s_name 学生班级 s_class (外键Class表的c_id字段)

    班级表Class:

    含义 字段 班级编号 c_id(主键,自增) 班级名称 c_name
  3. hibernate的jar包:点击下载

创建实体类

1.Class.java

public class Class {    // 班级id    private Integer c_id;    // 班级名称    private String c_name;    // 班级里面的学生    private Set<Student> list = new HashSet<Student>();    public Integer getC_id() {        return c_id;    }    public void setC_id(Integer c_id) {        this.c_id = c_id;    }    public String getC_name() {        return c_name;    }    public void setC_name(String c_name) {        this.c_name = c_name;    }    public Set<Student> getList() {        return list;    }    public void setList(Set<Student> list) {        this.list = list;    }}

2.Student.java

public class Student {    // 姓名    private String s_name;    // 编号    private Integer s_id;    // 班级    /**     * 这里特别要注意,学生班级属性要用Class类来创建,不能用int     */    private Class s_class;    public String getS_name() {        return s_name;    }    public void setS_name(String s_name) {        this.s_name = s_name;    }    public Integer getS_id() {        return s_id;    }    public void setS_id(Integer s_id) {        this.s_id = s_id;    }    public Class getS_class() {        return s_class;    }    public void setS_class(Class s_class) {        this.s_class = s_class;    }    @Override    public int hashCode() {        final int prime = 31;        int result = 1;        result = prime * result + ((s_id == null) ? 0 : s_id.hashCode());        result = prime * result + ((s_name == null) ? 0 : s_name.hashCode());        return result;    }    @Override    public boolean equals(Object obj) {        if (this == obj)            return true;        if (obj == null)            return false;        if (getClass() != obj.getClass())            return false;        Student other = (Student) obj;        if (s_id == null) {            if (other.s_id != null)                return false;        } else if (!s_id.equals(other.s_id))            return false;        if (s_name == null) {            if (other.s_name != null)                return false;        } else if (!s_name.equals(other.s_name))            return false;        return true;    }}

配置

1.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>        <!-- mysql驱动 -->        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>        <!-- mysql路径 -->        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/**数据库名**</property>        <!-- 登录用户名 -->        <property name="hibernate.connection.username">**用户名**</property>        <!-- 登录密码 -->        <property name="hibernate.connection.password">**密码**</property>        <!-- 配置方言,使用的是mysql数据库 -->        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>        <!-- 打印sql语句 -->        <property name="show_sql">true</property>        <!-- 配置表映射文件 -->        <mapping resource="com/galibb/hibernate/entity/Student.hbm.xml"/>        <mapping resource="com/galibb/hibernate/entity/Class.hbm.xml"/>    </session-factory></hibernate-configuration>

2.Class.hbm.xml:

<?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-3-13 20:43:32 by Hibernate Tools 3.5.0.Final --><hibernate-mapping>    <class name="com.galibb.hibernate.entity.Class" table="t_class">        <id name="c_id" type="java.lang.Integer">            <column name="c_id" />            <generator class="native" />        </id>        <property name="c_name" type="java.lang.String">            <column name="c_name" />        </property>        <set name="list" cascade="save-update" inverse="true">            <key>                <column name="s_class" />            </key>            <one-to-many class="com.galibb.hibernate.entity.Student" />        </set>    </class></hibernate-mapping>

3.Student.hbm.xml:

<?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-3-13 20:43:32 by Hibernate Tools 3.5.0.Final --><hibernate-mapping>    <class name="com.galibb.hibernate.entity.Student" table="t_student">        <id name="s_id" type="java.lang.Integer">            <column name="s_id" />            <generator class="native" />        </id>        <property name="s_name" type="java.lang.String">            <column name="s_name" />        </property>        <property name="s_class" type="java.lang.Integer">            <column name="s_class" />        </property>       <!--  <many-to-one name="s_class" class="com.galibb.hibernate.entity.Class" column="s_class" cascade="save-update"></many-to-one> -->    </class></hibernate-mapping>

hibernate.cfg.xml(文件名称不要改,默认的就是这个名字,如果改了需要更多的配置)文件必须创建在src目录下,两个实体类的配置文件就创在和实体类一个路径下就好了,关于配置文件里面一些属性和它们的用法,自(jiu)行(shi)去(wo)百(bu)度(hui)。
接下来就直接写main主方法内的代码。

main

1.添加学生和班级

public class InsertMain {    public static void main(String[] args) {        // 读取配置文件        Configuration con = new Configuration().configure();        // 获取sessionfactory对象        SessionFactory factory = con.buildSessionFactory();        // 获取session对象        Session session = factory.openSession();        // 开始事务        Transaction t = session.beginTransaction();        // 创建学生对象,并添加值        Student s1 = new Student();        s1.setS_name("学生2");        Student s2 = new Student();        s2.setS_name("学生1");        // 创建班级对象        Class c = new Class();        c.setC_name("班级4");        session.save(c);        // 添加学生//      Set<Student> s = new HashSet<Student>();//      s.add(s1);//      s.add(s2);//       保存学生到班级//      c.setList(s);        s1.setS_class(c);        s2.setS_class(c);        // 保存        session.save(s1);        session.save(s2);        // 提交事务        t.commit();        // 关闭资源        factory.close();        session.close();    }}

2.修改

public class UpdateMain {    public static void main(String[] args) {        // 读取配置文件        Configuration con = new Configuration().configure();        // 获取sessionfactory对象        SessionFactory factory = con.buildSessionFactory();        // 获取session对象        Session session = factory.openSession();        // 开始事务        Transaction t = session.beginTransaction();        // 查询到需要修改的学生的学生信息        Student student = (Student) session.load(Student.class, 1);        student.setS_name("改张三");        // 更新数据        session.update(student);        // 提交事务        t.commit();        // 关闭资源        session.close();        factory.close();    }}

3.删除学生、班级

public class DeleteMain {    public static void main(String[] args) {        // 读取配置文件        Configuration con = new Configuration().configure();        // 获取sessionfactory对象        SessionFactory factory = con.buildSessionFactory();        // 获取session对象        Session session = factory.openSession();        // 开始事务        Transaction t = session.beginTransaction();        /**        // 查询到需要删除的学生        Student student = (Student) session.load(Student.class, 1);        // 删除学生        session.delete(student);        */        // 查询到需要删除的班级        Class c = (Class) session.load(Class.class, 11);        // 删除班级        session.delete(c);        /*         * 删除班级会先将学生表中该班级的学生的班级设置为空,然后再删除该班级         * */        // 提交事务        t.commit();        // 关闭资源        factory.close();        session.close();    }}

4.查询

public class InsertMain {    public static void main(String[] args) {        // 读取配置文件        Configuration con = new Configuration().configure();        // 获取sessionfactory对象        SessionFactory factory = con.buildSessionFactory();        // 获取session对象        Session session = factory.openSession();        // 查询学生        /**        Query q = session.createQuery("from Student");        List<Student> list = q.list();        int count = 0;        for(Student stu : list) {            System.out.println(count += 1);            System.out.println("学生姓名:" + stu.getS_name());            System.out.println("------------------");        }        */        // 查询学生的姓名和所在班级名称        int count = 0;        Query q = session.createQuery("select s.s_name, s.s_class.c_name from Student s join s.s_class");        List<Object[]> list = q.list();        for(Object[] obj : list) {            System.out.println(count += 1);            System.out.println("学生姓名:" + obj[0]);            System.out.println("班级名称:" + obj[1]);            System.out.println("------------------");        }        // qbc查询        /**        Criteria c = session.createCriteria(Student.class).add(Restrictions.eq("s_id", 5));        List<Student> list = c.list();        int count = 0;        for(Student stu : list) {            System.out.println(count += 1);            System.out.println("学生编号:" + stu.getS_id());            System.out.println("学生姓名:" + stu.getS_name());            System.out.println("--------------------");        }        */        // 关闭资源        session.close();        factory.close();    }}

这样,hibernate对数据库的操作就简单完成了,可以看出hibernate操作数据库比我们直接用Java代码操作数据库是简单很多的,感兴趣的可以试着敲一敲。

0 0