Hibernate七部曲(二)简单的增删改查

来源:互联网 发布:振动数据采集器 编辑:程序博客网 时间:2024/06/07 07:00

hibernate是将实体类与数据库对应起来的一种orm技术,它可以使我们更专注与对实体类对象的操作,对数据库只需要简单了解就可以了(但实际开发中不推荐只简单了解,哈哈)。

本文涉及到的hibernate的jar包下载地址:http://download.csdn.net/detail/marvel__dead/9777642,另外我还手动加入了junit的jar包进行测试,这个eclipse可自动添加
项目结构如图:
这里写图片描述
那么首先我们得建立一个实体类对象User.java

package cn.com.lt.entity;public class User {    private int id;    private String username;    private String password;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }}

配置hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?><!DOCTYPE hibernate-configuration PUBLIC        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration>    <session-factory>        <!-- Database connection settings -->        <!-- 表示使用 oracle 数据库驱动类 下面都是我的相应的数据库信息,你可以改成你的-->        <property name="connection.driver_class">oracle.jdbc.OracleDriver</property>        <!-- jdbc 的连接 url 和数据库(使用我们之前新建的 hibernate)-->        <property name="connection.url">jdbc:oracle:thin:@172.18.1.252:1521:ora9is</property>        <!-- 数据库用户名 -->        <property name="connection.username">test</property>        <!-- 密码(这里为空) -->        <property name="connection.password">test</property>        <!-- 数据库使用的方言 -->        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>        <!-- Echo all executed SQL to stdout -->        <!-- 设置 控制台输出 sql 语句 为真 -->        <property name="show_sql">true</property>        <!-- 设置格式为 sql -->        <property name="format_sql">true</property>        <!-- 第一次加载 hibernate 时根据实体类自动建立表结构,以后自动更新表结构 -->        <property name="hbm2ddl.auto">update</property>                <!-- 映射文件 -->        <mapping resource="cn/com/lt/entity/User.hbm.xml"/>    </session-factory></hibernate-configuration>

将实体类映射到数据库中,配置User.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"><!-- 映射对应的 package --><hibernate-mapping package="cn.com.lt.entity">    <!-- class 和数据库中 table 对应(如果没有这个表则新建) -->    <class name="User" table="user_table_new">        <!-- id 主键,设为自增 -->        <id name="id" column="user_id">        </id>        <property name="username" column="user_username"></property>        <property name="password" column="user_password"></property>            </class></hibernate-mapping>

ok,主要就这三个就完成了hibernate的功能了,来测试一下:

package cn.com.lt.test;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.junit.Test;import cn.com.lt.entity.User;public class TestHibernate {    private static Configuration cfg = new Configuration().configure();    @SuppressWarnings("deprecation")    private static SessionFactory sf = cfg.buildSessionFactory();    private static Session session = sf.openSession();    User user = new User();    @Test    public void testAdd(){        //开启事务        session.beginTransaction();        user.setId(1);        user.setUsername("Javaer");        user.setPassword("520");        session.save(user);        session.getTransaction().commit();        session.close();        sf.close();    }    @Test    public void testSelect(){        session.beginTransaction();        //用StringBuilder连接查询语句        StringBuilder hql = new StringBuilder();        // 从 User 里面查找(注意 from 后有空格)        // 相当于 "select * from user_info;"        hql.append("from ").append( User.class.getName() );        //利用session建立query        Query query = session.createQuery(hql.toString());        // 序列化 query 的结果为一个 list 集合        List<User> users = query.list();        // 打印每一个 User 信息(这里只打印了名字,你也可以打印其他信息)        for (User user : users) {            System.out.println( user.getUsername() );        }        session.getTransaction().commit();        session.close();        sf.close();    }    //改,思路就是根据条件查询出来后,再去对实体类重新赋值然后update到数据库    @Test    public void testUpdate(){        session.beginTransaction();        StringBuilder hq = new StringBuilder();        // 对比查找的操作来看,因为我们需要修改指定 name 的用户密码,后面需要再添加查询条件        // 注意 from、where 的空格,":name" 表示一个参数        hq.append("from ").append(User.class.getName()).append(" where user_username=:name");        Query query = session.createQuery(hq.toString());        // 这里就设定参数 name 的值为"user1"        query.setString("name","Javaer" );         List<User> users = query.list();        for (User user : users) {            // 修改 user1 的密码            user.setPassword("520java");            // 注意这里是 update            session.update(user);        }        session.getTransaction().commit();        session.close();        sf.close();    }    //删,思路和改差不多    @Test    public void testDelete(){        session.beginTransaction();        StringBuilder hq = new StringBuilder();         // 对比查找时候的操作来看,因为我们需要修改指定 name 的用户密码,后面需要再添加查询条件         // 注意 from、where 的空格,":name" 表示一个参数         hq.append("from ").append(User.class.getName()).append(" where user_username=:name");         Query query = session.createQuery(hq.toString());         // 这里就设定参数 name 的值为"user1"         query.setString("name","Javaer" );          List<User> users = query.list();         for (User user : users) {             // 注意这里是 delete             session.delete(user);         }         session.getTransaction().commit();         session.close();         sf.close();    }}

增加,控制台输出结果:
这里写图片描述
查询,控制台输出结果:
这里写图片描述
更新,控制台输出结果:
这里写图片描述
删除,控制台输出结果:
这里写图片描述

“`

0 0