[构建自己的持久层]三、Type数据类型描述

本文介绍了如何将Java数据类型与Hibernate数据类型以及数据库中的数据类型进行映射,以MySql数据库为例,详细阐述了不同类型如text、integer、datetime等在Java、Hibernate和数据库中的表现,并展示了相关XML配置文件。同时,文章提及了用于动态创建和操作数据库表的方法,以及数据类型描述类Type的使用。
摘要由CSDN通过智能技术生成

  一切反动派都是纸老虎!

  数据类型,用来描述对象属性的java数据类型与数据库数据库类型的关系。也就是说,创建一个类,类的其中一个属性是email,在java中是什么类型,在数据库中是什么类型...

以MySql数据库为例

/catframework/xtools/data/MySql.xml

<?xml version="1.0" encoding="UTF-8"?>
<types>
 <type name="text" label="小文本" javatype="java.lang.String" datatype="varchar(${Length})" browserurl="" view="input" hibernatetype="string">&lt;input type="text" max="${max}" value=${value} /&gt;</type>
 <type name="textarea" label="大文本" javatype="java.lang.String" datatype="text" browserurl="" view="textarea" hibernatetype="string">&lt;textarea&gt;&lt;/textarea&gt;</type>
 <type name="integer" label="整数" javatype="java.lang.Integer" datatype="integer" browserurl="" view="inputnumber" hibernatetype="integer"></type>
 <type name="long" label="长整数" javatype="java.lang.Long" datatype="BIGINT" browserurl="" view="inputnumber" hibernatetype="integer"></type>
 <type name="float" label="浮点数" javatype="java.math.BigDecimal" datatype="decimal(18,${Length})" browserurl="" view="inputfloat" hibernatetype="decimal"></type>
 <type name="datetime" label="日期时间" javatype="java.util.Date" datatype="datetime" browserurl="/com/cat/xframework/browser/datetime.jsp?value=${value}" view="browserdatetime" hibernatetype="timestamp"></type>
 <type name="date" label="日期" javatype="java.lang.String" datatype="char(10)" browserurl="/com/cat/xframework/browser/date.jsp?value=${value}" view="browserdate" hibernatetype="string"></type>
 <type name="time" label="时间" javatype="java.lang.String" datatype="char(8)" browserurl="/com/cat/xframework/browser/time.jsp?value=${value}" view="browsertime" hibernatetype="string"></type>
 <type name="spojo" label="选择单实体" javatype="java.lang.String" datatype="varchar(${Length})" browserurl="/com/cat/xframework/browser/pojo.jsp?value=${value}" view="selectpojo" hibernatetype="integer"></type>
 <type name="image" label="单图片" javatype="java.lang.String" datatype="varchar(${Length})" browserurl="/com/cat/xframework/browser/pojo.jsp?value=${value}" view="selectpojo" hibernatetype="integer"></type>
 <type name="pojo" label="单实体" javatype="java.lang.String" datatype="varchar(${Length})" browserurl="/com/cat/xframework/browser/pojo.jsp?value=${value}" view="browserpojo" hibernatetype="integer"></type>
 <type name="xpojo" label="多实体" javatype="java.lang.String" datatype="text" browserurl="/com/cat/xframework/browser/xpojo.jsp?value=${value}" view="xbrowserpojo" hibernatetype="string"></type>
 <type name="mobile" label="手机号" javatype="java.lang.String" datatype="varchar(${Length})" browserurl="" view="input" hibernatetype="string"></type>
 <type name="phone" label="电话" javatype="java.lang.String" datatype="varchar(${Length})" browserurl="" view="input" hibernatetype="string"></type>
 <type name="email" label="邮件" javatype="java.lang.String" datatype="varchar(${Length})" browserurl="" view="inputemail" hibernatetype="string"></type>
 <type name="url" label="网址" javatype="java.lang.String" datatype="varchar(${Length})" browserurl="" view="inputemail" hibernatetype="string"></type>
 <type name="selectstring" label="选择文本" javatype="java.lang.String" datatype="varchar(${Length})" browserurl="" view="selecstring" hibernatetype="string"></type>
 <type name="selectinteger" label="选择整数" javatype="java.lang.Integer" datatype="integer" browserurl="" view="selectnumber" hibernatetype="integer"></type>
 <type name="selectfloat" label="选择浮点数" javatype="java.math.BigDecimal" datatype="decimal" browserurl="" view="selectfloat" hibernatetype="decimal"></type>
 <type name="browser" label="单选浏览" javatype="java.lang.Integer" datatype="integer" browserurl="" view="browser" hibernatetype="integer"></type>
 <type name="multibrowser" label="多选浏览" javatype="java.lang.String" datatype="text" browserurl="" view="browser" hibernatetype="string"></type>
 <type name="browser" label="单选浏览" javatype="java.lang.Integer" datatype="integer" browserurl="" view="browser" hibernatetype="integer"></type>
 <type name="multibrowser" label="多选浏览" javatype="java.lang.String" datatype="text" browserurl="" view="browser" hibernatetype="string"></type>
 <type name="identity" label="自增ID" javatype="java.lang.Long" datatype="BIGINT NOT NULL AUTO_INCREMENT" browserurl="" view="inputnumber" hibernatetype="integer">&lt;input type="text" max="${max}" value=${value} /&gt;</type>
 <createtable label="创建表SQL模板">
  CREATE TABLE ${tablename} (
   ${id} ${columtype} NOT NULL ,
   ${label} varchar(500),
   PRIMARY KEY(${id})
  )
  TYPE = InnoDB  DEFAULT CHARSET=utf8;
 </createtable>
 <createtablebyextends label="创建表SQL模板">
  CREATE TABLE ${tablename} (
   ${id} ${columtype} NOT NULL ,
   PRIMARY KEY(${id}),
   CONSTRAINT FK_${tablename}_${extends} FOREIGN KEY FK_${tablename}_${extends} (${id})
   REFERENCES ${extends}(${id})
      ON DELETE RESTRICT
      ON UPDATE RESTRICT
  )
  TYPE = InnoDB  DEFAULT CHARSET=utf8;
 </createtablebyextends>
 <addcolum label="加入列SQL模板">ALTER TABLE ${tablename} add ${columname} ${columtype}</addcolum>
 <modifycolum label="修改列SQL模板">ALTER TABLE ${tablename} MODIFY COLUMN ${columname} ${columtype}</modifycolum>
 <dropcolum label="删除列SQL模板">ALTER TABLE ${tablename} DROP COLUMN ${columname}</dropcolum>
 <droptable label="删除表SQL模板">DROP TABLE ${tablename}</droptable>
 <dialect>com.cat.xtools.data.MySqlDialect</dialect>
 <connectionmanager>com.cat.xtools.conn.CatConnectionManager</connectionmanager>
 <!--
 Oracle org.hibernate.dialect.OracleDialect
 MySQL  org.hibernate.dialect.MySQLDialect
 MsSQL  com.cat.xtools.data.MsSqlDialect
 其它数据库未测
 -->
