Hibernate常用的Java数据类型映射到mysql和Oracle

  研究了常用的Java基本数据类型在mysql和oracle数据库的映射类型。这里使用的是包装类型做研究,一般在hibernate声明的时候最好不要用基本类型,因为数据库中的null空数据有可能映射为基本类型的时候会报错,但是映射到包装类型的时候值为null,不会报错。

1.常见数据类型在Mysql数据库的映射

实体:

package cn.qlq.domain;import java.sql.Time;
import java.util.Date;public class TestType {private Long id;private Integer age;private Character sex;private Boolean isPerson;private Date birth;private Time birthTime;private String name;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Character getSex() {return sex;}public void setSex(Character sex) {this.sex = sex;}public Boolean getIsPerson() {return isPerson;}public void setIsPerson(Boolean isPerson) {this.isPerson = isPerson;}public Date getBirth() {return birth;}public void setBirth(Date birth) {this.birth = birth;}public Time getBirthTime() {return birthTime;}public void setBirthTime(Time birthTime) {this.birthTime = birthTime;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "TestType [id=" + id + ", age=" + age + ", sex=" + sex + ", isPerson=" + isPerson + ", birth=" + birth+ ", birthTime=" + birthTime + ", name=" + name + "]";}}

 

 

 

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"><!-- 配置表与实体对象的关系 --><!-- package属性:填写一个包名.在元素内部凡是需要书写完整类名的属性,可以直接写简答类名了. -->
<hibernate-mapping package="cn.qlq.domain" ><!-- class元素: 配置实体与表的对应关系的name: 完整类名table:数据库表名--><class name="TestType" table="testtype" ><!-- id元素:配置主键映射的属性name: 填写主键对应属性名column(可选): 填写表中的主键列名.默认值:列名会默认使用属性名type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.每个类型有三种填法: java类型|hibernate类型|数据库类型not-null(可选):配置该属性(列)是否不能为空. 默认值:falselength(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度--><id name="id"  ><!-- generator:主键生成策略 --><!--identity : 主键自增.由数据库来维护主键值.录入时不需要指定主键.  --><generator class="native"></generator></id><!-- property元素:除id之外的普通属性映射name: 填写属性名column(可选): 填写列名type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.每个类型有三种填法: java类型|hibernate类型|数据库类型not-null(可选):配置该属性(列)是否不能为空. 默认值:falselength(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度--><property name="age"/><property name="sex"/><property name="isPerson"/><property name="birth"/><property name="birthTime"/><property name="name"/></class>
</hibernate-mapping>

 

 

Mysql映射的类型:

mysql> desc testtype;
+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| id        | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| age       | int(11)      | YES  |     | NULL    |                |
| sex       | char(1)      | YES  |     | NULL    |                |
| isPerson  | bit(1)       | YES  |     | NULL    |                |
| birth     | datetime     | YES  |     | NULL    |                |
| birthTime | time         | YES  |     | NULL    |                |
| name      | varchar(255) | YES  |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+
7 rows in set (0.01 sec)

 

 

结果:

Long------------------------------bigint

Integer-----------------------    int

Character---------------------  char

Bolean---------------------------bit

java.util.Date;--------------datetime

java.sql.Time;------------------time

String----------------------------varchar(255)

 

  • 插入数据:
    public static void main(String[] args) {//3.3以及之前的版本构建会话工厂对象
//        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();//5.0之后获取SessionFactory//创建服务注册对象ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();//创建会话工厂对象SessionFactory  sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();//获取session对象Session session = sessionFactory.openSession();//开启事务Transaction tx = session.beginTransaction();//保存对象TestType t1 = new TestType();TestType t2 = new TestType();t1.setAge(22);t2.setAge(23);t1.setName("zhangsan");t2.setName("zhangsanhaha");t1.setSex('1');t2.setSex('2');t1.setBirth(new Date());t2.setBirth(new Date());t1.setIsPerson(true);t2.setIsPerson(false);session.save(t1);session.save(t2);tx.commit();//关闭流
        session.close();sessionFactory.close();}

 

 

结果:

mysql> select * from testtype;
+----+------+------+----------+---------------------+-----------+--------------+
| id | age  | sex  | isPerson | birth               | birthTime | name         |
+----+------+------+----------+---------------------+-----------+--------------+
|  1 |   22 | 1    |         | 2018-08-10 22:39:19 | NULL      | zhangsan     |
|  2 |   23 | 2    |          | 2018-08-10 22:39:19 | NULL      | zhangsanhaha |
+----+------+------+----------+---------------------+-----------+--------------+
2 rows in set (0.00 sec)

 

 

 

  • 查询

(1)基本查询:

    @Test// HQL查询所有数据public void fun1() {// 1 获得sessionSession session = HibernateUtil.openSession();// 2.书写HQL语句
//        String hql = "from cn.qlq.domain.Customer";// from 类名全路径String hql = "from TestType";// 如果整个项目中只有这一个类名可以直接写名字// 3.根据hql创建查询对象Query query = session.createQuery(hql);// 4.根据查询对象获取查询结果List<TestType> list = query.list();System.out.println(list);}

 

结果:

[TestType [id=1, age=22, sex=1, isPerson=true, birth=2018-08-10 22:39:19.0, birthTime=null, name=zhangsan], TestType [id=2, age=23, sex=2, isPerson=false, birth=2018-08-10 22:39:19.0, birthTime=null, name=zhangsanhaha]]

 

(2)条件查询:----针对上面的类型进行条件查询

    @Test// HQL查询所有数据public void fun1() {// 1 获得sessionSession session = HibernateUtil.openSession();// 2.书写HQL语句
//        String hql = "from cn.qlq.domain.Customer";// from 类名全路径String hql = "from TestType where age = 22 and sex = 1 and isPerson = true and name = 'zhangsan' and birth like '2018-08-10%'";// 如果整个项目中只有这一个类名可以直接写名字// 3.根据hql创建查询对象Query query = session.createQuery(hql);// 4.根据查询对象获取查询结果List<TestType> list = query.list();System.out.println(list);}

 

 

结果:

    selecttesttype0_.id as id1_0_,testtype0_.age as age2_0_,testtype0_.sex as sex3_0_,testtype0_.isPerson as isPerson4_0_,testtype0_.birth as birth5_0_,testtype0_.birthTime as birthTim6_0_,testtype0_.name as name7_0_ fromtesttype testtype0_ wheretesttype0_.age=22 and testtype0_.sex=1 and testtype0_.isPerson=1 and testtype0_.name='zhangsan' and (testtype0_.birth like '2018-08-10%')
[TestType [id=1, age=22, sex=1, isPerson=true, birth=2018-08-10 22:39:19.0, birthTime=null, name=zhangsan]]

 

 

补充:Mysql的boolean类型也可以用true_false表示,数据类型会变为char(1),存的是T和F:

     <property name="isPerson" type="true_false"/>

 

 

2.常见数据类型在Oracle数据库的映射

Oracle映射上面直接映射会报错,解决办法:  将boolean映射为hibernate的true_false  (原理都是在数据库存T或者F,F为false,T为true)

第一种:   boolean映射为yes_no

<?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"><!-- 配置表与实体对象的关系 --><!-- package属性:填写一个包名.在元素内部凡是需要书写完整类名的属性,可以直接写简答类名了. -->
<hibernate-mapping package="cn.qlq.domain" ><!-- class元素: 配置实体与表的对应关系的name: 完整类名table:数据库表名--><class name="TestType" table="testtype" ><!-- id元素:配置主键映射的属性name: 填写主键对应属性名column(可选): 填写表中的主键列名.默认值:列名会默认使用属性名type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.每个类型有三种填法: java类型|hibernate类型|数据库类型not-null(可选):配置该属性(列)是否不能为空. 默认值:falselength(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度--><id name="id"  ><!-- generator:主键生成策略 --><!--identity : 主键自增.由数据库来维护主键值.录入时不需要指定主键.  --><generator class="native"></generator></id><!-- property元素:除id之外的普通属性映射name: 填写属性名column(可选): 填写列名type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.每个类型有三种填法: java类型|hibernate类型|数据库类型not-null(可选):配置该属性(列)是否不能为空. 默认值:falselength(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度--><property name="age"/><property name="sex"/>  <property name="isPerson" type="true_false"/><property name="birth"/><property name="birthTime"/><property name="name"/></class>
</hibernate-mapping>

 

 

结果:

 

 

总结:

Long------------------------------number

Integer-----------------------    number

Character---------------------  char

Bolean---------------------------char

java.util.Date;--------------date

java.sql.Time;------------------date

String----------------------------varchar(255)

 

 

添加数据:

package cn.qlq.util;import java.util.Date;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.service.ServiceRegistry;import cn.qlq.domain.TestType;public class TestSave {public static void main(String[] args) {//3.3以及之前的版本构建会话工厂对象
//        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();//5.0之后获取SessionFactory//创建服务注册对象ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();//创建会话工厂对象SessionFactory  sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();//获取session对象Session session = sessionFactory.openSession();//开启事务Transaction tx = session.beginTransaction();//保存对象TestType t1 = new TestType();TestType t2 = new TestType();t1.setAge(22);t2.setAge(23);t1.setName("zhangsan");t2.setName("zhangsanhaha");t1.setSex('1');t2.setSex('2');t1.setBirth(new Date());t2.setBirth(new Date());t1.setIsPerson(true);t2.setIsPerson(false);session.save(t1);session.save(t2);tx.commit();//关闭流
        session.close();sessionFactory.close();} }

 

结果:

 

 

 

  • 查询所有:
    @Test// HQL查询所有数据public void fun1() {// 1 获得sessionSession session = HibernateUtil.openSession();// 2.书写HQL语句String hql = "from cn.qlq.domain.TestType";// from 类名全路径// 3.根据hql创建查询对象Query query = session.createQuery(hql);// 4.根据查询对象获取查询结果List<TestType> list = query.list();System.out.println(list);}

 

结果:

Hibernate: selecttesttype0_.id as id1_0_,testtype0_.age as age2_0_,testtype0_.sex as sex3_0_,testtype0_.isPerson as isPerson4_0_,testtype0_.birth as birth5_0_,testtype0_.birthTime as birthTim6_0_,testtype0_.name as name7_0_ fromtesttype testtype0_
[TestType [id=15, age=22, sex=1, isPerson=true, birth=2018-08-10 23:19:33.0, birthTime=null, name=zhangsan], TestType [id=16, age=23, sex=2, isPerson=false, birth=2018-08-10 23:19:33.0, birthTime=null, name=zhangsanhaha]]

 

 

 

 

 

  •  按上面的条件查询:
    @Test// HQL查询所有数据public void fun1() {// 1 获得sessionSession session = HibernateUtil.openSession();// 2.书写HQL语句String hql = "from TestType where age = 22 and sex = 1 and isPerson = true and name = 'zhangsan'";// 如果整个项目中只有这一个类名可以直接写名字// 3.根据hql创建查询对象Query query = session.createQuery(hql);// 4.根据查询对象获取查询结果List<TestType> list = query.list();System.out.println(list);}

 

结果:  (日期不能直接like了)

Hibernate: selecttesttype0_.id as id1_0_,testtype0_.age as age2_0_,testtype0_.sex as sex3_0_,testtype0_.isPerson as isPerson4_0_,testtype0_.birth as birth5_0_,testtype0_.birthTime as birthTim6_0_,testtype0_.name as name7_0_ fromtesttype testtype0_ wheretesttype0_.age=22 and testtype0_.sex=1 and testtype0_.isPerson='T' and testtype0_.name='zhangsan'
[TestType [id=15, age=22, sex=1, isPerson=true, birth=2018-08-10 23:19:33.0, birthTime=null, name=zhangsan]]

 

 

 总结: 

  对于mysql和oracle的boolean的通用类型就是true_false,hibernate会将字段类型设置为char(1),然后true的时候存T,false的时候存F。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/qlqwjy/p/9457988.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570553.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Front End Accessibility Development Guide

Header Carefully write heading(h1,h2,h3) for screen reader. Alternative Image Provide alt text for both essential and functional images. Provide empty alt text (alt””) for decorative images. Don’t repeat the alt text of an image in the adjacent text. De…

详细的Windows下安装 binwalk

1. https://github.com/ReFirmLabs/binwalk到这里下载binwalk&#xff0c;下载后解压。 2. 找到下载后的文件夹&#xff0c; 在这里要进行安装步骤&#xff0c;一边按着shift&#xff0c;一边按着鼠标右键&#xff0c;点击在此处打开命令窗口。 输入python setup.py install 安…

各大浏览器清除缓存(cache)详细步骤

1. Firefox 1.1 选择“Options”&#xff1a; 1.2 选择“Advanced”->“Network”->“Cached Web Content”&#xff0c;点击“Clear Now”&#xff1a; 2. Chrome 2.1 选择“Settings”&#xff1a; 2.2 点击页面底部“Show advanced settings”&#xff1a; 2.3 选择…

使用 angular directive 和 json 数据的 D3 带标签 donut chart示例

利用angular resource加载priorityData.json中的json数据&#xff0c;结合D3画出甜甜圈图。运行index.html结果如图所示&#xff1a; priorityData.json中json数据如下&#xff1a; { "priority":{ "Blocker":12,"Critical":18,"Major&qu…

第一个express app 详细步骤

1. 全局安装node.js&#xff08;请参考网上教程&#xff09;。 如何判断是否全局安装成功&#xff1f;打开命令行终端&#xff0c;进入任意文件夹&#xff0c;输入node&#xff0c;不报错。 2. 安装express 2.1 创建app文件夹。并在此文件夹下创建文件package.json如下&#…

Angularjs Nodejs Grunt 一个例子

做了一个简单的示例&#xff0c;目的是记录环境配置以及这套框架的结构流程。 1.配置环境 默认nodejs已安装。 安装以下模块&#xff1a;express&#xff08;nodejs框架&#xff09;,grunt&#xff08;javascript task runner&#xff09;,grunt-contrib-watch&#xff08;g…

PHP 常用设计模式 (转载)

1.单例模式 单例模式顾名思义&#xff0c;就是只有一个实例。作为对象的创建模式&#xff0c; 单例模式确保某一个类只有一个实例&#xff0c;而且自行实例化并向整个系统提供这个实例。 单例模式的要点有三个&#xff1a; 一是某个类只能有一个实例&#xff1b;二是它必须自行…

Angularjs切换网站配色模式简单示例1(切换css文件)

一个网站可以有多种配色方案&#xff0c;例如正常模式&#xff0c;夜间模式等。 简单示例一个通过点击按钮&#xff0c;更换css文件&#xff0c;达到切换配色模式的angularjs 小app。 主要文件有三个&#xff1a;index.html&#xff08;主文件&#xff09;&#xff0c;white.…

Angularjs切换网站配色模式简单示例2(切换body元素的class)

一个网站可以有多种配色方案&#xff0c;例如正常模式&#xff0c;夜间模式等。 简单示例一个通过点击toggle 按钮&#xff0c;切换body元素的class&#xff0c;达到切换配色模式的angularjs小app。 1. Live范例可以在以下Codepen网址查看&#xff1a; http://codepen.io/Chris…

Eclipse中Maven项目出现红色感叹号问题

在Eclipse环境下&#xff0c;有时我们会遇到Maven项目出现红色感叹号的情形&#xff0c;而一旦项目出现感叹号&#xff0c;Eclipse便无法帮我们进行自动编译等工作&#xff0c;尽管有时候不会影响运行&#xff0c;但每次只能手动启动Maven重新编译&#xff0c;非常不便&#xf…

GitHub 配置及简单使用

一. 初始化 1. 初始化 git 目录 终端中进入到项目文件夹&#xff0c;然后输入以下命令。 git init 命令执行后&#xff0c;文件夹中会多一个.git 文件夹 2. 设置本机关联 GItHub 的用户名和邮箱 git config --global user.name "<username>" git conf…

Javascript 处理 JSON 数据 示例

最近做了一个 MEAN stack 的 app 。后台用 NodeJS 从 Jira rest api 获得JSON数据并做处理&#xff0c;然后前端用 AngularJS Ajax call 获得处理后的 JSON 数据&#xff0c;显示到 App 上。处理了很多 JSON 数据&#xff0c;决定编一个例子&#xff0c;写一个总结。 JSON 数据…

第一个 Rails App 从安装到创建(windows版本)

1. 在以下网址下载并运行 Rails 安装包&#xff1a; 点击打开链接 2. 检查 ruby&#xff0c;sqlite 和 rails 是否安装成功 2.1 查看 ruby 版本&#xff0c; 在命令行中输入&#xff1a; ruby -v 运行截图如下&#xff1a; 2.2 查看 sqlite 版本&#xff0c;在命令行中输入&…

Ruby Variable Scope 简单讲解

Name Begins WithVariable Scope$A global variableAn instance variable[a-z] or _A local variable[A-Z]A constantA class variable 以一个简单例子示例各种变量的区别&#xff1a;class Female# ConstantSEX female# Class variable: shared among all instances of this …

【Luogu P2781】 传教

这题是可以用线段树做的。虽然$n\leq 10^9$可以发现&#xff0c;真正需要用到的节点很少&#xff0c;故动态开点&#xff0c;只有需要用到的时候才新建节点。这里我在下放标记的时候新建节点&#xff0c;因为每操作/查询一个节点都需要先下放标记。时间复杂度$O(m\log n)$&…

Rails用DELETE method提交表单讲解

Sometimes we need to submit form using methods other than ‘post’, in this example, it’s ‘delete’. For example, I wanted to delete a user when a form is submitted with the user name and ‘delete’ method. 1. I created the route like this: delete ‘test…

使用DreamHost当GoDaddy域名的服务器 步骤

1. 在GoDaddy管理员页面中改变DNS设置&#xff0c;指向DreamHost Name servers&#xff1a; 进入Domain details page: 目前在 SETTINGS -> Nameservers. 数值还是默认值: NS11.DOMAINCONTROL.COM NS12.DOMAINCONTROL.COM 我们需要将它修改为 DreamHost nameservers: …

有用的 Google Analytics Chrome 插件推荐

1.Google Analytics Debugger Debbuger 会列出所有执行的命令以及传过去的参数。 例如&#xff0c;常见的命令有&#xff1a; 初始化 Google Analytics&#xff0c; 传送页面访问 和传送事件。 https://chrome.google.com/webstore/detail/google-analytics-debugger/jnkmf…

项目计划定制:项目计划划分与产品项目推进的有机结合

目录&#xff1a; 第一章&#xff1a;导语第二章&#xff1a;需求采集部分的一些要点第三章&#xff1a;项目中一些需要明确的内容第四章&#xff1a;关于成本管理部分第一章&#xff1a;导语 那么什么叫项目&#xff0c;项目计划和项目管理&#xff1f; 项目管理简称为PM&…

Rails 使用 Google Analytics 示例

1. 创建 _google_analytics.html.erb view: <span style"font-size:18px;"><!-- Google Analytics -->window.gawindow.ga||function(){(ga.qga.q||[]).push(arguments)};ga.lnew Date;// Create tracker.ga(create, <% ENV[GOOGLE_ANALYTICS_TRACKI…