mysql 表映射为java bean 手动生成。
- 在日常工作中,一般是先建表。后建类。
当然也有先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 手动生成。的更多相关文章
- EJB_开发单表映射的实体bean
开发单表映射的实体bean 实体bean 它属于java持久化规范(JPA)里的技术,实体bean通过元数据在Javabean和数据库表之间建立起映射关系,然后Java程序员就可以随心所欲的使用面向对 ...
- 高速创建和mysql表相应的java domain实体类
今天创建了一个表有十几个字段,创建完之后必定要写一个与之相应的java domain实体类. 这不是反复的工作吗?为什么不先把这个表的全部的字段查出来,然后放到linux环境下,用sed工具在每一行的 ...
- mysql表生成JavaBean
MySQLToBean.java package org.just.util; import java.io.File; import java.io.FileInputStream; import ...
- java基础复习-自定义注解4(结合JDBC技术,打造类表映射微框架)
写在前面: 1.该框架为自己所写的第一个框架类产品,可能有着许多不足的地方,读者可以到评论区指出.同时,该微框架的源码也会开源至博客中,够后来的学习者借鉴.由于该框架逻辑结构稍些复杂,不可能花大量篇幅 ...
- Hibernate 表映射 主键生成策略与复合主键
主要分析三点: 一.数据表和Java类的映射 : 二.单一主键映射和主键的生成策略 : 三.复合主键的表映射 : 一.数据表和Java类的映射 Hibernate封装了数据库DDL语句,只需要将数据 ...
- 通过数据库中的表,使用 MyEclipse2017的反向生成工具-->hibernate反转引擎引擎(MyEclipse2017自带的插件) 来反转生成实体类和对应的映射文件
通过数据库中的表,使用 MyEclipse2017的反向生成工具-->hibernate反转引擎引擎(MyEclipse2017自带的插件) 来反转生成实体类和对应的映射文件 文章目录 Ja ...
- Mysql,Oracle与Java字段类型映射关系
Mysql,Oracle与Java字段类型映射关系 参考相关博文 MySQL/Oracle字段类型 Java字段类型 最大长度 BIT java.lang.Boolean 1 BLOB java.la ...
- 使用maven根据JSON文件自动生成Java POJO类(Java Bean)源文件
根据JSON文件自动生成Java POJO类(Java Bean)源文件 本文介绍使用程序jsonschema2pojo来自动生成Java的POJO类源文件,本文主要使用maven,其他构建工具请参考 ...
- java面试题之----mysql表优化方案
本文转载自segmentfault,原文链接:https://segmentfault.com/a/1190000006158186. 当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考 ...
随机推荐
- httpd-2.4安装配置
接收请求的类型: 并发访问响应模型: 单进程I/O模型:启动一个进程处理用户请求,这意味着一次只能处理一个请求,多个请求被串行响应: 多进程I/O模型:由父进程并行启动多个子进程,每个子进程响应一个请 ...
- linux 安装【jdk、tomcat】查看对外开放端口(防火墙拦截处理)
1.安装 jdkhttps://www.cnblogs.com/xu-dong/p/6422938.html 查看Linux下查看JDK安装路径: https://www.cnblogs.com/im ...
- 人群密度估计 CrowdCount
最近在看人群密度估计方面的东西,把博客看到的一些方法简单总结一下,后续继续添加. 1.论文<CrowdNet: A Deep Convolutional Network for DenseCro ...
- guava-retrying 源码解析(导入项目)
1.从github上下载guava-retry源码 git clone git://github.com/rholder/guava-retrying.git 2.导入idea,使用gradle记得勾 ...
- WEBBASE篇: 第六篇, CSS知识4
CSS 1.框模型 1.内边距 属性: padding:value; padding-top / right / bottom / left:value; 2.box-sizing 作用:指定框模型的 ...
- Unity打开外部程序exe/Bat文件方案
Unity调用外部程序/Bat文件 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...
- C#词频统计 效能分析
在邹老师的效能分析的建议下对上次写过的词频统计的程序进行分析改进. 效能分析:个人很浅显的认为就是程序的运行效率,代码的执行效率 1.VS 提供了自带的分析工具:performance tool (性 ...
- hadoop 单机模式 伪分布式 完全分布式区别
1.单机(非分布式)模式 这种模式在一台单机上运行,没有分布式文件系统,而是直接读写本地操作系统的文件系统,一般仅用于本地MR程序的调试 2.伪分布式运行模式 这种模式也是在一台单机上运行,但用不同的 ...
- python 进程池的使用和坑
from multiprocessing import Pool,Process import time,os def Foo(a):#创建函数 time.sleep(2) print('in the ...
- git 错误汇总
★一.git提交时报错:Updates were rejected because the tip of your current branch is behind 出现这样的问题是由于:自己当前版本 ...