[学习小笔记] hibernate的简单数据库查询
来源:互联网 发布:2017网络作家排行 编辑:程序博客网 时间:2024/05/22 17:33
这些天着手于hibernate的学习,简单记录一下,hibernate对数据库(Mysql)数据的查询。
准备
- 创建一个Java工程,两个包,entity用来存放实体类,main用来存放程序主方法。
创建数据库:
学生表Student:含义 字段 学生编号 s_id(主键,自增) 学生姓名 s_name 学生班级 s_class (外键Class表的c_id字段)班级表Class:
含义 字段 班级编号 c_id(主键,自增) 班级名称 c_namehibernate的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
- [学习小笔记] hibernate的简单数据库查询
- Hibernate 实现简单的数据库查询
- 数据库学习笔记和小练习(3)数据查询
- Hibernate学习笔记(九) — Hibernate的查询
- hibernate学习教程-数据库查询
- mybatis学习笔记一(简单的查询)
- 数据库系统概论学习笔记(四):SQL的简单应用之数据查询
- hibernate 的小笔记
- Hibernate学习笔记之查询
- Hibernate基本查询(学习笔记)
- Hibernate学习笔记 查询简介
- Hibernate 3学习笔记 - 简单的Hibernate配置文件
- 菜鸟的 PHP 学习之路(三):一个简单的连接数据库并查询的小程序(1)
- Hibernate的学习一__简单的小例子
- SQL查询的艺术学习笔记--简单查询
- 简单的数据库查询
- Hibernate学习笔记(七) — 查询缓存的应用
- Hibernate的数据库查询操作
- 用 BitArray 来编写埃拉托斯特尼筛法
- 技术的正宗与野路子
- static作用(C/C++)
- Photoshop cs5 基础教程 形状图层的布尔运算
- Android Studio Gradle多渠道打包(动态设定App名称,应用图标,背景图片,状态栏颜色)、配置签名文件
- [学习小笔记] hibernate的简单数据库查询
- 认识Hadoop
- 计算机程序的思维逻辑 (72)
- java中实现定时任务每天规定时间执行任务一次
- 动态改变Drawable中我们自定义背景的颜色并设置颜色以16进制进行设置
- android横竖屏切换总结
- NYOJ-241 字母统计
- 北航计算机机试11字符串扩展
- 单例模式(Singleton)的6种实现