hibernate3 1、环境初步搭建curd

使用框架三部曲:类库,api,和配置文件

首先hibernate基本环境需要的jar包:

antlr-2.7.6.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
hibernate3.jar
javassist-3.9.0.GA.jar
jta-1.1.jar
log4j.jar
mysql-connector-java-5.1.34_1.jar
slf4j-api-1.5.8.jar
slf4j-log4j12.jar

1 定义pojo ,Customer

package com.msyd.hibernate.domain;

public class Customer {
    private Integer id;

    private String name;

    private Integer age;

    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;
    }

}

2 定义pojo的映射文件  ,用来映射 库表和pojo 的。和pojo在一个路径下,文件名称为Customer.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">
<hibernate-mapping>
   <class name="com.msyd.hibernate.domain.Customer" table="customers">
      <id name="id" column="id" type="integer">
         <generator class="increment"/>
      </id>
      <property name="name" column="name" type="string"/>
      <property name="age" column="age" type="integer"/>
   </class>
</hibernate-mapping>

3 连接数据库的属性文件,放在src下面即可,oracle我电脑会卡掉,所以连得mysql。文件名为  hibernate.properties

hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://127.0.0.1:3306/zkbc
hibernate.connection.username=root
hibernate.connection.password=root

hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true

4 进行curd测试,其他读写操作可追加编码测试。

package com.msyd.hibernate.test;

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.Before;
import org.junit.Test;

import com.msyd.hibernate.domain.Customer;

public class testCURD {
    public static SessionFactory sf;

    @Before
    public void beforeIniDeal() {
        Configuration cfg = new Configuration();//加载hibernate.properties
        cfg.addClass(Customer.class);//加载Customer.hbm.xml
        sf = cfg.buildSessionFactory();

    }

    @Test
    public void testAdd() {
        Session s = sf.openSession();
        Transaction tx = s.beginTransaction();
        Customer c = new Customer();
        c.setAge(17);
        c.setName("Ketty");

        s.save(c);
        afterDeal(tx, s);
    }

    @Test
    public void testdelete() {
        Session s = sf.openSession();
        Transaction tx = s.beginTransaction();
        Customer c = new Customer();
        c.setId(1);
        s.delete(c);
        afterDeal(tx, s);
    }

    @Test
    public void testUpdate() {//ok
        Session s = sf.openSession();
        Transaction tx = s.beginTransaction();
        Customer c = new Customer();
        c.setName("Jetty");
        c.setAge(15);
        c.setId(1);
        s.update(c);

        afterDeal(tx, s);
    }

    /**先获取,再更改值,然后提交,这样也可以进行更新数据
     * 
     * */
    @Test
    public void testUpdate2() {//ok
        Session s = sf.openSession();
        Transaction tx = s.beginTransaction();
        Customer c = (Customer) s.get(Customer.class, 5);
        c.setName("Jetty");

        afterDeal(tx, s);
    }

    /**批量更新多条记录
     *  s.createQuery  可以按照各种条件进行更新   use by hql语句
     * */
    @Test
    public void testBatchUpdate() {
        Session s = sf.openSession();
        Transaction tx = s.beginTransaction();
        Query q = s.createQuery("update Customer a set a.age=18 ");
        q.executeUpdate();

        afterDeal(tx, s);
    }

    /**查询一条记录
     *  s.get /  s.load  均是按照id查询,是固定的
     * */
    @Test
    public void testQueryOne() {
        Session s = sf.openSession();
        Transaction tx = s.beginTransaction();
        Customer c = (Customer) s.get(Customer.class, 1);
        Customer c1 = (Customer) s.load(Customer.class, 1);
        System.out.println(c + ":" + c1);//当对象已经在堆内存中时,不会再去数据库中查询 了
        //结果:com.msyd.hibernate.domain.Customer@3e92efc3:com.msyd.hibernate.domain.Customer@3e92efc3
        afterDeal(tx, s);
    }

    /**查询多条记录
     *  s.createQuery  可以按照各种条件查询
     * 
     * */
    @Test
    public void testQueryAll() {
        Session s = sf.openSession();
        Transaction tx = s.beginTransaction();
        //sql结构化查询语言,现在用的是hql语言,oop ,所以from后面跟的是对象名称,而非表名
        Query q = s.createQuery("from Customer c where c.id>0 ");//可以按照条件查询
        List<Customer> clist = q.list();
        for (int i = 0; i < clist.size(); i++) {
            System.out.println(i + ":" + clist.get(i).getId() + ":" + clist.get(i).getName());
        }
        afterDeal(tx, s);
    }

    public void afterDeal(Transaction tx, Session s) {
        tx.commit();
        s.close();
    }
}


5 这里仅提供add测试效果,其他结果不一一给出:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: select max(id) from customers
Hibernate: insert into customers (name, age, id) values (?, ?, ?)

查询数据库:


附注:如果你的运行结果没成功,即控制台没打印sql语句,则可能是mysql服务没有开启,需要进行如下操作:

进入windows 的命令提示符,进入c盘的  cd /windows/system32  路径下,输入net start mysql,服务启动,才能运行以下测试。



猜你喜欢

转载自blog.csdn.net/haidaoxianzi/article/details/80207225
今日推荐