java框架Hibernate入门


针对版本hibernate-distribution-3.6.0.Final的学习

搭建环境及开发步骤
  1. 引入jar包

    • hibernate3.jar核心
    • required 必须引入的(6个)
      • antlr-2.7.6.jar
      • commons-collections-3.1.jar
      • dom4j-1.6.1.jar
      • javassist-3.12.0.GA.jar
      • jta-1.1.jar
      • slf4j-api-1.6.1.jar
    • jpa 目录
      • hibernate-jpa-2.0-api-1.0.0.Final.jar
    • 数据库驱动包
      • mysql-connector-java-5.1.7-bin.jar
  2. 写对象以及对象的映射

    • Employee.java 对象
    • Employee.hbm.xml 对象的映射 (映射文件)
public class Employee {

    private int empId;
    private String empName;
    private Date workDate;

    public int getEmpId(){
        return empId;
    }

    public void setEmpId(int empId){
        this.empId = empId;
    }

    public String getEmpName(){
        return empName;
    }

    public void setEmpName(String empName){
        this.empName = empName;
    }

    public Date getWorkDate(){
        return workDate;
    }

    public void setWorkDate(Date workDate){
        this.workDate = workDate;
    }

    @Override
    public String toString(){
        return "Employee{" +
                "empId=" + empId +
                ", empName='" + empName + '\'' +
                ", workDate=" + workDate +
                '}';
    }
}

Employee.hbm.xml文件 : 先确保数据库和表都已存在

create table employee (id int not null primary key auto_increment,empName varchar(10),workDate datetime);




    
        
        
            
        
        
        
    

  1. src/hibernate.cfg.xml 主配置文件
    • 数据库连接配置
    • 加载所用的映射(*.hbm.xml)



    
        
        com.mysql.jdbc.Driver
        jdbc:mysql://192.168.5.129:3306/partner
        root
        mysql
        org.hibernate.dialect.MySQL5Dialect

        true

        
    

4.App.java测试 : 一次简单的测试

public class App {

    @Test
    public void testSave() throws Exception{
        Employee emp = new Employee();
        emp.setEmpName("zhang");
        emp.setWorkDate(new Date());
        // 获取加载配置文件的管理类对象
        Configuration config = new Configuration();
        // 加载配置文件
        config.configure();
        SessionFactory sessionFactory = config.buildSessionFactory();
        // 创建session
        Session session = sessionFactory.openSession();
        // 提交事务
        Transaction tx = session.beginTransaction();
        // --执行操作--
        session.save(emp);
        // 提交事务
        tx.commit();
        // 关闭session
        session.close();
    }
}

测试通过 :


java框架Hibernate入门_第1张图片
testSave.png
Hibernate的Api
  • Configuration 配置管理类对象

    • config.configure(); 加载主配置文件的方法(hibernate.cfg.xml) 默认加载src/hibernate.cfg.xml
    • config.configure(“cn/config/hibernate.cfg.xml”); 加载指定路径下指定名称的主配置文件
    • config.buildSessionFactory(); 创建session的工厂对象
  • SessionFactory session的工厂(或者说代表了这个hibernate.cfg.xml配置文件)

    • sf.openSession(); 创建一个sesison对象
    • sf.getCurrentSession(); 创建session或取出session对象
  • Session session对象维护了一个连接(Connection), 代表了与数据库连接的会话。

    • Hibernate最重要的对象: 只用使用hibernate与数据库操作,都用到这个对象
    • session.beginTransaction(); 开启一个事务;
      hibernate要求所有的与数据库的操作必须有事务的环境,否则报错!
  • 更新:

    • session.save(obj); 保存一个对象
    • session.update(emp); 更新一个对象
    • session.saveOrUpdate(emp); 保存或者更新的方法:
      • 没有设置主键,执行保存;
      • 有设置主键,执行更新操作;
      • 如果设置主键不存在报错!
  • 主键查询:

    • session.get(Employee.class, 1); 主键查询
    • session.load(Employee.class, 1); 主键查询 (支持懒加载)
  • HQL查询

    • HQL查询与SQL查询区别
      • SQL:(结构化查询语句) 查询的是表以及字段 ; 不区分大小写
      • HQL: hibernate query language 即hibernate提供的面向对象的查询语言
        • 查询的是对象以及对象的属性
        • 区分大小写
    /**
     * HQL查询
     * @throws Exception e
     */
    @Test
    public void testQuery() throws Exception{

        Session session = sessionFactory.openSession(); 
        Transaction transaction = session.beginTransaction();

        Query q = session.createQuery("from Employee");
//        Query q = session.createQuery("from Employee where empId=1 or empId=2");   带条件的查询
        List list = q.list();

        System.out.println(list);
        transaction.commit();
        session.close();
    }
  • Criteria查询
    • 完全面向对象的查询。
    /**
     * QBC查询  query by criteria 完全面向对象查询
     * @throws Exception e
     */
    @Test
    public void testQBC() throws Exception{

        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        Criteria criteria = session.createCriteria(Employee.class);
//        criteria.add(Restrictions.eq("empId",1)); 条件查询
        List list = criteria.list();

        System.out.println(list);
        transaction.commit();
        session.close();
    }
  • 本地SQL查询
    复杂的查询,就要使用原生态的sql查询,也可以,就是本地sql查询的支持!
    (缺点: 不能跨数据库平台!)
    /**
     * sql查询
     * @throws Exception 异常
     */
    @Test
    public void testSql() throws Exception{
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

//        SQLQuery sqlQuery = session.createSQLQuery("select * from employee");
        SQLQuery sqlQuery = session.createSQLQuery("select * from employee").addEntity(Employee.class);
        System.out.println(sqlQuery.list());

        transaction.commit();
    }
