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


---恢复内容结束---

原文地址:https://www.cnblogs.com/1-Admin/p/9651507.html

时间: 2024-10-06 21:42:17

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

EJB_开发单表映射的实体bean

开发单表映射的实体bean 实体bean 它属于java持久化规范(JPA)里的技术,实体bean通过元数据在Javabean和数据库表之间建立起映射关系,然后Java程序猿就能够随心所欲的使用面向对象的编程思想来操纵数据库. JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,眼下实现的JPA规范的主流产品有Hibernate.TopLink和OpenJPA,在JBoss中採用了Hibernate 作为其持久化实现产品. 加入JPA的配置文件persistence.xml 依据JP

快速创建和mysql表对应的java domain实体类

今天创建了一个表有十几个字段,创建完之后必然要写一个与之对应的java domain实体类.这不是重复的工作吗?为什么不先把这个表的所有的字段查出来,然后放到linux环境下,用sed工具在每一行的前面加上"private String ",每一行的后面添加";".这样可以节省很多重复工作.下面上sql代码和sed命令. 查询一个mysql表所有列的列名的sql代码如下: SELECT COLUMN_NAME FROM information_schema.COLU

Spring Boot配置Mysql后无法根据java实体类生成table

https://www.imooc.com/qadetail/193270?t=292816 检查了两天,没找到问题.原因为实体类必须在主程序application的同名包或者子包下面,启动时才会扫描到.FUCK! 原文地址:https://www.cnblogs.com/nxzwcx/p/8997857.html

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

主要分析三点: 一.数据表和Java类的映射 : 二.单一主键映射和主键的生成策略 : 三.复合主键的表映射 : 一.数据表和Java类的映射  Hibernate封装了数据库DDL语句,只需要将数据表和类之间实现映射,即可对数据表进行操作. 示例:数据库中存在表interface_admin.ds_area,实现表和类之间映射,其中单一主键oggKeyId,使用主键自动生成策略UUID,具体第二点进行阐述 . package com.pec.model; import java.io.Seri

利用java日期类生成数据仓库维度表

利用java日期类生成数据仓库维度表 Date类: 最基础的日期时间类,返回一个相对日期的毫秒数.精确到毫秒,但不支持日期的国际化和分时区显示.Date 类从Java 开发包(JDK)1.0 就开始进化,当时它只包含了几个取得或者设置一个日期数据的各个部分的方法, 比如说月, 日, 和年. 这些方法现在遭到了批评并且已经被转移到了Calendar类里去了,这种改进旨在更好的处理日期数据的国际化格式. Calender类: 相对于Date更加强大的时间类,是抽象类,提供了常规的日期修改功能和国际化

Android 网络请求json数据,解析json数据,生成对应的java bean类一步到位,快速开发

Android 网络请求一般都涉及到图片和JSON数据,怎样快速的请求网络JSON数据,解析JSON数据,并且一步生成自己想要的Java bean实体类?这个涉及到Android 开发效率的问题.由于接触Android 网络这方面比较多,自然就找到一些好的方法来快速开发Android 网络模块的相关内容,接下来就为大家揭晓 一步快速请求,解析JSON 数据生成对应的Java bean实体类的方法. 注:我们先把思路讲解下吧: 1.网络请求JSON数据代码可以自己写,当然我还是推荐使用网络上开源的

Java实战之02Hibernate-04多表映射

十.多表映射 0.内容补充:数据完整性 作用:防止用户的误操作. 实体完整性:主键.用于确定表中唯一的一条记录. 域完整性:表中的字段. 数据类型约束: 非空约束: 唯一约束: 参照完整性: 多表设计:表之间的关系 一对多(用的最多的) 多对多(比较重要) 一对一(实际开发中,根本不用) 1.一对多关系映射(非常重要) 1.1.单向多对一映射 1 /** 2 * 客户的数据模型 3 * @author zhy 4 * 5 * 一个客户可以有多个订单 6 * 多个订单属于一个客户. 7 * 8 *

mysql数据类型和java对应表(copy)

[说明] 资料来自:http://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-type-conversions.html MySQL数据类型 转换成java类型 CHAR, VARCHAR, BLOB, TEXT, ENUM, and SET java.lang.String, java.io.InputStream, java.io.Reader, java.sql.Blob, java.sql.Clob FLOAT,

Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java包

Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 事实上,我想写数据库的念头已经很久了,在之前写了一个答题系统的小项目那只是初步的带了一下数据库,数据库是比较强大的,不是我们三言两语就能解决的,我一直想抽个时间自己再过一遍Sqlite和JDBC的,但是,大家也知道,琐事比较多,我们来说一下数据库的框架吧,事实上市面上,我觉得还可以的数据库框架有两个,ORMLite和GreenDao,我以前做的运动类的应用上,就需要存储大量的运动数据,我们最开始是在本地写数据库的