Hibernate基础(1)

it2022-05-05  146

Hibernate的配置

总配置:

<?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的配置文件,创建在src目标中,配置访问数据库的驱动,用户名,密码等 --> <hibernate-configuration> <session-factory> <property name="connection.driver_class" >com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/test?characterEncoding=utf-8</property> <property name="connection.username">root</property> <property name="connection.password">admin</property> <!-- 告诉hibernate使用的是MySQL数据库 --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- hibernate事务管理方式 ,每个线程一个事务 --> <property name="current_session_context_class">thread</property> <!-- true:打印出sql语句到控制台 --> <property name="show_sql">true</property> <!-- 表示是否会自动更新数据库的表结构,可以不用创建表,自动创建 --> <property name="hbm2ddl.auto">update</property> <!-- 对应的类的xml --> <mapping resource="com/study/hibernate/Category.hbm.xml" /> </session-factory> </hibernate-configuration>

每个类的单独配置:

<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- 这是类Category的配置文件,创建在该类包目录中, hibernate-mapping代表该类的包名--> <hibernate-mapping package="com.study.hibernate"> <!-- name:类名,table:该类对应的表名 --> <class name="Category" table="Category"> <!-- name:主键名 column:对应表主键字段id --> <id name="id" column="id"> <!-- id的自增长方式采用数据库的本地方式 --> <generator class="native"></generator> </id> <!-- 类Category的属性名 --> <property name="name" /> </class> </hibernate-mapping>

类代码:一定要有getter,setter

package com.study.hibernate; public class Category { public int id; public String name; public Category(String name) { this.name=name; } public Category() {} public void setId(int id) { this.id=id; } public int getId() { return id; } public String getName() { return name; } public void setName(String name) { this.name=name; } }

Hibernate中类的状态:

//对象在hibernate中的状态,瞬时,持久,脱管 public static void method() { SessionFactory sf=new Configuration().configure().buildSessionFactory(); Session s=sf.openSession(); s.beginTransaction(); Category c=new Category("hibernate");//此时Category对象是瞬时的 s.save(c);//此时对象Category是持久的 s.getTransaction().commit();//此时对象Category是脱管的 s.close(); sf.close();

Hibernate获取存在数据库中对象的的方法

//获取数据库中数据的方法 public static void getMethod() { SessionFactory sf=new Configuration().configure().buildSessionFactory(); Session s=sf.openSession(); s.beginTransaction(); //传入Category类的类类型,和主键id Category c=(Category)s.get(Category.class, 1); s.getTransaction().commit(); System.out.println(c.getName()); s.close(); sf.close(); }

Hibernate删除数据的方法

//删除数据的方法 public static void delete() { SessionFactory sf=new Configuration().configure().buildSessionFactory(); Session s=sf.openSession(); s.beginTransaction(); //获取id为5的字段 Category c=(Category)s.get(Category.class, 5); //删除获得的字段 s.delete(c); s.getTransaction().commit(); s.close(); sf.close(); }

Hibernate更新数据的方法

//修改数据的方法 public static void update() { SessionFactory sf=new Configuration().configure().buildSessionFactory(); Session s=sf.openSession(); s.beginTransaction(); //获取对象 Category c=(Category)s.get(Category.class, 4); System.out.println(c); //修改对象 c.setName("newIphone"); //更新对象 s.update(c); s.getTransaction().commit(); s.close(); sf.close(); }

Hibernate查找数据的方法(不常用)

//查找数据的方法(不常用) public static void select() { SessionFactory sf=new Configuration().configure().buildSessionFactory(); Session s=sf.openSession(); s.beginTransaction(); //获取Query对象 ,HQL语句不用写select* Query q=s.createQuery("from Category c where c.name like?"); //与preparedStatement不同的是计算从0开始;    //%name:表示左匹配。 name%:表示右匹配。 %name%:表示模糊查询。 q.setString(0, "%iphone2%"); s.getTransaction().commit(); List<Category> list=q.list(); for(Category c:list) { System.out.println(c); } s.close(); sf.close(); } //通过Criteria查找数据 public static void selectFromCriteria() { SessionFactory sf=new Configuration().configure().buildSessionFactory(); Session s=sf.openSession(); //获取criteria对象 Criteria criteria=s.createCriteria(Category.class); //增加约束 criteria.add(Restrictions.like("name","%iphon%")); List<Category> list=criteria.list(); for(Category c:list) { System.out.println(c); } } //通过标准Sql查询 public static void selectFromSql() { SessionFactory sf=new Configuration().configure().buildSessionFactory(); Session s=sf.openSession(); s.beginTransaction(); SQLQuery query=s.createSQLQuery("Select * from Category c where c.name like 'iphone%'"); s.getTransaction().commit(); List<Object[]> list=query.list(); for(Object[] c:list) { for(Object o:c) { //Category category=(Category)o; System.out.println(o); } } } //一对多关系 public static void manyToOne() { SessionFactory sf=new Configuration().configure().buildSessionFactory(); Session s=sf.openSession(); s.beginTransaction(); //先把one存入 Category c=new Category("iphone"); s.save(c); //product 对应一个category Product p=(Product)s.get(Product.class, 1); System.out.println(p.getName()); p.setCategory(c); s.update(p); s.getTransaction().commit(); s.close(); sf.close(); }1.为Product类增加Category属性;2.在Product.hbm.xml中设置many-to-one属性;<many-to-one name="category" class="Category" column="cid" />3.在hibernate.cfg.xml中加入类Category的映射;

 

 

转载于:https://www.cnblogs.com/lastingjava/p/9911956.html


最新回复(0)