CRUD案例

//仅随手测试代码 请忽略不够优化,也不要找我茬

public class HibernateUtils {

    private static SessionFactory sf;

    static {
        // 加载主配置文件, 并创建Session的工厂
        sf = new Configuration().configure().buildSessionFactory();
    }

    public static Session getSession(){
        return sf.openSession();
    }
}
public interface IEmployeeDao {

    void save(Employee employee);

    void update(Employee employee);

    void delete(Serializable id);

    Employee findById(Serializable id);

    List getAll();

    List getAll(String employeeName);

    List getAll(int pageNo, int pageSize);
}
public class EmployeeDaoImpl implements IEmployeeDao {
    @Override
    public void save(Employee employee){
        Session session = null;
        Transaction tx = null;
        try{
            session = HibernateUtils.getSession();
            tx = session.beginTransaction();
            session.save(employee);
        }catch(Exception e){
            throw new RuntimeException(e);
        }finally{
            if(tx != null){
                tx.commit();
            }
            if(session != null){
                session.close();
            }
        }
    }

    @Override
    public void update(Employee employee){
        Session session = null;
        Transaction tx = null;
        try{
            session = HibernateUtils.getSession();
            tx = session.beginTransaction();
            session.update(employee);
        }catch(Exception e){
            throw new RuntimeException(e);
        }finally{
            if(tx != null){
                tx.commit();
            }
            if(session != null){
                session.close();
            }
        }
    }

    @Override
    public void delete(Serializable id){
        Session session = null;
        Transaction tx = null;
        try{
            session = HibernateUtils.getSession();
            tx = session.beginTransaction();
            Object obj = session.get(Employee.class, id);
            if(obj != null){
                session.delete(obj);
            }
        }catch(Exception e){
            throw new RuntimeException(e);
        }finally{
            if(tx != null){
                tx.commit();
            }
            if(session != null){
                session.close();
            }
        }
    }

    @Override
    public Employee findById(Serializable id){
        Session session = null;
        Transaction tx = null;
        try{
            session = HibernateUtils.getSession();
            tx = session.beginTransaction();
            return (Employee) session.get(Employee.class, id);
        }catch(Exception e){
            throw new RuntimeException(e);
        }finally{
            if(tx != null){
                tx.commit();
            }
            if(session != null){
                session.close();
            }
        }
    }

    @Override
    public List getAll(){
        Session session = null;
        Transaction tx = null;
        try{
            session = HibernateUtils.getSession();
            tx = session.beginTransaction();
            Query q = session.createQuery("from Employee");
            return q.list();
        }catch(Exception e){
            throw new RuntimeException(e);
        }finally{
            if(tx != null){
                tx.commit();
            }
            if(session != null){
                session.close();
            }
        }
    }

    @Override
    public List getAll(String employeeName){
        Session session = null;
        Transaction tx = null;
        try{
            session = HibernateUtils.getSession();
            tx = session.beginTransaction();
            Query q = session.createQuery("from Employee where empName = ?");
            // 注意: 参数索引从0开始
            q.setParameter(0, employeeName);
            return q.list();
        }catch(Exception e){
            throw new RuntimeException(e);
        }finally{
            if(tx != null){
                tx.commit();
            }
            if(session != null){
                session.close();
            }
        }
    }

    @Override
    public List getAll(int pageNo, int pageSize){
        Session session = null;
        Transaction tx = null;
        try{
            session = HibernateUtils.getSession();
            tx = session.beginTransaction();
            Query query = session.createQuery("from Employee");
            // 设置分页参数
            query.setFirstResult(pageNo);
            query.setMaxResults(pageSize);
            List list = query.list();
            return list;
        }catch(Exception e){
            throw new RuntimeException(e);
        }finally{
            if(tx != null){
                tx.commit();
            }
            if(session != null){
                session.close();
            }
        }
    }
}

你可能感兴趣的:(java框架Hibernate入门)