Hibernate的xml方法配置和操作代码

一、gradle中包:

    compile group: 'org.hibernate', name: 'hibernate-core', version: '5.2.12.Final'
    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.40'

 

二、项目中导入hibernate
  1、向gradle配置文件中引入一中的两个包
  2、点击按钮,在facets中添加hibernate,

这时,右下角会出现一个持久化选项卡,点击该选项卡:右键点击B7_main选项,

点击Generate Persisitence Mapping,点击By Database Schema,

(需要自己新建一个po层),选择自己需要的数据库,表以及关系,然后ok即可

它会自动生成一个hibernate.cfg.xml的配置文件,将其拖入resources目录下即

<?xml version='1.0' encoding='utf-8'?>
        <!DOCTYPE hibernate-configuration PUBLIC
                "-//Hibernate/Hibernate Configuration DTD//EN"
                "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
  <property name="connection.url"><![CDATA[jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf-8]]></property>
  <property name="show_sql">true</property>
  <property name="format_sql">true</property>
  <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
  <property name="connection.username"></property>
  <property name="connection.password"></property>
  <mapping resource="User.hbm.xml"/>
  <!-- DB schema will be updated if needed -->
  <!-- <property name="hbm2ddl.auto">update</property> -->
</session-factory>
</hibernate-configuration>

其中mapping标签必须放在property标签下,不能混着放,每次更新gradle后记得要重新配置数据库的链接密码。

还会自动关系映射出一个和user表对应的类:User(存放于po层)

package com.weikun.po;

/**
 * Created by Administrator on 2018/3/25.
 */
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;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        User user = (User) o;

        if (id != user.id) return false;
        if (username != null ? !username.equals(user.username) : user.username != null) return false;
        if (password != null ? !password.equals(user.password) : user.password != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = id;
        result = 31 * result + (username != null ? username.hashCode() : 0);
        result = 31 * result + (password != null ? password.hashCode() : 0);
        return result;
    }
}

之后就可以在dao层通过控制User类下的属性方法来映射操控底层数据库的数据了。

还会自动生成和映射到user表的配置文件user.hbm.xml

<?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">
<hibernate-mapping>
    <class name="com.weikun.po.User" table="user" schema="test">
        <id name="id">
            <column name="id" sql-type="int(11)"/>
        </id>
        <property name="username">
            <column name="username" sql-type="varchar(200)" length="200"/>
        </property>
        <property name="password">
            <column name="password" sql-type="varchar(20)" length="20"/>
        </property>
    </class>
</hibernate-mapping>

其中<id>标签是指主键,如果用注解的话是@id来标注主键。

联合主键的配置文件代码如下:

<composite-id>
            <key-property name="username">
                <column name="username" sql-type="varchar(10)" length="10"/>
            </key-property>
            <key-property name="sex">
                <column name="sex" sql-type="varchar(10)" length="10"/>
            </key-property>
  </composite-id>

 

三、dao层的操作代码

package com.weikun.dao;

import com.weikun.po.User;
import com.weikun.po.User5;
import com.weikun.po.User5PK;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

import java.util.List;

/**
 * Created by Administrator on 2018/3/25.
 */
public class UserDAOImpl {
    private Configuration configuration=null;
    private SessionFactory sessionFactory=null;

    public UserDAOImpl(){
        configuration=new Configuration().configure("hibernate.cfg.xml");//1、将配置文件加载到配置类的对象中

        sessionFactory=configuration.buildSessionFactory();//2、使用配置对象创建对话工厂

    }
    @Test
    public void queryByAll(){

        Session session=null;
        session=sessionFactory.openSession();//3、使用对话工厂打开会话
        List<User> list=session.createQuery("from User ").list();//sql--H QL4、执行回话的具体行为
        list.forEach(user->System.out.printf("%s-%s\n",user.getUsername(),user.getPassword()));

        session.close();//5、关闭会话
    }

    @Test
    public void queryById(){
        Session session=null;
        session=sessionFactory.openSession();
        User user=session.get(User.class,288);//get
        System.out.printf("%s-%s",user.getUsername(),user.getPassword());
        session.close();

    }
    @Test
    public void update(){
        Session session=null;
        session=sessionFactory.openSession();
        Transaction transaction=session.beginTransaction();
        User user=new User();
        user.setId(285);
        user.setUsername("MENG");
        user.setPassword("8888");
        try{
            session.update(user);
            transaction.commit();
        }catch(Exception e){
            transaction.rollback();
            e.printStackTrace();
        }
        session.close();

    }
    @Test
    public void del(){
        Session session=null;
        session=sessionFactory.openSession();
        Transaction transaction=session.beginTransaction();
        User user=new User();
        user.setId(286);
        try{
            session.delete(user);
            transaction.commit();
        }catch(Exception e){
            transaction.rollback();
            e.printStackTrace();
        }
        session.close();
    }
    @Test
    public void add5(){
        Session session=null;
        session=sessionFactory.openSession();
        Transaction transaction=session.beginTransaction();
        User5 user5=new User5();
        user5.setUsername("rose1");
        user5.setSex("f");
        user5.setAge(199);
        try{
            session.save(user5);
            transaction.commit();
        }catch(Exception e){
            transaction.rollback();
            e.printStackTrace();
        }

        session.close();
    }
    @Test
    public void add(){
        Session session=null;
        session=sessionFactory.openSession();
        Transaction transaction=session.beginTransaction();
        User user=new User();
        user.setPassword("yu");
        user.setUsername("YUYUYU");
        try{
            session.save(user);

            transaction.commit();
        }catch(Exception e){
            transaction.rollback();
            e.printStackTrace();
        }

        session.close();

    }
}

先创建一个配置文件Configuration

 private Configuration configuration=null;

 

再创建一个SessionFactory工厂

private SessionFactory sessionFactory=null;
public UserDAOImpl(){
        configuration=new Configuration().configure("hibernate.cfg.xml");//1、将配置文件加载到配置类的对象中

        sessionFactory=configuration.buildSessionFactory();//2、使用配置对象创建对话工厂

    }

在构造器中实例化配置对象,创建对话工厂。

使用sessionFactory开一个回话session

 

除了查询以外,其他的增删改都需要使用事务管理,使用session开始一个事务

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

需要做一个trycatch,try中处理事务,catch中进行事务回滚,最后关闭事务

 try{
            session.save(user);

            transaction.commit();
        }catch(Exception e){
            transaction.rollback();
            e.printStackTrace();
        }

        session.close();

 

 

 

 

 

 

 

 

 

 

posted @ 2018-03-31 11:55  彩电  阅读(457)  评论(0编辑  收藏  举报