zoukankan      html  css  js  c++  java
  • 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
    ",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();
     
     

     

  • 相关阅读:
    安装CentOS7重启后提示License information
    使用VMware 安装Linux CentOS7
    VS 2015相当不错的功能:C#交互窗口
    未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包
    RabbitMQ service is already present
    RabbitMQ安装后不能运行 Error: unable to connect to node nodedown
    〖Demo〗-- 计算器
    〖Demo〗-- HAproxy配置文件操作
    〖Python〗-- 模块系列(二)
    〖Python〗-- 模块系列(一)
  • 原文地址:https://www.cnblogs.com/television/p/8681604.html
Copyright © 2011-2022 走看看