Hibernate-Entity.hbm.xml实现-intellij-kotlin入门级

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 个人博客项目地址-码云intellij新建Maven项目在src/resource下新建hibernate.cfg.xml文件,一定要在src/resource目录下,否则会报无法定位资源文件的错误。

个人博客
项目地址-码云

  1. intellij新建Maven项目
  2. 在src/resource下新建hibernate.cfg.xml文件,一定要在src/resource目录下,否则会报无法定位资源文件的错误。
<?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>
        <!--数据库url,以及防止中文乱码-->
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate-final?useUnicode=true&characterEncoding=UTF-8</property>
        <!--Mysql驱动-->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!--Mysql用户名-->
        <property name="connection.username">root</property>
        <!--Mysql密码-->
        <property name="connection.password">rootPwd</property>

        <!--方言-->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <!--调试时显示sql语句-->
        <property name="show_sql">true</property>
        <!--格式化调试时输出的sql语句-->
        <property name="format_sql">true</property>

        <!-- DB schema will be updated if needed -->
        <!--create表结构每次发生改变都会删除原来的表,创建新的表。update是在原有的表上进行更新,保留数据-->
        <property name="hbm2ddl.auto">update</property>
        <!--<property name="hbm2ddl.auto">create</property>-->

        <!--映射文件-->
        <mapping resource="StudentEntity.hbm.xml"/>
    </session-factory>
</hibernate-configuration>
  1. 不要使用intellij的Add Framework Support,可能是intellij的hibernate版本太低了,使用这种方式生成数据库表的时候会报错,"type"在mysql高版本中已经被删除。
  2. 在项目的pom文件中添加hibernate依赖
      <!--hibernate依赖-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.11.Final</version>
        </dependency>
        <!--单元测试依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>
        <!--mysqlJDBC依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.39</version>
        </dependency>
  1. 新建持久化类
package Entity;


/**
 * Created by futao on 2017/9/24.
 */
public class Student {
    //JavaBean(持久化类)编写规范
    //1.公有的类
    //2.私有属性
    //3.提供公有的不带参数的默认构造方法
    //4.私有属性的公有getter和setter
    //5.为方便实例化对象,一般生成一个带参的构造方法

    //设置public static final String的意义在于:比如 .add(Restrictions.eq())的时候,可以直接通过实体的类型点出来,而不用手动输入,这样避免了手动输入发生错误的情况
    private int sid;
    public static final String _sid = "sid";
    private String name;
    public static final String _name = "name";
    private String gender;
    public static final String _gender = "gender";
    private Timestamp birthday;
    public static final String _birthday = "birthday";
    private String address;
    public static final String _address = "address";
    private String tel;
    public static final String _tel = "tel";

    public Student(){ }

    public Student(int sid, String name, String gender, String birthday, String address, String tel) {
        this.sid = sid;
        this.name = name;
        this.gender = gender;
        this.birthday = birthday;
        this.address = address;
        this.tel = tel;
    }

    public int getSid() {
        return sid;
    }

    public void setSid(int sid) {
        this.sid = sid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }
}

  1. 在src/resource文件夹下创建实体映射文件StudentEntity.hbm.xml,maven项目的配置文件应该都应该放在这个文件夹下,否则都会报错。
<?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="Entity.Student" table="t_student">
        <id name="sid">
            <column name="sid" sql-type="int(11)"/>
            <generator class="native"/>
        </id>
        <property name="name">
            <column name="name" sql-type="varchar(255)" not-null="true"/>
        </property>
        <property name="birthday">
            <column name="birthday" sql-type="varchar(255)" not-null="true"/>
        </property>
        <property name="address">
            <column name="address" sql-type="varchar(255)" not-null="false"/>
        </property>
    </class>
</hibernate-mapping>
  1. 在hibernate主配置文件中添加实体映射文件
  <!--映射文件-->
        <mapping resource="StudentEntity.hbm.xml"/>
  1. 测试
package Entity

import org.hibernate.cfg.Configuration
import org.junit.Test

@Suppress("DEPRECATION")
/**
 * Created by futao on 2017/9/24.
 */
class t{

    @Test
    fun testInit(){
        //加载配置文件
        val configuration=Configuration().configure()
        //创建会话工厂
        val sessionFactory=configuration.buildSessionFactory()
        //创建会话
        val session=sessionFactory.openSession()
        //开启事务
        val transaction=session.beginTransaction()

        //crud
        session.save(Student(1,"熊小二","男", "2017-9-24","上海市小二房","1887978252"))

        //提交事务
        transaction.commit()
        //关闭会话
        session.close()
        //关闭会话工厂
        sessionFactory.close()
    }

}


基础版完成 ↑↑↑↑↑↑↑



Hibernate执行流程

img_6993d46636d21b0815a924db63b10be6.png
Hibernate执行流程

session简单地理解就是一个操作数据库的对象
hibernate的操作必须包装在事务当中,否则操作不会同步到数据库(或者使用doWord()的方式)

