热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Hibernate如何连接MariaDB

1.下载安装JBossToolseclipse的插件http://www.jboss.org/tools/download/也可以只安装Updatesite(includingsources)bundleofallHibernateTools4.1.0.Final78MB2013-07-22updatezipKeple

1. 下载安装JBossTools eclipse的插件

http://www.jboss.org/tools/download/ 也可以只安装

Update site (including sources) bundle of all Hibernate Tools
4.1.0.Final
78 MB
2013-07-22
update zip

Kepler版本 http://www.jboss.org/tools/download/stable/4_1.html

安装过程中eclipse要联网安装其他的东西,很慢。

2. 安装MariaDB

 https://mariadb.org/ 下载速度比较慢,直接从国内的网站下载最新X64的 MariaDB 10.0.4 安装过程和MySQL一样,用户名和密码记住

https://downloads.mariadb.org/ 向下找

MariaDB Client Library for Java Applications 1.1 Series 目前版本为 MariaDB Client Library for Java Applications 1.1.5 Stable mariadb-java-client-1.1.5.tar.gz

下载MySQL的Java数据库连接jar包 http://dev.mysql.com/downloads/connector/j/#downloads 选择平台独立的版本即可Platform Independent (Architecture Independent)

3. 使用MariaDB自带的HeidiSQL新建数据库

-- 导出 gamestore 的数据库结构
DROP DATABASE IF EXISTS `gamestore`;
CREATE DATABASE IF NOT EXISTS `gamestore` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `gamestore`;
-- 导出  表 gamestore.company 结构
DROP TABLE IF EXISTS `company`;
CREATE TABLE IF NOT EXISTS `company` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='game producer';
-- 正在导出表  gamestore.company 的数据:~4 rows (大约)
/*!40000 ALTER TABLE `company` DISABLE KEYS */;
INSERT INTO `company` (`id`, `name`) VALUES
        (1, 'EA'),
        (2, 'ActiveVision'),
        (3, 'North RockStar'),
        (4, 'TakeTwo');
