用java项目做Hibernate的增删查改,和分页(hibernate-distribution-3.6.0.Final为例)


1, 在文档中找到导入7个jar包

hibernate3.jar 核心jar包

lib-required下的全部jar包6个

lib-jpa下的一个jar

2,写一个配置文件config 默认名为hibernate.cfg.xml,可以在project/etc找到  注意头文件和 *hbm.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>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/salary</property>
        <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">12345678</property>
      <property name="hibernate.jdbc.batch_size">30</property>
<!--批处理注意30是自定义为后边的批处理做准备-->
< property name ="hibernate.show_sql" >true </ property > <!--查看生成的sql语句--> < property name ="hibernate.format_sql" >true </ property > <!--将sql语句做格式化(按照数据库语句格式打印)的处理--> < mapping resource ="com/oracle/bean/salary.hbm.xml" ></ mapping >
 
 
<!--mapping 为映射文件 ,rile为绝对路径,resource为相对路径-->
</ session-factory > </ hibernate-configuration >

2,写一个javabean类如Salary,

为了和数据库 做关系映射 ,操作类就是操作表

写一个映射的配置文件格式为 ,一般为类名.hbm.xml

 *hbm.xml,如salary.hbm.xml

package com.oracle.bean;

public class Salary {
  private Long workcode;
  private String uname;
  private String dept;
  private Double base_salary;
  private Double extract;
  private Double leav;
  private Double sick;
  private Double pk;

  public Long getWorkcode() {
    return workcode;
  }

  public void setWorkcode(Long workcode) {
    this.workcode = workcode;
  }

  public String getUname() {
    return uname;
  }

  public void setUname(String uname) {
    this.uname = uname;
  }

  public String getDept() {
    return dept;
  }

  public void setDept(String dept) {
    this.dept = dept;
  }

  public Double getBase_salary() {
    return base_salary;
  }

  public void setBase_salary(Double base_salary) {
    this.base_salary = base_salary;
  }

  public Double getExtract() {
    return extract;
  }

  public void setExtract(Double extract) {
    this.extract = extract;
  }

  public Double getLeav() {
    return leav;
  }

  public void setLeav(Double leav) {
    this.leav = leav;
  }

  public Double getSick() {
    return sick;
  }

  public void setSick(Double sick) {
    this.sick = sick;
  }

  public Double getPk() {
    return pk;
  }

  public void setPk(Double pk) {
    this.pk = pk;
  }

  @Override
  public String toString() {
    return "Salary{" +
            "workcode=" + workcode +
            ", uname='" + uname + '\'' +
            ", dept='" + dept + '\'' +
            ", base_salary=" + base_salary +
            ", extract=" + extract +
            ", leav=" + leav +
            ", sick=" + sick +
            ", pk=" + pk +
            '}';
  }
}

2,salary.hbm.xml和javabean类在同级目录

  如果当前你的类的属性和表的字段 名称是一致 可以省略掉后台的column

  将映射文件写完了之后 需要将映射文件加入到hibernate.cfg.xml

  <mapping resource="com/oracle/t_sarlary.hbm.xml"/> 


<property name="uname" column="uname"></property>   <!--其他的属性映射 左边属性 右边是字段-->
        <property name="dept" column="dept"></property>
        <property name="base_salary" column="base_salary"></property>
        <property name="extract" column="extract"></property>
        <property name="leave" column="leav"></property>
        <property name="sick" column="sick"></property>
        <property name="pk" column="pk"></property>

<?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">
<!-- package表示你类名所在位置-->
<hibernate-mapping package="com.oracle.bean">
 
 
<!--class中的name是类名,table是数据库的表名 id表示主键-->
< class name ="Salary" table ="salary" > < id name ="workcode" > </ id > < property name ="uname" ></ property > < property name ="dept" ></ property > < property name ="base_salary" ></ property > < property name ="extract" ></ property > < property name ="leav" ></ property > < property name ="sick" ></ property > < property name ="pk" ></ property > </ class > </ hibernate-mapping >

一,单个增加

public static void main(String[] args) {
   //配置文件的解析类configuration
    Configuration cfg=new Configuration();
    //加载核心的配置文件 默认为hibernate.cfg.xml ,cfg.configure("hibernate.cfg.xml");
    //配置文件的名字可以改 如:aa.db.xml
    cfg.configure();//开始解析
    //获取连接的工厂 sessionFactory
    SessionFactory sessionFactory = cfg.buildSessionFactory();
    //从工厂中获取一个连接session
    Session session = sessionFactory.openSession();
    //开启事务
    session.beginTransaction();
    //持久化操作的条件
    Salary salry=new Salary();
    //int short long L
    salry.setWorkcode(9l);
    salry.setUname("111");
    salry.setDept("kafa");
   salry.setBase_salary(10000d);
   salry.setExtract(2000d);
     salry.setLeav(5000d);
    salry.setSick(500d);
    salry.setPk(200d);
    //sql="insert into ..." orm框架 操作对象即操作表
        session.save(salry);
    //提交事务
    session.getTransaction().commit();
    //关闭session
    session.close();
    //关闭session工厂
    sessionFactory.close();


}

一:批量增加

先配置,在配置文件配置如30 

<property name="hibernate.jdbc.batch_size">30</property>

