zoukankan      html  css  js  c++  java
  • Hibernate搭建框架(一)

    什么是hibernate?

      hibernate是一个orm框架,实现了对JDBC的封装。通过xml文件来实现类和表之间的映射,这样就可以使用操作对象的方式来操作数据库。

    官网:http://hibernate.org/

    这里使用最新的5.3版本,下载到本地。

    hibernate框架搭建:

    1.导入包 下载后将lib/required文件夹中的jar包以及mysql数据库的驱动jar包(mysql-connector-java-5.1.46.jar)导入到项目中

    2.编写主配置文件 创建hibernate.cfg.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>
            <!--必选5个-->
            <!--数据库驱动 -->
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <!--数据库url -->
            <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/david2018_db?characterEncoding=UTF-8</property>
            <!--数据库连接用户名 -->
            <property name="hibernate.connection.username">root</property>
            <!--数据库连接密码 -->
            <property name="hibernate.connection.password">1234</property>
            <!--数据库方言 mysql(limt) sqlserver(top)-->
            <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
    
    
            <!--可选3个 -->
            <!--自动建表:
            create:每次都删除新建(数据会丢失)
            create-drop:每次运行结束会将表删除
            update:如果存在不会生成,不存在新建,如果表修改也会新增列到表中(不会删数据)
            validate:校验不自动生成表,每次启动会检查表是否正确 -->
            <property name="hibernate.hbm2ddl.auto">update</property>
            <!--输出生成的SQL语句  -->
            <property name="hibernate.show_sql">true</property>
            <!--对SQL语句进行格式化  -->
            <property name="hibernate.format_sql">true</property>
    
            <!--映射文件的路径 -->
            <mapping resource="com/hibernate/domain/User.hbm.xml"></mapping>
        </session-factory>
    </hibernate-configuration>

    3.实体类

    package com.hibernate.domain;
    
    public class User {
        private int UserId;
        private String UserName;
        private String PassWord;
        private int Age;
        private String Sex;
    
        public User(){
    
        }
        public User(String userName,String password,int age,String sex){
            this.UserName = userName;
            this.PassWord = password;
            this.Age = age;
            this.Sex = sex;
        }
    
        public int getUserId() {
            return UserId;
        }
        public void setUserId(int UserId) {
            this.UserId = UserId;
        }
    
        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;
        }
        public int getAge() {
            return Age;
        }
        public void setAge(int Age) {
            this.Age = Age;
        }
        public String getSex() {
            return Sex;
        }
        public void setSex(String Sex) {
            this.Sex = Sex;
        }
    }

    4.编写orm元数据 User.hbm.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >
    <!--映射标签 package:内部类的所在的包名,内部不用写完整类名 -->
    <hibernate-mapping package="com.hibernate.domain">
        <!--需要设置的映射类:设置该类对应的表  -->
        <!--属性:name:类名 table:表名  -->
        <!-- name="com.hibernate.domain.User" 因为用了package就不用写完整包名了-->
        <class name="User" table="User">
            <!--id:主键,name:属性名称,column:字段名称  -->
            <id name="UserId" column="UserId">
                <!--generator:主键生成策略 class:标记主键如何生成 取值:
                1、native:自动增长,会根据当前的数据库自动切换
                2、identity:mySQL的自增策略
                3、sequence:Oracle的自增标记
                4、uuid:32位字符串
                5、assigned:自定义字符串
                6、foreign:外键
                7、increment:自己维护自增关系-->
                <generator class="native"/>
            </id>
            <!--配置属性对应的字段
            column(可选):不填就自动走属性名
            type(可选)填写该列的类型 不填会自动识别
            not-null(可选):默认false可为空
            length(可选):长度,默认值数据库类型最大长度-->
            <property name="UserName" column="UserName" type="java.lang.String"/>
            <property name="PassWord" column="PassWord" type="string"/>
            <property name="Age" column="Age"/>
            <property name="Sex" column="Sex">
                <!--<column name="Sex" sql-type="varchar"></column> string还可以这样定义-->
            </property>
        </class>
    </hibernate-mapping>

    5.增删改查

    import com.hibernate.domain.User;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    
    public class Main {
        public static void main(String[] args) {
            //加载配置文件 空参默认加载src下的hibernate.cfg.xml
            Configuration conf = new Configuration().configure();
            // 创建SessionFactory (保存和使用所有配置信息,消耗内存资源非常大,保证在web项目中只创建一个)
            SessionFactory sf = conf.buildSessionFactory();
            // 创建Session对象 打开一个新的session对象
            Session session = sf.openSession(); //sf.getCurrentSession();获得一个现有的session对象 没有就创建 需要在配置文件中进行配置
            // 开启事务
            Transaction trans = session.beginTransaction();
    
            //新增
            session.save(new User("测试", "666666",18,"男"));
    
            //查询
            User user = session.get(User.class,1);
            System.out.println(user.getUserName());
    
            //修改
            user.setUserName("武大郎");
            session.update(user);
    
            //删除
            User u = session.get(User.class,2);
            session.remove(u);
    
            trans.commit();
            //trans.rollback();
    
            session.close();
            sf.close();
        }
    }

    不用去数据库建表,hibernate会自动根据实体反向生成。

    编写工具类

    package com.hibernate.utils;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    
    
    public class HibernateUtils {
        public static final SessionFactory sessionFactory;
    
        static {
            Configuration conf = new Configuration().configure();
            sessionFactory = conf.buildSessionFactory();
        }
        public static Session openSession(){
            Session session = sessionFactory.openSession();
            return session;
        }
    
        public static Session getCurrentSession(){
            Session session = sessionFactory.getCurrentSession();
            return session;
        }
    }

    测试

        Session session = HibernateUtils.openSession();
        session.save(new User("测试", "666666",18,"男"));
        session.close();
  • 相关阅读:
    基于maven构建javaweb项目思路梳理及改进 在路上
    分圆多项式整理
    第03次作业栈和队列
    C语言第二次实验报告
    week01绪论作业
    第02次作业线性表
    C语言第一次实验报告
    工作流的问题
    无法使用Outlook 2003 Out Of Office Assisant
    刷机
  • 原文地址:https://www.cnblogs.com/baidawei/p/9058013.html
Copyright © 2011-2022 走看看