在日常工作中,一般是先建表。后建类。
当然也有先UML构建类与类的层级关系,直接生成表。(建模)
这里只针对先有表后有类的情况。不采用代码生成器的情况。 例如:
原表结构:


假如这是我业务变动,添加的一个表,
同时我也要建对应的java类时。
一般我们是手动去复制。容易出错。而且也是体力活。这里面可以用SQL直接生成。 -- 创建存储 通过系统表解析出表的结构。然后把表结构拼接成java类。 CREATE PROCEDURE mypro(in tablename varchar(10),in dbo varchar(20))
BEGIN
declare colName varchar(100);
declare dataType varchar(100);
declare done int ;
declare temp varchar(100) default '';
declare `set` varchar(100) default '';
declare `get` varchar(100) default '';
declare resultTable cursor for select distinct column_name as name,data_type as type from information_schema.COLUMNS where table_name = tableName and table_SCHEMA = dbo;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; DROP TABLE IF EXISTS temp;
create table temp(
`data` varchar(100),
`set` varchar(100),
`get` varchar(100)
)ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; open resultTable;
posLoop:LOOP
FETCH resultTable into colName,dataType;
IF done=1 THEN
LEAVE posLoop;
END IF;
IF dataType='bigint' then
set temp = concat('private Integer ',colName,';');
set `set` = concat('public void set',UPPER(LEFT(colName,1)),RIGHT(colName,length(colName)-1),'(','Integer ',colName,'){ this.',colName,'=',colName,';','}');
set `get` = concat('public Integer get',UPPER(LEFT(colName,1)),RIGHT(colName,length(colName)-1),'(){ return ',colName,';','}');
ELSEIF dataType='varchar' then
set temp = concat('private String ',colName, ';');
set `set` = concat('public void set',UPPER(LEFT(colName,1)),RIGHT(colName,length(colName)-1),'(','String ',colName,'){ this.',colName,'=',colName,';','}');
set `get` = concat('public String get',UPPER(LEFT(colName,1)),RIGHT(colName,length(colName)-1),'(){ return ',colName,';','}');
ELSEIF dataType='int' then
set temp = concat('private Integer ',colName ,';');
set `set` = concat('public void set',UPPER(LEFT(colName,1)),RIGHT(colName,length(colName)-1),'(','Integer ',colName,'){ this.',colName,'=',colName,';','}');
set `get` = concat('public Integer get',UPPER(LEFT(colName,1)),RIGHT(colName,length(colName)-1),'(){ return ',colName,';','}');
ELSEIF dataType='date' then
set temp = concat('private Date ',colName ,';');
set `set` = concat('public void set',UPPER(LEFT(colName,1)),RIGHT(colName,length(colName)-1),'(','Date ',colName,'){ this.',colName,'=',colName,';','}');
set `get` = concat('public Date get',UPPER(LEFT(colName,1)),RIGHT(colName,length(colName)-1),'(){ return ',colName,';','}');
ELSEIF dataType='datetime' then
set temp = concat('private Date ',colName ,';');
set `set` = concat('public void set',UPPER(LEFT(colName,1)),RIGHT(colName,length(colName)-1),'(','Date ',colName,'){ this.',colName,'=',colName,';','}');
set `get` = concat('public Date get',UPPER(LEFT(colName,1)),RIGHT(colName,length(colName)-1),'(){ return ',colName,';','}');
ELSEIF dataType='decimal' then
set temp = concat('private BigDecimal ',colName ,';');
set `set` = concat('public void set',UPPER(LEFT(colName,1)),RIGHT(colName,length(colName)-1),'(','BigDecimal ',colName,'){ this.',colName,'=',colName,';','}');
set `get` = concat('public BigDecimal get',UPPER(LEFT(colName,1)),RIGHT(colName,length(colName)-1),'(){ return ',colName,';','}');
ELSEIF dataType='char' then
set temp = concat('private String ',colName ,';');
set `set` = concat('public void set',UPPER(LEFT(colName,1)),RIGHT(colName,length(colName)-1),'(','String ',colName,'){ this.',colName,'=',colName,';','}');
set `get` = concat('public String get',UPPER(LEFT(colName,1)),RIGHT(colName,length(colName)-1),'(){ return ',colName,';','}');
ELSEIF dataType='text' then
set temp = concat('private String ',colName ,';');
set `set` = concat('public void set',UPPER(LEFT(colName,1)),RIGHT(colName,length(colName)-1),'(','String ',colName,'){ this.',colName,'=',colName,';','}');
set `get` = concat('public String get',UPPER(LEFT(colName,1)),RIGHT(colName,length(colName)-1),'(){ return ',colName,';','}');
END IF ;
insert into temp(`data`,`set`,`get`) values(temp,`set`,`get`);
END LOOP posLoop;
CLOSE resultTable;
END;
call mypro('person','test'); //第一个参数是表名,针对表名生成java类结构。第二个参数是dbo指定的哪个数据库
select * from temp;
效果图:

实际应用:

直接复制就行了。

结果:

完全正常, 这样就不用一个个去手动建java类了。

里面的toString() 跟类名 没有去自动生动。手动写一下就OK。这样就方便好了。

MYsql不支持print打印 只能select 所以就插入到表中了。

如果用mssql 就直接print 配合 CHAR(10),CHAR(13) 能直接生成一个完整的java bean 包括 toString() 方法 类名。mysql有一定的局限性。

