hibernate两个配置文件,一个是类和表的映射关系文件,一个是数据库连接的配置文件
类和表的映射关系
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping auto-import="false"> <!-- class:将持久化对象(javabean)关联数据库表 * name:持久化对象的名称(包名) * table:表名称 --> <class name="com.itheima.a_primer.Customer" table="a_customer"> <!-- id:主键映射(必须要有主键) * <generator class="increment"></generator>:主键生成策略 * increment:自增长 --> <id column="id" name="id" type="integer"> <generator class="increment"/> </id> <!-- property:将持久化对象对象(javabean)中的属性映射数据库表的字段 * name:持久化对象的属性名称 * type:表示Hibernate的类型(用来将持久化对象的属性类型,映射成数据库所支持的类型) * 写成:java.lang.String * 写成:string * column:数据库表列的名字 --> <property generated="never" lazy="false" name="name" type="string"> <column name="name" sql-type="varchar(50)"/> </property> <property column="age" generated="never" lazy="false" name="age" type="integer"/> <property column="des" generated="never" lazy="false" name="des" type="string"/> </class> </hibernate-mapping>
连接配置
<?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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/itheima0309?useUnicode=true&characterEncoding=utf8</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <!-- 操作Hibernate的配置 --> <!-- 方言:hibernate在执行查询的时候,指定哪种数据库来执行查询,因为每种数据库执行的查询是不同的 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- 映射文件to数据库表 * 指定程序运行时是否在数据库自动生成数据表 * create:如果数据库中没有表,可以创建表,但是每次操作都会先删除表,再创建表 * none:默认:不能通过hibernate的映射文件不能创建表,有表会直接操作 * update:如果数据库中没有表,可以创建表,如果有表,就直接操作,不需要创建表 --> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 在控制台显示sql语句(方便我们查看hibernate底层输出的sql) --> <property name="hibernate.show_sql">true</property> </session-factory> </hibernate-configuration>
代码操作
实体类遵循javabean规范
package com.itheima.a_primer; public class Customer { private Integer id;//主键字段 private String name; private Integer age; private String des; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getDes() { return des; } public void setDes(String des) { this.des = des; } }
测试存储
package com.itheima.a_primer; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Test; public class CopyOfApp { @Test public void save(){ //加载hibernate.cfg.xml和Customer.hbm.xml Configuration configuration = new Configuration(); configuration.configure();//默认加载classpath路径下(src下)的hibernate.cfg.xml /** * 方案一:要求:Customer.java和Custoemr.hbm.xml要放置到同一个包下,而且名称要相同 * configuration.addClass(Customer.class) * 等同于:在hibernate.cfg.xml中配置: * <mapping class="com.itheima.a_primer.Customer"/> * * 方案二:如果Customer.java和Custoemr.hbm.xml不放在同一个包下 * configuration.addResource("com/itheima/a_primer/Customer.hbm.xml"); * 等同于:在hibernate.cfg.xml中配置: * <mapping resource="com/itheima/a_primer/Customer.hbm.xml"/> */ configuration.addClass(Customer.class);//加载Customer.java文件(要求:Customer.java和Custoemr.hbm.xml要放置到同一个包下,而且名称要相同) //创建SessionFactory类,这是hibernate操作数据库的工厂,相当于jdbc中的连接池 SessionFactory sessionFactory = configuration.buildSessionFactory(); //创建Session类,这是hibernate操作数据库的核心类,相当于jdbc中的连接(connection) Session session = sessionFactory.openSession(); //开启事务 Transaction tr = session.beginTransaction(); //操作对象的过程就是操作数据库表的实现 Customer c = new Customer(); c.setName("黄蓉"); c.setAge(18); c.setDes("女侠"); //保存 session.save(c); //提交事务 tr.commit(); session.close(); } }
package com.itheima.a_primer; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Test; public class App { static SessionFactory sf = null; static{ //加载hibernate.cfg.xml和Customer.hbm.xml Configuration configuration = new Configuration(); configuration.configure("com/itheima/a_primer/hibernate.cfg.xml"); configuration.addClass(Customer.class); sf = configuration.buildSessionFactory(); } /**保存*/ @Test public void save(){ Session session = sf.openSession(); //开启事务 Transaction tr = session.beginTransaction(); //操作对象的过程就是操作数据库表的实现 Customer c = new Customer(); c.setName("黄老邪"); c.setAge(68); c.setDes("侠"); //保存 session.save(c); //提交事务 tr.commit(); session.close(); } /**更新*/ @Test public void update(){ Session session = sf.openSession(); //开启事务 Transaction tr = session.beginTransaction(); //操作对象的过程就是操作数据库表的实现 Customer c = new Customer(); c.setId(2); c.setName("蓉儿"); c.setAge(18); c.setDes("修改后"); //更新 session.update(c); //提交事务 tr.commit(); session.close(); } /**8.通过id删除客户信息*/ @Test public void delete(){ Session session = sf.openSession(); //开启事务 Transaction tr = session.beginTransaction(); //操作对象的过程就是操作数据库表的实现 Customer c = new Customer(); c.setId(2); //删除 session.delete(c); //提交事务 tr.commit(); session.close(); } /**9.通过id查询客户信息*/ @Test public void findObjectByID(){ Session session = sf.openSession(); //开启事务 Transaction tr = session.beginTransaction(); //操作对象的过程就是操作数据库表的实现 Customer c = (Customer) session.get(Customer.class, 3);//或者session.load() System.out.println(c.getId()+" "+c.getName()); //提交事务 tr.commit(); session.close(); } /**10. 查询所有的客户信息*/ @Test public void findAll(){ Session session = sf.openSession(); //开启事务 Transaction tr = session.beginTransaction(); //操作对象的过程就是操作数据库表的实现(面向对象的编程) //HQL语句:hql语句,操作持久化对象和对象中的属性 select c from Customer c === from Customer c //SQL语句:sql语句,操作数据表和字段,select * from a_customer String hql = "from Customer c"; Query query = session.createQuery(hql); List<Customer> list = query.list(); if(list!=null && list.size()>0){ for(Customer c:list){ System.out.println(c.getId()+" "+c.getName()); } } //提交事务 tr.commit(); session.close(); } }