[学习小笔记] hibernate的简单数据库查询
2017-03-16 21:49
501 查看
这些天着手于hibernate的学习,简单记录一下,hibernate对数据库(Mysql)数据的查询。
创建数据库:
学生表Student:
班级表Class:
hibernate的jar包:点击下载
2.Student.java
2.Class.hbm.xml:
3.Student.hbm.xml:
hibernate.cfg.xml(文件名称不要改,默认的就是这个名字,如果改了需要更多的配置)文件必须创建在src目录下,两个实体类的配置文件就创在和实体类一个路径下就好了,关于配置文件里面一些属性和它们的用法,自(jiu)行(shi)去(wo)百(bu)度(hui)。
接下来就直接写main主方法内的代码。
2.修改
3.删除学生、班级
4.查询
这样,hibernate对数据库的操作就简单完成了,可以看出hibernate操作数据库比我们直接用Java代码操作数据库是简单很多的,感兴趣的可以试着敲一敲。
hibernate | 数据库 |
---|---|
类 | 表 |
属性 | 字段 |
对象 | 数据 |
准备
创建一个Java工程,两个包,entity用来存放实体类,main用来存放程序主方法。创建数据库:
学生表Student:
含义 | 字段 |
---|---|
学生编号 | s_id(主键,自增) |
学生姓名 | s_name |
学生班级 | s_class (外键Class表的c_id字段) |
含义 | 字段 |
---|---|
班级编号 | c_id(主键,自增) |
班级名称 | c_name |
创建实体类
1.Class.javapublic 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 9d21 (); 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代码操作数据库是简单很多的,感兴趣的可以试着敲一敲。
相关文章推荐
- Java Web学习笔记 Hibernate配置及数据库增删改查简单操作
- hibernate 中HQL语句查询学习笔记一
- 数据库学习笔记(二)---SQL查询语句
- 数据库的简单查询-笔记:@5
- JasperReport学习笔记4-查询数据库生成动态的报表(WEB)
- 六、Oracle数据库之学习笔记---Oracle的表的基本查询(3)
- JasperReport学习笔记4-查询数据库生成动态的报表(WEB)
- Hibernate 3.2 学习笔记 查询和检索
- 黑马程序员之JS学习笔记:简单的LINQ的查询语法和方法语法
- Hibernate查询重要笔记 - HQL总结 数据库各种查询宝典 大总结
- 五、Oracle数据库之学习笔记---Oracle的表的基本查询(2)
- Hibernate学习笔记1--------一个简单的应用
- 数据结构学习笔记一:简单排序与查询算法
- php学习笔记(十七)简单的数据库操作链接
- Hibernate 学习笔记-1-1(一个简单的Hibernate实例)
- Hibernate学习笔记2--------------------一对多、多对一简单配置
- Hibernate 3学习笔记 - 简单的Persistent class和mapping file
- 学习python 第三季:编写简单简单连接数据库并执行查询操作
- C#学习笔记(六)-使用ADO .NET查询和操作数据库
- 数据库学习笔记(六)-联接查询和分组查询