public static void main(String[] args) {
    //解析配置文件
    Configuration cfg=new Configuration();
    cfg.configure();
    //创建sessionFactory
    SessionFactory sessionFactory=cfg.buildSessionFactory();
    //从sessionFactory中获取session
    Session session=sessionFactory.openSession();
    //开启事务
    session.beginTransaction();
    //持久化操作 
    for(int i=31;i<=100;i++)
    {
        Salary salary=new Salary();
        salary.setWorkcode((long)i);
        salary.setUname("淘宝宝"+i);
        salary.setDept("软件开发部"+i);
        //float  F  double d
        salary.setBase_salary(10000d); //int short long L  整型
        salary.setExtract(2000d);
        salary.setLeav(5000d);
        salary.setSick(7000d);
        salary.setPk(1400d);
        session.save(salary);
        if(i%30==0)//和配置文件的30保持一致
        {
            session.flush();
            session.clear();
        }
    }
    //提交事务
    session.getTransaction().commit();
    //关闭session
    session.close();
    //关闭sessionFactory
    sessionFactory.close();
}




二,删除

public static void main(String[] args) {
    //配置文件的解析类
    Configuration cfg=new Configuration();
    //解析配置文件
    cfg.configure();
    //获取连接的session工厂
    SessionFactory sessionFactory = cfg.buildSessionFactory();
    //从工厂获取一个连接的session
    Session session = sessionFactory.openSession();
    //开启事务
    session.beginTransaction();
    //删除之前先查询有2种方法
    //1先查询再删除,注意类型转换9L long的类型为后缀l
   // Salary salary1 = (Salary)session.get(Salary.class, 9l);
    //2定义一个有主键的对象
    Salary salary2=new Salary();
    salary2.setWorkcode(30l);
    session.delete(salary2);
    //session.delete(salary1);
    //提交事务
   session.getTransaction().commit();
    //关闭session
   session.close();
    //关闭session工厂
   sessionFactory.close();



}

三 ,查看

public static void main(String[] args) {
    //解析配置文件的类
    Configuration cfg=new Configuration();
    //解析配置文件
    cfg.configure();
    //创建session工厂
    SessionFactory sessionFactory = cfg.buildSessionFactory();
    //从session工厂获取一个session
    Session session = sessionFactory.openSession();
    //开区事务
     session.beginTransaction();
    //原则 类即表 属性即字段 不允许出现 *  hql 用别名代替* 如select s from Salary s;
    //查询所有 指定类型  持久化操作  HQL语法 mysql oracle sql语法
   // Query query = session.createQuery("select s from Salary s");
    //查询所有的语法select s from Salary s ,from Salary
    /*Query query = session.createQuery("from Salary");

    List<Salary> list = query.list();
    for(Salary s:list){
        System.out.println(s);
    }*/

    //单列 是Object类型 //query 查询分析器
    /*Query query = session.createQuery("select s.uname from Salary s");

    List<Object> list = query.list();
    for(Object s:list){
        System.out.println(s);
    }*/
   //查询多列
   Query query = session.createQuery("select s.uname,s.dept,s.base_salary from Salary s");

    List<Object[]> list = query.list();
    for(Object[] s:list){
       // System.out.println(s);
        for(Object ss:s){
            System.out.println(ss);
        }
    }


    session.getTransaction().commit();
    session.close();
    sessionFactory.close();

}

四:改

public static void main(String[] args) {
    Configuration cfg=new Configuration();
    cfg.configure();
    SessionFactory sessionFactory = cfg.buildSessionFactory();
    Session session = sessionFactory.openSession();
    session.beginTransaction();
    //修改之前先查询
    Salary salary=(Salary)session.get(Salary.class,9l);
     salary.setBase_salary(666d);
     salary.setExtract(666d);
    session.update(salary);
    session.getTransaction().commit();
       session.close();
   sessionFactory.close();

}

五 分页

public static void main(String[] args) {
    Configuration cfg=new Configuration();
    cfg.configure();
    SessionFactory sessionFactory = cfg.buildSessionFactory();
    Session session = sessionFactory.openSession();
    session.beginTransaction();
    Query query = session.createQuery("from Salary");
    //持久化操作
    //limit 0 10 0-10条数据
    //limit 10 10 11-20
   query.setFirstResult(0);//从第几条数据开始
   query.setMaxResults(3);//这条数据开始拿几条数据  数据不会变
    List<Salary> list = query.list();//获取所有的数据
    for(Salary salary:list){
        System.out.println(salary);
    }

    session.getTransaction().commit();
    session.close();
    sessionFactory.close();

}

六,把log4j.properties放在hibernate.cfg.xml的同级目录

  我们都希望看一下 hibernate的执行过程 所以我们需要引入 hibernate的日志
需要引入 slf4j-log4j.jar这个jar包下载地址:http://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12/1.6.1
log4j.jar 这个jar包下载地址:http://mvnrepository.com/artifact/log4j/log4j/1.2.11
还需要找到project/etc/log4j.properties 日志文件 引入到我们项目中
这样就可以看到日志

除此之外我们还需要看到我们在执行过程中生成的SQL语句

所以我们需要在核心配置 hibernate.cfg.xml 

   <property name="hibernate.show_sql">true</property>   <!--查看生成的sql语句-->
           <property name="hibernate.format_sql">true</property>  <!--将sql语句做格式化的处理-->

猜你喜欢

转载自blog.csdn.net/zyljjf/article/details/80266851