创建session对象的两种方式
  1. val session=sessionFactory.openSession()
  2. val session=sessionFactory.currentSession
    使用第二种方式获得session需要在hibernate主配置文档中进行配置
 <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>
hbm常用配置
img_5e8fbdfb5639f54eae942ad776996a16.png
mapping
img_61bbac8b8b470e0c23b3936832f22bbb.png
class
img_0e6576e6af33c9f6c1153a30b32e424f.png
id
img_ec80f96a055d61495fe753969971d49c.png
主键生成策略
img_3bc60b5b195d619a52c71649dbf8950e.png
基本类型

timestamp时间戳

img_8ce787d48e210a400638ae3dec7630b8.png
image.png
img_4e546c133573971060c5ee98185f7ac7.png
长文本
//Entity
  private Blob picture;//照片,长文本
    public static final String _picture = "picture";


//hbm.xml
       <property name="picture">
            <column name="picture" sql-type="longblob" not-null="false"/>
        </property>


//Test    存
 val f= File("d:"+File.separator+"banner.png")
        val input=FileInputStream(f)
        val blob=Hibernate.getLobCreator(session).createBlob(input, input.available().toLong())
        session.save(Student(5,"熊","男", Timestamp(DateTime.now().millis) ,"上海市小二房","1887978252",blob))


//    取
 val entity = session.get(Student::class.java, 4) as Student
        //获得Blob对象
        val pic= entity.picture
        //获得照片的输入流
        val inPut=pic.getBinaryStream()
        //创建输出流
        val file = File("d:"+File.separator+"bannerNew.png")
        //获得输出流
        val outPut=FileOutputStream(file)
        //创建缓冲区
        var buff = ByteArray(inPut.available())
        inPut.read(buff)
        outPut.write(buff)
        inPut.close()
        outPut.close()

组件属性

img_ce0cc667eaa742fb6c00dc9011dd0609.png
组件属性
<?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="Entity.Student" table="t_student">
        <id name="sid">
            <column name="sid" sql-type="int(11)"/>
            <generator class="native"/>
        </id>
        <property name="name">
            <column name="name" sql-type="varchar(255)" not-null="true"/>
        </property>
        <property name="birthday">
            <column name="birthday" sql-type="timestamp" not-null="true"/>
        </property>
        <!--<property name="address">-->
            <!--<column name="address" sql-type="varchar(255)" not-null="false"/>-->
        <!--</property>-->
        <property name="picture">
            <column name="picture" sql-type="longblob" not-null="false"/>
        </property>
        <!--组件属性-->
        <component name="addressEntity" class="Entity.Address">
            <property name="postCode">
                <column name="postCode"/>
            </property>
            <property name="phone">
                <column name="phone"/>
            </property>
            <property name="address">
                <column name="address"/>
            </property>
        </component>
    </class>
</hibernate-mapping>

组件属性的所有property会在实体(Student)对应的表中生成相应的字段

img_6511fc385abcacff874a1b3e1438be42.png
table

get和load

img_55a21afc6e2a1cc952b4ed541ac2bf58.png
1
img_85ec35fd73d3d4068af48d43ec95c117.png
2
img_2d4871a80264c37d4befb62c1ea3fe3c.png
项目组成介绍
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
XML 数据可视化 Java
Kotlin 实战 | 用语法糖干掉形状 xml 文件
项目中的各种描述形状的 xml 文件多如牛毛。虽然 xml 提供了可视化效果,但不能复用,读取耗时也是它的缺点。用 Kotlin 语法糖包装一下就可以和 xml 说再见。
170 0
|
XML JavaScript Java
kotlin/java生成xml
kotlin/java生成xml
|
XML JavaScript Java
Kotlin/Java解析XMl文件的四种方式
Kotlin/Java解析XMl文件的四种方式
|
Java 关系型数据库 MySQL
Hibernate-Entity.hbm.xml实现-intellij-kotlin入门级
Hibernate-Entity.hbm.xml实现-intellij-kotlin入门级
Hibernate-Entity.hbm.xml实现-intellij-kotlin入门级
|
XML JavaScript Java
kotlin/java生成xml
四种方式 DOM方式 SAX方式 JDOM方式 DOM4J方式 Maven依赖 org.
1225 0
|
XML JavaScript Java
Kotlin/Java解析XMl文件的四种方式
des... 四种解析方式: DOM SAX JDOM DOM4J 解析目标-books.xml文件 XML深入浅出 Imooc 2014 89 Java从入门到精通 Imooc 369 1.
1361 0
|
5天前
|
XML 数据格式
小米备份descript.xml文件
小米备份descript.xml文件
12 0
|
17天前
|
XML Java 数据库连接
mybatis中在xml文件中通用查询结果列如何使用
mybatis中在xml文件中通用查询结果列如何使用
20 0
|
18天前
|
XML JavaScript 前端开发
xml文件使用及解析
xml文件使用及解析