现有环境:

Java JDK1.8

MySQL5.7

【ps】本文是很早前的基于隐马尔科夫模型进行中文词性标注的后续升级完善版,任务就是将之前的写入文件的模型参数写入MySQL


下载Hibernate  http://hibernate.org/orm/releases/

下载好后解压,将jpa和required路径下的Jar包全部复制出来到自己创建的lib文件夹

构建的lib

还有:要下载Java连接MySQL的驱动 地址 http://static.runoob.com/download/mysql-connector-java-5.1.39-bin.jar 也就是上图中最下面的那个Jar包

现在创建一个项目,并将上述lib文件夹拷贝到项目的根目录下,如果使用Eclipse就可以在项目上右键,点击最下方的属性,然后在弹窗的左边选择 Java Build Path

然后点击 Add JARs,选择lib中全部Jar包点击Apply完成Jar包的导入

1 基于 ClassName.hbm.xml  构建映射

一个类对应于一个 .hbm.xml文件,并且起名一定是类名加上.hbm.xml

还需要一个hibernate的配置文件 hibernate.cfg.xml

文件位置:

ClassName.hbm.xml要存放在与此类在同一个包下

hibernate.cfg.xml要存放在src路径下

下面是这个将参数写入数据库的详细过程:

首先我构造三个Table

table1:

table2:

table3:

解释:

table1只有一行,就是存储词表、词性表、以及共有多少个分词以及词性,由于模型的参数Pi是一个一维向量,我把它也存在了table1中,只是多分配一个字段而已

table2和table3的关键字段就是rowA和rowB,由于模型的参数A以及B是二维矩阵,所以这里设计是每一行存储矩阵对应的一行,在每一行中不同列的参数以空格分割并拼接为串

然后构建项目

由于有三个表,所以定义三个与之对应的实体类,当然要在同路径下创建三个配置文件:

对于Table1:

public class Table1 {
private int id;
private String wordList;
private String labelList;
private int wordSize;
private int labelSize;
private String pi; //Getter and Setter
}

同理,Table2和Table3就更好构建了

现在到了关键的配置文件,以Table1.hbm.xml为例

<!--在xlc包下-->
<hibernate-mapping package="hmmtrainmysql.xlc"> <!--类名为User,表名也为User-->
<class name="Table1" table="table1"> <!--主键映射,属性名为id,列名也为id-->
<id name="id" column="id">
<!--根据底层数据库主键自动增长-->
<generator class="native"/> </id> <!--非主键映射,属性和列名一一对应-->
<property name="wordList" type="text">
<!--length="16777216 表示使用LONGTEXT类型-->
<column name="wordList" length="16777216"/>
</property> <property name="labelList" type="text">
<column name="labelList" sql-type="text"/>
</property> <property name="wordSize" column="wordSize"/>
<property name="labelSize" column="labelSize"/> <property name="pi" type="text">
<column name="pi" length="16777216"/>
</property> </class>
</hibernate-mapping>

接下来就是hibernate.cfg.xml

<hibernate-configuration>
<!-- 通常,一个session-factory节点代表一个数据库 -->
<session-factory> <!-- 1. 数据库连接配置 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///parameter</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<!-- 数据库方法配置, hibernate在运行的时候,会根据不同的方言生成符合当前数据库语法的sql -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- 2. 其他相关配置 -->
<!-- 2.1 显示hibernate在运行时候执行的sql语句 由于代码中有频繁操作数据库我就把它注释掉了 -->
<!-- <property name="hibernate.show_sql">true</property> -->
<!-- 2.2 格式化sql -->
<property name="hibernate.format_sql">true</property>
<!-- 2.3 自动建表 -->
<property name="hibernate.hbm2ddl.auto">create</property> <!--3. 加载三个映射-->
<mapping resource="hmmtrainmysql/xlc/Table1.hbm.xml"/>
<mapping resource="hmmtrainmysql/xlc/Table2.hbm.xml"/>
<mapping resource="hmmtrainmysql/xlc/Table3.hbm.xml"/> </session-factory>
</hibernate-configuration>

最后是操作数据库的核心代码,这里给出如何将数据存储到数据库的

Configuration configuration = new Configuration();

        //不给参数就默认加载hibernate.cfg.xml文件,
configuration.configure();
SessionFactory factory = configuration.buildSessionFactory();
Session session = factory.openSession();
Transaction transaction = session.getTransaction();
transaction.begin(); Table1 table1 = new Table1();
table1.setLabelSize(httm.labelSize);
table1.setWordSize(httm.wordSize);
table1.setLabelList(strLabel);
table1.setWordList(strWord);
table1.setPi(strPi); session.save(table1); for (int i = 0; i < httm.labelSize; i++) {
Table2 table2 = new Table2();
Table3 table3 = new Table3();
String strA = "";
String strB = "";
for (int j = 0; j < httm.labelSize; j++) {
strA += httm.A[i][j] + " ";
}
for (int k = 0; k < httm.wordSize; k++) {
strB += httm.B[i][k] + " ";
}
System.out.println(i);
table2.setRowA(strA);
session.save(table2);
table3.setRowB(strB);
session.save(table3);
} transaction.commit();
session.close();

运行程序结束后,成功写库