/*!40000 ALTER TABLE `company` ENABLE KEYS */;
-- 导出  表 gamestore.game 结构
DROP TABLE IF EXISTS `game`;
CREATE TABLE IF NOT EXISTS `game` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `type` int(10) unsigned DEFAULT '0',
  `company_id` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FK_game_company` (`company_id`),
  CONSTRAINT `FK_game_company` FOREIGN KEY (`company_id`) REFERENCES `company` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-- 正在导出表  gamestore.game 的数据:~4 rows (大约)
/*!40000 ALTER TABLE `game` DISABLE KEYS */;
INSERT INTO `game` (`id`, `name`, `type`, `company_id`) VALUES
        (1, 'BattleField 4', NULL, 1),
        (2, 'Call of Duty 10', NULL, 2),
        (3, 'FIFA14', NULL, 1),
        (4, 'GTA5', NULL, 3);

4. 新建Eclipse工程

在工程Java Build Path中加入Hibernate required的必备包,以及mariadb-java-client-1.1.5.jar和mysql-connector-java-5.1.26-bin.jar两个包

打开Eclipse的 DataSource Explorer视图, 新建一个Connection Profile, 选择MySQL类型,驱动选择MySQL的驱动,此时要找到工程中添加的mysql-connector-java-5.1.26-bin.jar 用来和数据库进行连接,

URL:jdbc:mysql://localhost:3306/gamestore

数据库:gamestore

5. 新建Hibernate配置文件

在src目录下,在新建向导的Hibernate目录下找到Hibernate Configuration File(cfg.xml),按照向导使用默认的名称即可,默认情况下Hibernate在初始化Configuration对象时,会在程序包所在的根目录下找名为Hibernate.cfg.xml文件作为配置文件,否则需要在configure()方法中设置配置文件。选择Get Values from Connection 后选择刚才新建的Connection Profile,此时会导入刚才的默认是指,不过是针对MySQL数据库的,之后在该配置基础上改为MariaDB的配置即可。需要注意插件自动生成的xml文件的DTD是否是正确的,建议从Hibernate官方例子中拷贝最新的模板进行修改。


        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">



  org.mariadb.jdbc.Driver
  123456
  jdbc:mariadb://localhost:3306/gamestore
  root
  org.hibernate.dialect.MySQLDialect
  20
  true
 
 

6. 新建Hibernate Console Configuration

同创建配置文件一样,(可以在创建配置文件的最后一步,勾选创建Hibernate Console Configuration,就不用在进入新建文件向导了),当然选择Hibernate Core 4.0,Database connection 同样选择刚才的connection profile,设置Configuration file为刚才创建的hibernate.cfg.xml

7. 新建Hibernate Reverse Engineer File(reveng.xml)

选择刚才新建的Console Configuration 后,点击刷新就可以看到数据库和下面的表格,选择需要创建的POJO对象的表格finish。在eclipse中打开hibernante.reveng.xml文件后,有可视化编辑标签页。其中:

Type Mappings:用来将数据库数据类型和Hibernate的类型进行映射,例如可以把JDBC的INTEGER映射为Hibernate的integer。主键id最好映射为integer,这样java会生成Integer类型的id定义,通过判断id是否为null方便判断一个对象是否是数据库中获取的对象。

Table Filters:用来选择那些表格会映射

Table & Columns : 设置表格字段的映射规则

其实直接找一份模板,在源码的基础上修改更直接,使用可视化工具编辑主键和外键不够灵活。




            not-null="true">
   


   


   

       
   

   


   
       
       
   

   
   
   

8. 生成POJO和Mappings

选择eclipse的window下Customize Perspective ,在Command Groups 中勾选Hibernate Code Generation。

打开Hibernate Code Generation Configurations,选择刚才创建的Console Configuration,输出目录为工程src目录,包目录为希望放置的java包目录,以及刚才的Hibernate.reveng.xml文件,执行run即可。这样会在指定的包目录下创建对应的JavaBean规范的类和hbm.xml文件。这些文件如果有不满足需要的可以手动修改。

package com.aquar.game.database;
// Generated Nov 3, 2013 7:49:14 PM by Hibernate Tools 4.0.0
import java.util.HashSet;
import java.util.Set;
/**
 * Company generated by hbm2java
 */
public class Company implements java.io.Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 1544255372285741722L;
    private Integer id;
    private String name;
    private Set games = new HashSet(0);
    public Company() {
    }
    public Company(Integer id, String name) {
        this.id = id;
        this.name = name;
    }
    public Company(Integer id, String name, Set games) {
        this.id = id;
        this.name = name;
        this.games = games;
    }
    public Integer getId() {
        return this.id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Set getGames() {
        return this.games;
    }
    public void setGames(Set games) {
        this.games = games;
    }
}

对应的hmb.xml


        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
       
   
       


       

       

       

       




       

   

简单测试

数据库操作Handler

package com.aquar.game.dataserver;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.LockOptions;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistryBuilder;
public class DataHandler {
    private static DataHandler instance;
    private SessionFactory sessionFactory;
    private DataHandler() {
        // TODO Auto-generated constructor stub
    }
    public static DataHandler getInstance() {
        if (instance == null) {
            instance = new DataHandler();
        }
        return instance;
    }
    public void init() {
        // configures settings from hibernate.cfg.xml
        Configuration cfg = new Configuration();
        cfg.configure();
        // A SessionFactory is set up once for an application
        sessionFactory = cfg.buildSessionFactory(new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry());
    }
    public  boolean save(List objs) {
        boolean ret = false;
        Session session = sessionFactory.openSession();
        try {
            session.beginTransaction();
            int count = 0;
            for (T obj : objs) {
                session.save(obj);
                count++;
                if (count == 20) { //20, same as the JDBC batch size
                    //flush a batch of inserts and release memory:
                    session.flush();
                    session.clear();
                    count = 0;
                }
            }
            session.getTransaction().commit();
            ret = true;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }
        return ret;
    }
    @SuppressWarnings("unchecked")
    public  List query(T obj) {
        List result = null;
        Session session = sessionFactory.openSession();
        try {
            session.beginTransaction();
            Criteria crit = session.createCriteria(obj.getClass());
            result = crit.list();
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }
        return result;
    }
    public  T load(T t) {
        Session session = sessionFactory.openSession();
        session.buildLockRequest(LockOptions.NONE).lock(t);
        return t;
    }
    public  boolean delete(T obj) {
        boolean ret = false;
        Session session = sessionFactory.openSession();
        try {
            session.beginTransaction();
            session.delete(obj);
            session.getTransaction().commit();
            ret = true;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }
        return ret;
    }
    public void release() {
        if (sessionFactory != null) {
            sessionFactory.close();
        }
    }
}

初始化注意要用

public void init() {
        // configures settings from hibernate.cfg.xml
        Configuration cfg = new Configuration();
        cfg.configure(); //这个必须有,否则不会去获取cfg.xml中的属性配置,官方简单教程中的例子方法不能使用。
        // A SessionFactory is set up once for an application
        sessiOnFactory= cfg.buildSessionFactory(new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry());
    }

JUnit测试用例,需要依赖JUnit4

package com.aquar.game.test;
import java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.aquar.game.database.Company;
import com.aquar.game.database.Game;
import com.aquar.game.dataserver.DataHandler;
public class DataHandlerTest extends TestCase {
    @Before
    public void setUp() throws Exception {
        DataHandler.getInstance().init();
    }
    @After
    public void tearDown() throws Exception {
        DataHandler.getInstance().release();
    }
    @Test
    public void testSave() {
        boolean ret = false;
        List games = new ArrayList();
        String[] names = {"BattleField 4", "Call of Duty 10", "FIFA14", "GTA5"};
        for (String name : names) {
            Game game = new Game();
            game.setName(name);
            games.add(game);
        }
        ret = DataHandler.getInstance().save(games);
        assertTrue(ret);
    }
    @Test
    public void testQuery() {
        List list = DataHandler.getInstance().query(new Company());
        assertNotNull(list);
        assertFalse(list.isEmpty());
        assertTrue(true);
    }
}

source code on github:GameStore


推荐阅读
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 本文介绍了Java语言开发的远程教学系统,包括源代码、MySQL数据库配置以及相关文档,适用于计算机专业的毕业设计。系统支持远程调试,采用B/S架构,适合现代教育需求。 ... [详细]
  • MySQL 8.0 MGR 自动化部署与配置:DBA 和开源工具的高效解决方案
    MySQL 8.0 MGR 自动化部署与配置:DBA 和开源工具的高效解决方案 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • Java EE CDI:解决依赖关系冲突的实例
    在本教程中,我们将探讨如何在Java EE的CDI(上下文和依赖注入)框架中有效解决依赖关系的冲突问题。通过学习如何使用限定符,您将能够为应用程序的不同客户端提供多种接口实现,并确保每个客户端都能正确调用其所需的实现。 ... [详细]
  • Gradle复合构建详解
    自Gradle 3.3起,复合构建功能得以实现,这是一种能够整合其他独立构建的高级构建模式。本文将详细介绍复合构建与多项目构建的区别,以及如何在实际项目中应用复合构建。 ... [详细]
  • Eclipse 中 Maven 的基础配置指南
    本文详细介绍了如何在 Eclipse 环境中配置 Maven,包括环境变量的设置、Maven 插件的安装与配置等关键步骤,旨在帮助开发者顺利搭建开发环境。 ... [详细]
  • 本文档详细介绍了2017年8月31日关于MySQL数据库备份与恢复的教学内容,包括MySQL日志功能、备份策略、备份工具及实战演练。 ... [详细]
  • 华为云openEuler环境下的Web应用部署实践
    本文详细记录了在华为云openEuler系统上进行Web应用部署的具体步骤,包括配置yum源、安装Apache、MariaDB、PHP及其相关组件,并完成WordPress的安装与配置过程。 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • 在关系型数据库中,数据约束是指在向数据表中插入数据时必须遵循的限制条件。在MySQL和MariaDB中,常见的数据约束包括主键约束、唯一键约束、外键约束以及非空约束等。这些约束确保了数据的完整性和一致性,是数据库管理中的重要组成部分。通过合理设置和使用这些约束,可以有效防止数据冗余和错误,提升数据库的可靠性和性能。 ... [详细]
  • 在重新安装Ubuntu并配置Django和PyCharm后,忘记测试MySQL连接,导致在后续配置过程中遇到错误:ERROR 2003 (HY000) - 无法连接到本地服务器 ‘127.0.0.1’ (111)。本文将详细介绍该错误的原因及解决步骤,帮助用户快速恢复MySQL服务的正常运行。我们将从检查网络配置、验证MySQL服务状态、配置防火墙规则等方面入手,提供全面的故障排除指南。 ... [详细]
  • C#设计模式学习笔记:观察者模式解析
    本文将探讨观察者模式的基本概念、应用场景及其在C#中的实现方法。通过借鉴《Head First Design Patterns》和维基百科等资源,详细介绍该模式的工作原理,并提供具体代码示例。 ... [详细]
  • 本文详细介绍如何使用CSS自定义HTML5视频播放器的样式,涵盖常见属性及跨浏览器兼容性问题。发布时间:2020-09-14 14:46:29;来源:亿速云;阅读量:58;作者:小新。 ... [详细]
  • 本文详细介绍如何在IntelliJ IDEA 14中打包Android应用APK文件,并提供查询SHA1值的具体步骤。 ... [详细]
author-avatar
听海的音_104
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有