</types>

简单介绍一下:types->type:小文本,在java中的类型是String,在hibernate中的类型是string,在数据库中的类型是varchar,在html页面上就是input.啊!为什么还要描述html信息?后面会讲到:)

对,就这样描述。

我们再来看一下,为了方便我们动态的创建数据库表,数据实现映射,动态的修改数据库的表,我们定义了不同的创建方法,这里不再详述

dialect是SQL查询解析,我无耻了一下,这里照搬了hibernate,但是MsSql没有照搬,因为MsSql有特殊的地方,作为商业机密,在这里不讲了。

我们再来看一下com.cat.xtools.Type.java

package com.cat.xtools;

/**
 * 数据类型<br>
 * <p>
 * 修改日期:2006-1-25
 * <p>
 * 修改说明:
 * <p>
 * 版权所有:Copyright 2006 软件有限公司, Inc. All rights reserved.
 *
 * @version 1.0
 * @author 侯正刚
 * @since 1.0
 */
public class Type extends SysEntity{
 private String javatype=null;
 private String datatype=null;
 private String browserurl=null;
 private String hibernatetype=null;
 private String view=null;
 public Type() {
  super();
 
 }
 /**
  * 设置JAVA类型
  * @param javatype
  */
 public void setJavatype(String javatype) {
 
  this.javatype=javatype;
 }
 /**
  * 返回JAVA类型
  * @return
  */
 public String getJavatype() {
 
  return this.javatype;
 }
 /**
  * 设置数据库类型
  * @param type
  */
 public void setDatatype(String type) {
 
  this.datatype=type;
 }
 /**
  * 返回数据库类型
  * @return
  */
 public String getDatatype() {
 
  return this.datatype;
 }
 /**
  * 返回数据库类型描述串
  * @return
  */
 public String getTypestr(Integer length)
 {
  return this.datatype.replaceAll("$Length",length+"");
 }
 /**
  * 返回浏览地址
  * @return
  */
 public String getBrowserurl()
 {
  return this.browserurl;
 }
 /**
  * 设置数据浏览地址
  * @param url
  */
 public void setBrowserurl(String url)
 {
  this.browserurl=url;
 }
 /**
  * 设置hibernate中的类型
  * @param type
  */
 public void setHibernatetype(String type)
 {
  this.hibernatetype=type;
 }
 /**
  * 返回hibernate中的类型
  * @return
  */
 public String getHibernatetype()
 {
  return this.hibernatetype;
 }
 /**
  * 设置HTML代码
  * @param view
  */
 public void setView(String view)
 {
  this.view=view;
 }
 /**
  * 返回HTML代码
  * @return
  */
 public String getView()
 {
  return this.view;
 }
 /**
  * @param args
  */
 public static void main(String[] args) {
 

 }

}


通过java可以看得很清楚了吧,对数据类型的描述。

明白了吧?不明白?再看一遍!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值