Github:https://github.com/xinglicha0/Offline-Train-Hmm-To-MySQL


2 基于Java注释  构建映射

后续完善

Java采用Hibernate连接MySQL的更多相关文章

  1. Hibernate连接mysql数据库并自动创建表

    天才第一步,雀氏纸尿裤,Hibernate第一步,连接数据库. Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个 ...

  2. SpringBoot 整合 hibernate 连接 Mysql 数据库

    前一篇搭建了一个简易的 SpringBoot Web 项目,最重要的一步连接数据库执行增删改查命令! 经过了一天的摸爬滚打,终于成功返回数据! 因为原来项目使用的 SpringMVC + Hibern ...

  3. java中myeclipse连接mysql问题(java.lang.ClassNotFoundException: com.mysql.jdbc.Driver)

    java中myeclipse连接mysql问题(java.lang.ClassNotFoundException: com.mysql.jdbc.Driver) 1.往项目中添加mysql-conne ...

  4. JAVA使用jdbc连接MYSQL简单示例

    以下展示的为JAVA使用jdbc连接MYSQL简单示例: import java.sql.DriverManager; import java.sql.ResultSet; import java.s ...

  5. java用JDBC连接MySQL数据库的详细知识点

    想实现java用JDBC连接MySQL数据库.需要有几个准备工作: 1.下载Connector/J的库文件,下载Connector/J的官网地址:http://www.mysql.com/downlo ...

  6. Java Web工程连接MySQL数据库及Tomcat服务器页面中文乱码

    Java Web工程连接MySQL数据库 一. 准备工作 1.下载连接MySQL数据库的JDBC (可以去官网下,也可以去百度云找) 2.将下载的jar文件复制到Tomcat的lib目录下 3.新建一 ...

  7. Hibernate 连接MySQL/SQLServer/Oracle数据库的hibernate.cfg.xml文件

    用Hibernate配置连接数据库可以方便我们对POJO的操作,节省了很多时间和代码.下面就分别说明连接不同数据库需要在hibernate.cfg.xml做的配置. 需要数据库驱动包可以点击这里下载: ...

  8. ava基础MySQL存储过程 Java基础 JDBC连接MySQL数据库

    1.MySQL存储过程   1.1.什么是存储过程 带有逻辑的sql语句:带有流程控制语句(if  while)等等 的sql语句   1.2.存储过程的特点 1)执行效率非常快,存储过程是数据库的服 ...

  9. Hibernate连接mysql数据库的配置

    <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hi ...

随机推荐

  1. Android学习笔记——Bluetooth的使用

    蓝牙应该是现在每一部智能手机的标配了.想当年在山寨机横行的年代里,蓝牙都可以做为一个卖点~~~ 废话不多说了,进入正题: 使用蓝牙功能是需要权限的,关于蓝牙的权限也就两个: <uses-perm ...

  2. 手动创建binary log files和手动编辑binary log index file会有什么影响

    基本环境:官方社区版MySQL 5.7.19 一.了解Binary Log结构 1.1.High-Level Binary Log Structure and Contents • Binlog包括b ...

  3. mysql gtid 第一篇

    GTID1 简介   就是全局事务ID(global transaction identifier )2 构成   uuid+transaction_id 3 格式  7a07cd08-ac1b-11 ...

  4. [转]OpenBLAS项目与矩阵乘法优化

    课程内容 OpenBLAS项目介绍 矩阵乘法优化算法 一步步调优实现 以下为公开课完整视频,共64分钟: 以下为公开课内容的文字及 PPT 整理. 雷锋网的朋友们大家好,我是张先轶,今天主要介绍一下我 ...

  5. Struts自定义拦截器&拦截器工作原理

    0.拦截器的调用原理: 拦截器是一个继承了序列化接口的普通接口.其工作原理是讲需要被拦截的对象作为参数传到intercept()方法内,在方法内部对此对象进行处理之后再执行原方法.intercept( ...

  6. Java用System读取系统相关信息、环境变量——(六)

    package Java_Test; public class System1 { public static void main(String[] args) { // TODO Auto-gene ...

  7. [Fedora 20] 设置Terminal快捷键 + 设置桌面快捷方式 + Terminal透明解决方案

    一.设置Terminal快捷键 刚安装Fedora的时候,习惯性的按Ctrl+Alt+T可是终端怎么都不出来,这才意识到Fedora和Ubuntu是不一样的,于是自己设置快捷键 1.进入All set ...

  8. freeRTOS中文实用教程5--内存管理

    1.前言 不同的嵌入式系统具有不同的内存配置和时间要求.所以单一的内存分配算法只可能适合部分应用程序. FreeRTOS 将内存分配作为可移植层面(相对于基本的内核代码部分而言).这使得不同的应用程序 ...

  9. memcmp与strncmp函数【转】

    c中strncmp与memcmp的区别 函数:int memcmp (const void *a1, const void *a2, size_t size)        函数memcmp用于比较字 ...

  10. 通过全备+relaylog同步恢复被drop的库或表

    MySQL 中drop 等高危误操作后恢复方法 实验目的: 本次实验以恢复drop操作为例,使用不同方法进行误操作的数据恢复. 方法: 利用master同步 伪master+Binlog+同步 利用b ...