SQL直接生成实体属性,简单粗暴型
在java开发中,不可避免的要碰到根据表生成对应的实体,这个过程是比较机器且繁琐的,我也用过一些逆向工程的工具,比如IDEA自带的生成实体,还有网上开源的工具,用起来也是可以的。
我现在开发用的持久层要不是spring-data-jpa要不就是tk-mybatis,而这两个框架根本都由注解完成数据的CRUD的,这里你只要生成一个实体加上相应的注解就行。
就单单生成实体而言,每次用第三方工具还是感觉太繁琐,总归有一些勾勾选选、启动工程之类的,而且不直观。从根本上看,我们封装的实体就是一些private的属性和get\set方法,如果你用了lombok,那就只要属性需要我们写了,这里介绍一种我自己总结的方法:SQL直接生成属性,其它的注解后期加上(一般字段和实体属性都是驼峰或是下划线的,基本不需要注解)
优点:支持自定义扩展,使用方便
下面以PGSQL为例:
![]()
效果:
![]()
附上源码:
1 select name,type,comment,
2 concat(
3 'private ',
4 case
5 when type like 'character%' and type like '%[]' then 'String[]'
6 when type like 'character%' then 'String'
7 when type like 'timestamp%' then 'Date'
8 else upper(substr(type, 1, 1)) || substr(replace(initcap(replace(type, '_',' ')),' ',''),2) end,
9 ' ',
10 lower(substr(name, 1, 1)) || substr(replace(initcap(replace(name, '_',' ')),' ',''),2),
11 ';',
12 case when comment is null then '' else concat('//',comment) end
13 ) as myField
14 from (
15 SELECT col_description(a.attrelid,a.attnum) as comment,format_type(a.atttypid,a.atttypmod) as type,a.attname as name
16 FROM pg_class as c,pg_attribute as a where c.relname = 'lead' and a.attrelid = c.oid and a.attnum>0) a
MYSQL版
![]()
mysql没有initcap函数,可以自定义一个
1
2
3 --创建initcap函数
4 create function initcap(ss varchar(1000)) returns varchar(1000)
5 begin
6 declare lena int;
7 declare pos int;
8 declare firsta char(1);
9 declare seconda varchar(999);
10 declare tmpstr varchar(1000);
11 declare retstr varchar(1000);
12 if (length(trim(ss)) = 0) then
13 return '';
14 end if;
15 if (right(ss,1) != ' ') then
16 set ss=concat(ss,' ');
17 end if;
18 set pos=instr(ss,' ');
19 set lena=length(ss);
20 while (pos > 0) do
21 set tmpstr=trim(left(ss,pos));
22 set ss = right(ss,lena - pos );
23 set lena = length(tmpstr);
24 set firsta = upper(left(tmpstr,1));
25 set seconda = lower(right(tmpstr,lena - 1));
26 if (length(retstr) > 0) then
27 set retstr = concat(retstr,' ',firsta,seconda);
28 else
29 set retstr = concat(firsta,seconda);
30 end if;
31 set pos = instr(ss,' ');
32 set lena = length(ss);
33 end while;
34 return retstr;
35 end;
36
37
38 --执行生成属性
39 select name,type,comment,
40 concat(
41 'private ',
42 case
43 when type='bigint' then 'Long'
44 when type='varchar' then 'String'
45 when type='int' then 'Integer'
46 when type in('date','datetime','timestamp') then 'Date'
47 else '' end,
48 ' ',
49 concat(lower(substr(name, 1, 1)),substr(replace(initcap(replace(name, '_',' ')),' ',''),2)),
50 ';',
51 if(comment='','',concat('//',comment))
52 ) as myField
53 from (
54 select COLUMN_NAME name,DATA_TYPE type,COLUMN_COMMENT comment from INFORMATION_SCHEMA.Columns where table_name='表名') a
SQL直接生成实体属性,简单粗暴型的更多相关文章
- Linq to Sql自动生成实体类重名情况的处理
使用Linq to sql自动生成实体类时,如果要生成多个库的实体类,往往会遇到类名重名的情况,也就是表名重名,这样编译会不通过,这种情况下要在自动生成的实体类文件中(.designer.cs后缀)将 ...
- T4 生成实体和简单的CRUD操作
<#@ template debug="false" hostspecific="false" language="C#" #> ...
- T4生成实体和简单的CRUD操作
主要跟大家交流下T4,我这里针对的是mysql,我本人比较喜欢用mysql,所以语法针对mysql,所以你要准备mysql的DLL了,同理sqlserver差不多,有兴趣可以自己写写,首先网上找了一个 ...
- 用PowerDesigner将SQL语句生成实体类
1.首先打开PowerDesigner,点击左上角“File”—>"Reverse Engineer"—>"Database..." 2.选择数据库 ...
- .net 根据匿名类生成实体类,根据datatable生成实体类,根据sql生成实体类
在开发中可能会遇到这几种情况 1.EF或LINQ查询出来的匿名对象在其它地方调用不方便,又懒的手动建实体类 2.通过datatable反射实体需要先建一个类 ,头痛 3.通过SQL语句返回的实体也需要 ...
- java:Hibernate框架3(使用Myeclipse逆向工程生成实体和配置信息,hql语句各种查询(使用hibernate执行原生SQL语句,占位符和命名参数,封装Vo查询多个属性,聚合函数,链接查询,命名查询),Criteria)
1.使用Myeclipse逆向工程生成实体和配置信息: 步骤1:配置MyEclipse Database Explorer: 步骤2:为项目添加hibernate的依赖: 此处打开后,点击next进入 ...
- 在线数据库表(sql语句)生成java实体类工具
相信每个做java开发的读者,都接触过SQL建表语句,尤其是在项目开发初期,因为数据库是项目的基石. 在现代项目开发中,出现了许多ORM框架,通过简单的实体映射,即可实现与数据库的交互,然而我们最初设 ...
- SQL反模式学习笔记6 支持可变属性【实体-属性-值】
目标:支持可变属性 反模式:使用泛型属性表.这种设计成为实体-属性-值(EAV),也可叫做开放架构.名-值对. 优点:通过增加一张额外的表,可以有以下好处 (1)表中的列很少: (2)新增属性时,不需 ...
- .net core 中简单封装Dapper.Extensions 并使用sqlsuger自动生成实体类
引言 由公司需要使用dapper 同时支持多数据库 又需要支持实体类 又需要支持sql 还需要支持事务 所以采用了 dapper + dapperExtensions 并配套 生成实体类小工具的方 ...
随机推荐
- ostringstream、istringstream、stringstream(转)
看一下C++风格的串流控制,C++引入了ostringstream.istringstream.stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件. istring ...
- UNP——原始套接字
1.原始套接字的用处 使用原始套接字可以构造或读取网际层及其以上报文. 具体来说,可以构造 ICMP, IGMP 协议报文,通过开启 IP_HDRINCL 套接字选项,进而自定义 IPv4首部. 2. ...
- ceph的ISCSI GATEWAY
前言 最开始接触这个是在L版本的监控平台里面看到的,有个iscsi网关,但是没看到有类似的介绍,然后通过接口查询到了一些资料,当时由于有比较多的东西需要新内核,新版本的支持,所以并没有配置出来,由于内 ...
- ubuntu服务器dns重启失效问题
方法一 通过/etc/network/interfaces,在它的最后增加一句: dns-nameservers 8.8.8.8 8.8.8.8是Google提供的DNS服务,这里只是举一个例子,你也 ...
- 我要进大厂之大数据Hadoop HDFS知识点(2)
01 我们一起学大数据 老刘继续分享出Hadoop中的HDFS模块的一些高级知识点,也算是对今天复习的HDFS内容进行一次总结,希望能够给想学大数据的同学一点帮助,也希望能够得到大佬们的批评和指点! ...
- mongo命令行操作
- Java的比较器Comparable与Comparator
在Java中有两个比较器:Comparable.Comparator 对于Integer.Double等等类型,可以直接对他们进行比较,因为已经实现了比较的方式,然而在平时常常会面临需要对集合进行排序 ...
- 如何利用FL Studio进行音乐合并
FL Studio20是Fruity Loops Studio的简称,也叫做水果音乐制作软件.它是一款功能十分强大的音乐制作软件,将作曲.编曲.混音.录音.大碟等功能集合一体,外接MIDI即可成为一个 ...
- FL Studio通道窗口和步进音序器知识讲解
FL Studio中通道窗口是以样本为概念的音乐制作基础.通道窗口包含了步进音序器并结合了各种丰富的功能,可以通过通道窗口打开各通道的设置窗口.钢琴卷轴等.步进音序器在节奏制作方便表现出很好的优势,它 ...
- 用OCR文字识别工具来审阅和处理PDF内容
"工作的时候要同时打开好几个软件真的是太不方便了."很多公司白领都有这样的困扰.他们抱怨着进行文字识别过后又要打开文档编辑器来进行编辑.PDF是办公文档常用的格式, ABBYY F ...