如果这里是采用mybaits的话。
手动去复制表结构是很累人的。也容易出错。mybatis insert into tb(col1,col2) value(#{value1},#{value2});

这里面如果也需要手动复制的话。也有相应的SQL语句,参见,另一篇博客:https://www.cnblogs.com/1-Admin/p/8447052.html

END


mysql 表映射为java bean 手动生成。的更多相关文章

  1. EJB_开发单表映射的实体bean

    开发单表映射的实体bean 实体bean 它属于java持久化规范(JPA)里的技术,实体bean通过元数据在Javabean和数据库表之间建立起映射关系,然后Java程序员就可以随心所欲的使用面向对 ...

  2. 高速创建和mysql表相应的java domain实体类

    今天创建了一个表有十几个字段,创建完之后必定要写一个与之相应的java domain实体类. 这不是反复的工作吗?为什么不先把这个表的全部的字段查出来,然后放到linux环境下,用sed工具在每一行的 ...

  3. mysql表生成JavaBean

    MySQLToBean.java package org.just.util; import java.io.File; import java.io.FileInputStream; import ...

  4. java基础复习-自定义注解4(结合JDBC技术,打造类表映射微框架)

    写在前面: 1.该框架为自己所写的第一个框架类产品,可能有着许多不足的地方,读者可以到评论区指出.同时,该微框架的源码也会开源至博客中,够后来的学习者借鉴.由于该框架逻辑结构稍些复杂,不可能花大量篇幅 ...

  5. Hibernate 表映射 主键生成策略与复合主键

    主要分析三点: 一.数据表和Java类的映射 : 二.单一主键映射和主键的生成策略 : 三.复合主键的表映射 : 一.数据表和Java类的映射  Hibernate封装了数据库DDL语句,只需要将数据 ...

  6. 通过数据库中的表,使用 MyEclipse2017的反向生成工具-->hibernate反转引擎引擎(MyEclipse2017自带的插件) 来反转生成实体类和对应的映射文件

    通过数据库中的表,使用 MyEclipse2017的反向生成工具-->hibernate反转引擎引擎(MyEclipse2017自带的插件) 来反转生成实体类和对应的映射文件   文章目录 Ja ...

  7. Mysql,Oracle与Java字段类型映射关系

    Mysql,Oracle与Java字段类型映射关系 参考相关博文 MySQL/Oracle字段类型 Java字段类型 最大长度 BIT java.lang.Boolean 1 BLOB java.la ...

  8. 使用maven根据JSON文件自动生成Java POJO类(Java Bean)源文件

    根据JSON文件自动生成Java POJO类(Java Bean)源文件 本文介绍使用程序jsonschema2pojo来自动生成Java的POJO类源文件,本文主要使用maven,其他构建工具请参考 ...

  9. java面试题之----mysql表优化方案

    本文转载自segmentfault,原文链接:https://segmentfault.com/a/1190000006158186. 当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考 ...

随机推荐

  1. 第一章03 java 开发环境搭建

    1. 首先,搭配java开发环境,安装(jdk:java 开发工具包) 2.安装下载:输入www.oracle.com.cn/indek.html  (cn代表中文) 3.测试安装是否成功 (1)wi ...

  2. 百度地图JSSDK使用小实例

    代码示例 <html> <head> <meta http-equiv="Content-Type" content="text/html; ...

  3. 关于pdfbox操作pdf的分享链接手长

    http://blog.csdn.net/fighting_no1/article/details/51038966

  4. JDBC driver连接MySQL运行报错The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than

    出错原因: 因为安装mysql的时候时区设置的不正确. mysql默认的是美国的时区,而我们中国大陆要比他们迟8小时,采用GMT+8:00格式. 也就是说是数据库和系统时区差异所造成的. 验证:运行c ...

  5. License控制解决方案

    当我们写完一个软件以后一般都会牵扯到软件控制,那么控制版本的原理是什么呢?其实就是在程序中添加了一段经过自己编写算法(这个算法可以是简单的公式运算,也可以是复杂的结合硬件的绑定方式),将形成的序列号注 ...

  6. CCF-再卖菜-20180904

    可以说这道题出的不错,我是用动态规划做的 ( 严谨点说应该是记忆化搜索,我是递归版本,非递归我不会啊... 题意分析: x1  x2  x3 已知 x1+x2=t1或t1+1 x1+x2+x3=t2 ...

  7. CH3401 石头游戏(矩阵快速幂加速递推)

    题目链接:传送门 题目: 石头游戏 0x30「数学知识」例题 描述 石头游戏在一个 n 行 m 列 (≤n,m≤) 的网格上进行,每个格子对应一种操作序列,操作序列至多有10种,分别用0~9这10个数 ...

  8. PTA——32位前导零

    PTA #include <stdio.h> int main(){ //无符号整型才能表达32位二进制数对应的十进制数 unsigned int decimalNum; unsigned ...

  9. 学习笔记TF040:多GPU并行

    TensorFlow并行,模型并行,数据并行.模型并行根据不同模型设计不同并行方式,模型不同计算节点放在不同硬伯上资源运算.数据并行,比较通用简便实现大规模并行方式,同时使用多个硬件资源计算不同bat ...

  10. 第二节《Git暂存区》

    在上一节中我们的demo版本库经历了一次提交,我们可以使用git og --stat查看一下提交日志. [root@git demo]# git log --statcommit 986a1bd458 ...