日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時間:2025/3/15 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate常用的Java数据类型映射到mysql和Oracle 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  研究了常用的Java基本數(shù)據(jù)類型在mysql和oracle數(shù)據(jù)庫的映射類型。這里使用的是包裝類型做研究,一般在hibernate聲明的時候最好不要用基本類型,因為數(shù)據(jù)庫中的null空數(shù)據(jù)有可能映射為基本類型的時候會報錯,但是映射到包裝類型的時候值為null,不會報錯。

1.常見數(shù)據(jù)類型在Mysql數(shù)據(jù)庫的映射

實體:

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"><!-- 配置表與實體對象的關(guān)系 --><!-- package屬性:填寫一個包名.在元素內(nèi)部凡是需要書寫完整類名的屬性,可以直接寫簡答類名了. --> <hibernate-mapping package="cn.qlq.domain" ><!-- class元素: 配置實體與表的對應(yīng)關(guān)系的name: 完整類名table:數(shù)據(jù)庫表名--><class name="TestType" table="testtype" ><!-- id元素:配置主鍵映射的屬性name: 填寫主鍵對應(yīng)屬性名column(可選): 填寫表中的主鍵列名.默認值:列名會默認使用屬性名type(可選):填寫列(屬性)的類型.hibernate會自動檢測實體的屬性類型.每個類型有三種填法: java類型|hibernate類型|數(shù)據(jù)庫類型not-null(可選):配置該屬性(列)是否不能為空. 默認值:falselength(可選):配置數(shù)據(jù)庫中列的長度. 默認值:使用數(shù)據(jù)庫類型的最大長度--><id name="id" ><!-- generator:主鍵生成策略 --><!--identity : 主鍵自增.由數(shù)據(jù)庫來維護主鍵值.錄入時不需要指定主鍵. --><generator class="native"></generator></id><!-- property元素:除id之外的普通屬性映射name: 填寫屬性名column(可選): 填寫列名type(可選):填寫列(屬性)的類型.hibernate會自動檢測實體的屬性類型.每個類型有三種填法: java類型|hibernate類型|數(shù)據(jù)庫類型not-null(可選):配置該屬性(列)是否不能為空. 默認值:falselength(可選):配置數(shù)據(jù)庫中列的長度. 默認值:使用數(shù)據(jù)庫類型的最大長度--><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)

?

?

結(jié)果:

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

Integer-----------------------? ? int

Character---------------------? char

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

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

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

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

?

  • 插入數(shù)據(jù):
