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 并配套 生成实体类小工具的方 ...
随机推荐
- 数字取证autopsy系列——保存证据镜像(一)
简介: 在学习autopsy之前,我们先学习如何将犯罪嫌疑人的磁盘保存为一个证据镜像.我们使用的将磁盘保存为证据镜像的工具为AccessData FTK imager,你可以自行搜索下载. Acces ...
- CSS3之线性渐变(linear gradients)
线性渐变(linear gradients)沿着一根轴线改变颜色,从起点到终点颜色进行顺序渐变. 语法: background:linear-gradient(direction,color-stop ...
- 基于Docker UI 配置ceph集群
前言 前一篇介绍了docker在命令行下面进行的ceph部署,本篇用docker的UI进行ceph的部署,目前来说市面上还没有一款能够比较简单就能直接在OS上面去部署Ceph的管理平台,这是因为OS的 ...
- css类名的使用
` Document .box { color: rgba(255, 0, 0, 1) } .box .box2 { color: rgba(0, 128, 0, 1) } .box.box2 { c ...
- asp.net core 使用 TestServer 来做集成测试
asp.net core 使用 TestServer 来做集成测试 Intro 之前我的项目里的集成测试是随机一个端口,每次都真实的启动一个 WebServer,之前也有看到过微软文档上 TestSe ...
- 你了解JWT吗?
1. 什么是JWT JWT简称 JSON Web Token,也就是通过 JSON 形式作为 Web 应用中的令牌,用于在各方之间安全地将信息作为 JSON 对象传输.在数据传输过程中还可以完成数据加 ...
- 金九银十想去跳槽面试?那这份Java面经你真得看看了,写的非常详细!
前言 前两天在和朋友吃饭的时候聊到时间这个东西是真的过的好坏啊,金三银四仿佛还在昨天.一眨眼金九银十又快到了,对程序员来说这两个是一年最合适的跳槽涨薪环节了,今年的你已经做好准备了吗?不妨看看这篇文章 ...
- Guitar Pro 功能介绍之RSE引擎
众所周知,Guitar Pro是一个集多音轨丰富音色库的一款软件,并且拥有MIDI 音序器,但是光拥有MIDI是无法让我们制作的音乐可以如此逼真,而Guitar Pro能创造制作这么逼真的音乐,多亏了 ...
- 痞子衡嵌入式:探析开启CRC完整性校验的IAR工程生成.out和.bin文件先后顺序
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是开启CRC完整性校验的IAR工程生成.out和.bin文件先后顺序问题. 痞子衡之前写了一篇 <在IAR开发环境下为工程开启CRC ...
- 牛客练习赛68 牛牛的无向图 题解(krusal思想)
题目链接 题目大意 要你查询q 次询问,每次询问给出一个 L ,询问\(\sum_{i=1}^n\sum_{j=i+1}^n[d(i,j)<=L]\).其中 [C] 表示当命题 C 为真的时候为 ...