public static void main(String[] args) {//3.3以及之前的版本構(gòu)建會話工廠對象 // SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();//5.0之后獲取SessionFactory//創(chuàng)建服務(wù)注冊對象ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();//創(chuàng)建會話工廠對象SessionFactory sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();//獲取session對象Session session = sessionFactory.openSession();//開啟事務(wù)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();//關(guān)閉流 session.close();sessionFactory.close();}

?

?

結(jié)果:

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查詢所有數(shù)據(jù)public void fun1() {// 1 獲得sessionSession session = HibernateUtil.openSession();// 2.書寫HQL語句 // String hql = "from cn.qlq.domain.Customer";// from 類名全路徑String hql = "from TestType";// 如果整個項目中只有這一個類名可以直接寫名字// 3.根據(jù)hql創(chuàng)建查詢對象Query query = session.createQuery(hql);// 4.根據(jù)查詢對象獲取查詢結(jié)果List<TestType> list = query.list();System.out.println(list);}

?

結(jié)果:

[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查詢所有數(shù)據(jù)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.根據(jù)hql創(chuàng)建查詢對象Query query = session.createQuery(hql);// 4.根據(jù)查詢對象獲取查詢結(jié)果List<TestType> list = query.list();System.out.println(list);}

?

?

結(jié)果:

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表示,數(shù)據(jù)類型會變?yōu)閏har(1),存的是T和F:

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

?

?

2.常見數(shù)據(jù)類型在Oracle數(shù)據(jù)庫的映射

Oracle映射上面直接映射會報錯,解決辦法:? 將boolean映射為hibernate的true_false? (原理都是在數(shù)據(jù)庫存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"><!-- 配置表與實體對象的關(guān)系 --><!-- package屬性:填寫一個包名.在元素內(nèi)部凡是需要書寫完整類名的屬性,可以直接寫簡答類名了. --> <hibernate-mapping package="cn.qlq.domain" ><!-- class元素: 配置實體與表的對應(yīng)關(guān)系的name: 完整類名table:數(shù)據(jù)庫表名--><class name="TestType" table="testtype" ><!-- id元素:配置主鍵映射的屬性name: 填寫主鍵對應(yīng)屬性名column(可選): 填寫表中的主鍵列名.默認值:列名會默認使用屬性名type(可選):填寫列(屬性)的類型.hibernate會自動檢測實體的屬性類型.每個類型有三種填法: java類型|hibernate類型|數(shù)據(jù)庫類型not-null(可選):配置該屬性(列)是否不能為空. 默認值:falselength(可選):配置數(shù)據(jù)庫中列的長度. 默認值:使用數(shù)據(jù)庫類型的最大長度--><id name="id" ><!-- generator:主鍵生成策略 --><!--identity : 主鍵自增.由數(shù)據(jù)庫來維護主鍵值.錄入時不需要指定主鍵. --><generator class="native"></generator></id><!-- property元素:除id之外的普通屬性映射name: 填寫屬性名column(可選): 填寫列名type(可選):填寫列(屬性)的類型.hibernate會自動檢測實體的屬性類型.每個類型有三種填法: java類型|hibernate類型|數(shù)據(jù)庫類型not-null(可選):配置該屬性(列)是否不能為空. 默認值:falselength(可選):配置數(shù)據(jù)庫中列的長度. 默認值:使用數(shù)據(jù)庫類型的最大長度--><property name="age"/><property name="sex"/> <property name="isPerson" type="true_false"/><property name="birth"/><property name="birthTime"/><property name="name"/></class> </hibernate-mapping>

?

?

結(jié)果:

?

?

總結(jié):

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

Integer-----------------------? ? number

Character---------------------? char

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

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

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

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

?

?

添加數(shù)據(jù):

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以及之前的版本構(gòu)建會話工廠對象 // SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();//5.0之后獲取SessionFactory//創(chuàng)建服務(wù)注冊對象ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();//創(chuàng)建會話工廠對象SessionFactory sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();//獲取session對象Session session = sessionFactory.openSession();//開啟事務(wù)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();//關(guān)閉流 session.close();sessionFactory.close();} }

?

結(jié)果:

?

?

?

  • 查詢所有:
@Test// HQL查詢所有數(shù)據(jù)public void fun1() {// 1 獲得sessionSession session = HibernateUtil.openSession();// 2.書寫HQL語句String hql = "from cn.qlq.domain.TestType";// from 類名全路徑// 3.根據(jù)hql創(chuàng)建查詢對象Query query = session.createQuery(hql);// 4.根據(jù)查詢對象獲取查詢結(jié)果List<TestType> list = query.list();System.out.println(list);}

?

結(jié)果:

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查詢所有數(shù)據(jù)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.根據(jù)hql創(chuàng)建查詢對象Query query = session.createQuery(hql);// 4.根據(jù)查詢對象獲取查詢結(jié)果List<TestType> list = query.list();System.out.println(list);}

?

結(jié)果:? (日期不能直接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]]

?

?

?總結(jié):?

  對于mysql和oracle的boolean的通用類型就是true_false,hibernate會將字段類型設(shè)置為char(1),然后true的時候存T,false的時候存F。

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/qlqwjy/p/9457988.html

總結(jié)

以上是生活随笔為你收集整理的Hibernate常用的Java数据类型映射到mysql和Oracle的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。