好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java如何使用Query动态拼接SQL详解

前言

之前有做个一个自定义报表的查询,这里使用的是一个动态的sql拼接,是前端选择了什么指标就查询什么信息!(这里的指标是多个表的字段,前端随便选择了这些指标,然后后端根据这些指标拼接sql,返回这些指标的数据)。

参数接受dto

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

public class definedreportformdto {

  /**

  * 指标id

  */

  private list ids;

  /**

  * 开始时间

  */

  @datetimeformat (pattern = "yyyy-mm" )

  private date starttime;

  /**

  * 结束时间

  */

  @datetimeformat (pattern = "yyyy-mm" )

  private date endtime;

  /**

  * 频率

  */

  private string timestyle;

 

 

  private boolean avg = false ;

 

  private string idsparam;

 

  private string companyidsparam;

 

  public void setcompanyidsparam(string companyidsparam) {

  this 测试数据panyidsparam = companyidsparam;

  }

 

  public void setidsparam(string idsparam) {

  this .idsparam = idsparam;

  }

 

  public string getcompanyidsparam() {

  return companyidsparam;

  }

 

  public string getidsparam() {

  return idsparam;

  }

  public boolean isavg() {

  return avg;

  }

 

  public void setavg( boolean avg) {

  this .avg = avg;

  }

 

 

  public date getstarttime() {

  return starttime;

  }

 

  public void setstarttime(date starttime) {

  this .starttime = starttime;

  }

 

  public date getendtime() {

  return endtime;

  }

 

  public void setendtime(date endtime) {

  this .endtime = endtime;

  }

 

  public string gettimestyle() {

  return timestyle;

  }

 

  public void settimestyle(string timestyle) {

  this .timestyle = timestyle;

  }

 

  public list getids() {

  return ids;

  }

 

  public void setids(list ids) {

  this .ids = ids;

  }

}

数据返回vo

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

public class definedreportformvo implements serializable {

  private string time;

  private list<map<string, object>> arr = new arraylist<>();

 

  public string gettime() {

  return time;

  }

 

  public void settime(string time) {

  this .time = time;

  }

 

  public list<map<string, object>> getarr() {

  return arr;

  }

 

  public void setarr(list<map<string, object>> arr) {

  this .arr = arr;

  }

}

控制器controller

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

@getmapping ( "/report/defindreport" )

  public jsonresponseext defindreport(definedreportformdto definedreportformdto){

 

 

 

 

  //测试数据

 

 

  list list1 = new arraylist<>();

  list1.add( "111" );

  definedreportformdto.setids(list1);

  definedreportformdto.settimestyle( "month" );

  definedreportformdto.setavg( true );

 

  calendar instance = calendar.getinstance();

  instance.set( 2018 , 1 , 11 );

  definedreportformdto.setstarttime(instance.gettime());

  instance.settime( new date());

  definedreportformdto.setendtime(instance.gettime());

 

  return jsonresponseext.success(dataacquisitionfileinfoservice.defindquery(definedreportformdto));

 

  }

服务类service

?

1

2

3

4

5

public interface dataacquisitionfileinfoservice {

 

  list<definedreportformvo> defindquery(definedreportformdto parameter);

 

  }

实现类serviceimpl

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

352

353

354

355

356

357

358

359

360

361

362

363

364

365

366

367

368

369

370

371

372

373

374

375

376

377

378

379

380

381

382

383

384

385

386

387

388

389

390

391

392

393

394

395

396

397

398

399

400

401

402

403

404

@suppresswarnings ( "unchecked" )

  @override

  public list<definedreportformvo> defindquery(definedreportformdto parameter) {

 

 

  /**

 

 

   * 定义五张表的查询字符串,年月,和机构id默认查询

   */

  stringbuilder orginformationcbrc = new stringbuilder( "select reporting_year as reportingyear,reporting_month as reportingmonth, company_id ," );

  stringbuilder orgbasicinformation = new stringbuilder( "select reporting_year as reportingyear,reporting_month as reportingmonth, company_id," );

  stringbuilder orgbusinessstructure = new stringbuilder( "select reporting_year as reportingyear,reporting_month as reportingmonth, company_id," );

  stringbuilder orgprofit = new stringbuilder( "select reporting_year as reportingyear,reporting_month as reportingmonth, company_id," );

  stringbuilder orgbalancesheets = new stringbuilder( "select reporting_year as reportingyear,reporting_month as reportingmonth, company_id," );

 

  //定义机构的字符串

  stringbuilder companyids = new stringbuilder( "" );

  //查询所有机构

  list<company> orglist = orgservice.getorglist();

 

  //拼接所有机构的字符串(如果需要求平均数的话)

  for (company company : orglist) {

   companyids.append(company.getid()+ "," );

  }

 

  companyids.deletecharat(companyids.length()- 1 );

  //定义每个表的字符串判断

  map<string ,string> bool = new hashmap<>();

 

  //指标名

  list<string> fieldnames = new arraylist();

  //返回结果

  list<map<string,object>> result = new arraylist<>();

 

  //指标名默认添加年月机构id

  fieldnames.add( "reportingyear" );

  fieldnames.add( "reportingmonth" );

  fieldnames.add( "companyid" );

  //定义指标id集合

  list ids = parameter.getids();

  //循环所有的指标

  for (object id : ids) {

   //如果指标为空

   if (! "" .equals(id) && id != null ) {

   //根据指标id查询指标

   orgstatisticalindicators orgstatisticalindicators = orgstatisticalindicatorsrespository.findbyidandanddelflag( long .parselong(id.tostring()));

   if (( "year" .equals(parameter.gettimestyle()) && "0" .equals(orgstatisticalindicators.getyearquery())) || ( "month" .equals(parameter.gettimestyle()) && "0" .equals(orgstatisticalindicators.getmonthquery()))){

    /**

    * 判断指标所在的表,然后为各自的表拼接上表的字段

    */

    if ( "org_information_cbrc" .equals(orgstatisticalindicators.gettablename())) {

    orginformationcbrc.append( "ifnull(" +orgstatisticalindicators.gettablefield()+ ",0) as " +orgstatisticalindicators.getfield()+ " ," );

    //

    if (bool.get( "org_information_cbrc" ) == null ) {

     bool.put( "org_information_cbrc" , orgstatisticalindicators.gettablefield());

    }

    //如果其他表不存在这个属性则为其他表拼接null

    orgbasicinformation.append( "null as " + orgstatisticalindicators.getfield() + "," );

    orgbalancesheets.append( "null as " + orgstatisticalindicators.getfield() + "," );

    orgbusinessstructure.append( "null as " + orgstatisticalindicators.getfield() + "," );

    orgprofit.append( "null as " + orgstatisticalindicators.getfield() + "," );

 

    //行业平均

    if (parameter.isavg()) {

     if ( "year" .equals(parameter.gettimestyle())){

     orginformationcbrc.append( "(select avg(" +orgstatisticalindicators.gettablefield()+ ") from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = '12' ) as " +orgstatisticalindicators.getfield()+ "avg," );

     } else {

     orginformationcbrc.append( "(select avg(" +orgstatisticalindicators.gettablefield()+ ") from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

     }

 

 

     orgbalancesheets.append( "(select avg(null) from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

 

     orgbasicinformation.append( "(select avg(null) from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

 

     orgbusinessstructure.append( "(select avg(null) from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

 

     orgprofit.append( "(select avg(null) from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

 

 

 

 

    }

 

 

    } else if ( "org_basic_information" .equals(orgstatisticalindicators.gettablename())) {

    if (bool.get( "org_basic_information" ) == null ) {

     bool.put( "org_basic_information" , orgstatisticalindicators.gettablefield());

    }

 

    orgbasicinformation.append( "ifnull(" +orgstatisticalindicators.gettablefield()+ ",0) as " +orgstatisticalindicators.getfield()+ " ," );

    orginformationcbrc.append( "null as " + orgstatisticalindicators.getfield() + "," );

    orgbalancesheets.append( "null as " + orgstatisticalindicators.getfield() + "," );

    orgbusinessstructure.append( "null as " + orgstatisticalindicators.getfield() + "," );

    orgprofit.append( "null as " + orgstatisticalindicators.getfield() + "," );

 

    //行业平均

    if (parameter.isavg()) {

     if ( "year" .equals(parameter.gettimestyle())){

     orgbasicinformation.append( "(select avg(" +orgstatisticalindicators.gettablefield()+ ") from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = '12' ) as " +orgstatisticalindicators.getfield()+ "avg," );

     } else {

     orgbasicinformation.append( "(select avg(" +orgstatisticalindicators.gettablefield()+ ") from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

     }

 

     orgprofit.append( "(select avg(null) from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

     orginformationcbrc.append( "(select avg(null) from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

     orgbalancesheets.append( "(select avg(null) from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

     orgbusinessstructure.append( "(select avg(null) from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

 

    }

 

    } else if ( "org_business_structure" .equals(orgstatisticalindicators.gettablename())) {

    orgbusinessstructure.append( "ifnull(" +orgstatisticalindicators.gettablefield()+ ",0) as " +orgstatisticalindicators.getfield()+ " ," );

    if (bool.get( "org_business_structure" ) == null ) {

     bool.put( "org_business_structure" , orgstatisticalindicators.gettablefield());

    }

 

 

    orgbasicinformation.append( "null as " + orgstatisticalindicators.getfield() + "," );

    orginformationcbrc.append( "null as " + orgstatisticalindicators.getfield() + "," );

    orgbalancesheets.append( "null as " + orgstatisticalindicators.getfield() + "," );

    orgprofit.append( "null as " + orgstatisticalindicators.getfield() + "," );

 

    //行业平均

    if (parameter.isavg()) {

     if ( "year" .equals(parameter.gettimestyle())){

     orgbusinessstructure.append( "(select avg(" +orgstatisticalindicators.gettablefield()+ ") from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = '12' ) as " +orgstatisticalindicators.getfield()+ "avg," );

     } else {

     orgbusinessstructure.append( "(select avg(" +orgstatisticalindicators.gettablefield()+ ") from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

     }

 

     orgprofit.append( "(select avg(null) from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

     orginformationcbrc.append( "(select avg(null) from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

     orgbalancesheets.append( "(select avg(null) from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

     orgbasicinformation.append( "(select avg(null) from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

 

 

 

 

 

    }

    } else if ( "org_profit" .equals(orgstatisticalindicators.gettablename())) {

    orgprofit.append( "ifnull(" +orgstatisticalindicators.gettablefield()+ ",0) as " +orgstatisticalindicators.getfield()+ " ," );

    if (bool.get( "org_profit" ) == null ) {

     bool.put( "org_profit" , orgstatisticalindicators.gettablefield());

    }

 

    orgbasicinformation.append( "null as " + orgstatisticalindicators.getfield() + "," );

    orginformationcbrc.append( "null as " + orgstatisticalindicators.getfield() + "," );

    orgbalancesheets.append( "null as " + orgstatisticalindicators.getfield() + "," );

    orgbusinessstructure.append( "null as " + orgstatisticalindicators.getfield() + "," );

 

    //行业平均

    if (parameter.isavg()) {

     if ( "year" .equals(parameter.gettimestyle())){

     orgprofit.append( "(select avg(" +orgstatisticalindicators.gettablefield()+ ") from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = '12' ) as " +orgstatisticalindicators.getfield()+ "avg," );

     } else {

     orgprofit.append( "(select avg(" +orgstatisticalindicators.gettablefield()+ ") from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

     }

 

     orgbasicinformation.append( "(select avg(null) from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

     orginformationcbrc.append( "(select avg(null) from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

     orgbalancesheets.append( "(select avg(null) from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

     orgbusinessstructure.append( "(select avg(null) from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

 

 

 

    }

 

    } else if ( "org_balance_sheets" .equals(orgstatisticalindicators.gettablename())) {

    orgbalancesheets.append( "ifnull(" +orgstatisticalindicators.gettablefield()+ ",0) as " +orgstatisticalindicators.getfield()+ " ," );

    if (bool.get( "org_balance_sheets" ) == null ) {

     bool.put( "org_balance_sheets" , orgstatisticalindicators.gettablefield());

    }

 

 

    orgbasicinformation.append( "null as " + orgstatisticalindicators.getfield() + "," );

    orginformationcbrc.append( "null as " + orgstatisticalindicators.getfield() + "," );

    orgbusinessstructure.append( "null as " + orgstatisticalindicators.getfield() + "," );

    orgprofit.append( "null as " + orgstatisticalindicators.getfield() + "," );

 

    //行业平均

    if (parameter.isavg()) {

     if ( "year" .equals(parameter.gettimestyle())){

     orgbalancesheets.append( "(select avg(" +orgstatisticalindicators.gettablefield()+ ") from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = '12' ) as " +orgstatisticalindicators.getfield()+ "avg," );

     } else {

     orgbalancesheets.append( "(select avg(" +orgstatisticalindicators.gettablefield()+ ") from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

     }

 

 

     orgprofit.append( "(select avg(null) from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

     orginformationcbrc.append( "(select avg(null) from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

     orgbalancesheets.append( "(select avg(null) from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

     orgbusinessstructure.append( "(select avg(null) from " +orgstatisticalindicators.gettablename()+ " where reporting_year = reportingyear and reporting_month = reportingmonth) as " +orgstatisticalindicators.getfield()+ "avg," );

 

    }

    }

    if (parameter.isavg()== true ) {

    fieldnames.add(orgstatisticalindicators.getfield());

    fieldnames.add(orgstatisticalindicators.getfield()+ "avg" );

    } else {

    fieldnames.add(orgstatisticalindicators.getfield());

    }

 

   }

 

   }

  }

 

 

  //拼接where条件

  stringbuilder wheresql = new stringbuilder( " where 1 = 1" );

 

 

  if ( "year" .equals(parameter.gettimestyle())){

   wheresql.append( " and reporting_year >= :startyear and reporting_year <= :endyear and reporting_month = '12' " );

  } else {

   wheresql.append( " and concat(reporting_year , '-' ,right(100+cast(reporting_month as signed),2) )>= :startyear and concat(reporting_year , '-' ,right(100+cast(reporting_month as signed),2) ) <= :endyear" );

  }

 

  //获取所有机构id

  list parametercompanyids = parameter.getcompanyids();

  //如果机构id不为空

  if (parametercompanyids.size()> 0 ) {

   wheresql.append( " and company_id in ( " );

 

 

   for ( int i = 0 ; i < parametercompanyids.size(); i++) {

   wheresql.append( ":s" +i+ " ," );

   }

 

   wheresql.deletecharat(wheresql.length()- 1 );

   wheresql.append( " )" );

  }

 

  //定义query

  query orgbalancesheetsquery = null ;

 

 

 

  //拼接五张表和条件

  orgbalancesheets.deletecharat(orgbalancesheets.length()- 1 );

  orgbalancesheets.append( " from org_balance_sheets " );

  orgbalancesheets.append(wheresql);

 

  orgbasicinformation.deletecharat(orgbasicinformation.length()- 1 );

  orgbasicinformation.append( " from org_basic_information " );

  orgbasicinformation.append(wheresql);

 

  orgbusinessstructure.deletecharat(orgbusinessstructure.length()- 1 );

  orgbusinessstructure.append( " from org_business_structure " );

  orgbusinessstructure.append(wheresql);

 

  orginformationcbrc.deletecharat(orginformationcbrc.length()- 1 );

  orginformationcbrc.append( " from org_information_cbrc " );

  orginformationcbrc.append(wheresql);

 

 

  orgprofit.deletecharat(orgprofit.length()- 1 );

  orgprofit.append( " from org_profit " );

  orgprofit.append(wheresql);

 

 

  //关联五张表

  orgbalancesheets.append( " union " );

  orgbalancesheets.append(orgbasicinformation.tostring());

 

  orgbalancesheets.append( " union " );

  orgbalancesheets.append(orgbusinessstructure.tostring());

 

  orgbalancesheets.append( " union " );

  orgbalancesheets.append(orginformationcbrc.tostring());

 

  orgbalancesheets.append( " union " );

  orgbalancesheets.append(orgprofit.tostring());

 

 

  system.out.println( ">>" +orgbalancesheets.tostring());

 

 

  //创建本地sql查询实例

  orgbalancesheetsquery = entitymanager.createnativequery(orgbalancesheets.tostring());

 

  //如果时间为空那就获取现在的时间

  if (parameter.getendtime() == null ){

   parameter.setendtime( new date());

  }

  if (parameter.getstarttime() == null ){

   parameter.setstarttime( new date());

  }

 

 

  if ( "year" .equals(parameter.gettimestyle())){

 

   orgbalancesheetsquery.setparameter( "startyear" , com.honebay.spv.core.utils.dateutil.formatdate(parameter.getstarttime(), "yyyy" ));

 

   orgbalancesheetsquery.setparameter( "endyear" , com.honebay.spv.core.utils.dateutil.formatdate(parameter.getendtime(), "yyyy" ));

  } else if ( "month" .equals(parameter.gettimestyle())){

 

 

   orgbalancesheetsquery.setparameter( "startyear" , com.honebay.spv.core.utils.dateutil.formatdate(parameter.getstarttime(), "yyyy-mm" ));

 

   orgbalancesheetsquery.setparameter( "endyear" , com.honebay.spv.core.utils.dateutil.formatdate(parameter.getendtime(), "yyyy-mm" ));

 

 

  }

 

 

 

 

  if (parametercompanyids.size()> 0 ) {

 

   for ( int i = 0 ; i < parametercompanyids.size(); i++) {

   orgbalancesheetsquery.setparameter( "s" +i, parametercompanyids.get(i));

   }

  }

 

 

  //获取数据

  list resultlist = orgbalancesheetsquery.getresultlist();

 

 

  system.out.println( "resultlist===" +resultlist);

 

  //给数据设置属性

  for ( int i = 0 ; i < resultlist.size(); i++) {

   object o = resultlist.get(i);

   object[] cells = (object[]) o;

   map<string,object> map = new hashmap<>();

   if (cells.length == 3 ){

   continue ;

   }

   for ( int j = 0 ; j<cells.length; j++) {

 

   if (cells[j] != null && ! "" .equals(cells[j].tostring())) {

    map.put((string) fieldnames.get(j),cells[j]);

   } else {

    setfield(resultlist,fieldnames,map,i,j);

   }

 

   }

   result.add(map);

  }

 

  system.out.println( "result == " +result);

 

 

  list<definedreportformvo> definedreportformvolist = new arraylist<>();

  map<string,list> stringlistmap = new hashmap<>();

 

 

 

  //定义返回的格式

  for (map<string, object> map : result) {

   string reportingyear = (string) map.get( "reportingyear" );

   string reportingmonth = (string) map.get( "reportingmonth" );

   string reportingdate = reportingyear+ "-" +reportingmonth;

   //如果时间类型是年

   if ( "year" .equals(parameter.gettimestyle())) {

   list list = stringlistmap.get(reportingyear);

   if (list != null ) {

    list.add(map);

    stringlistmap.put(reportingyear,list);

   } else {

    list inner = new arraylist();

    inner.add(map);

    stringlistmap.put(reportingyear,inner);

   }

   } else { //如果为月

 

   list list = stringlistmap.get(reportingdate);

   if (list != null ) {

    list.add(map);

    stringlistmap.put(reportingdate,list);

   } else {

    list inner = new arraylist();

    inner.add(map);

    stringlistmap.put(reportingdate,inner);

   }

   }

 

  }

 

  system.out.println( "stringlistmap == " +stringlistmap);

 

 

  for (map.entry<string,list> entry : stringlistmap.entryset()) {

   definedreportformvo formvo = new definedreportformvo();

   formvo.settime(entry.getkey());

 

   if (parameter.isavg()== true ){

   formvo.setarr(setavg(entry.getvalue(),fieldnames));

   } else {

   formvo.setarr(entry.getvalue());

   }

 

   definedreportformvolist.add(formvo);

 

  }

 

 

  return definedreportformvolist;

  }

指标实体

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

/**

  * 统计指标

  */

@entity

@table (name = "org_statistical_indicators" , catalog = "zhsupervision" )

public class orgstatisticalindicators {

  @id

  @generatedvalue

  private long id;

  /**

  * 前端显示名

  */

  private string name;

  /**

  * 表属性

  */

  private string tablefield;

  /**

  * 表名称

  */

  private string tablename;

  /**

  * 创建时间

  */

  private date createtime;

  /**

  * 更新时间

  */

  private date updatetime;

  /**

  * 删除标识

  */

  private string delflag;

  //父节点

  private long pid;

  //属性

  private string field;

  //该指标查询月的时候是否查询

  private string monthquery;

  //该指标查询年的时候是否查询

  private string yearquery;

 

  public string getmonthquery() {

  return monthquery;

  }

 

  public void setmonthquery(string monthquery) {

  this .monthquery = monthquery;

  }

 

  public string getyearquery() {

  return yearquery;

  }

 

  public void setyearquery(string yearquery) {

  this .yearquery = yearquery;

  }

 

  public string getfield() {

  return field;

  }

 

  public void setfield(string field) {

  this .field = field;

  }

 

  public long getid() {

  return id;

  }

 

  public void setid( long id) {

  this .id = id;

  }

 

  public long getpid() {

  return pid;

  }

 

  public void setpid( long pid) {

  this .pid = pid;

  }

 

  public string getname() {

  return name;

  }

 

  public void setname(string name) {

  this .name = name;

  }

 

  public string gettablefield() {

  return tablefield;

  }

 

  public void settablefield(string tablefield) {

  this .tablefield = tablefield;

  }

 

  public string gettablename() {

  return tablename;

  }

 

  public void settablename(string tablename) {

  this .tablename = tablename;

  }

 

  public date getcreatetime() {

  return createtime;

  }

 

  public void setcreatetime(date createtime) {

  this .createtime = createtime;

  }

 

  public date getupdatetime() {

  return updatetime;

  }

 

  public void setupdatetime(date updatetime) {

  this .updatetime = updatetime;

  }

 

  public string getdelflag() {

  return delflag;

  }

 

  public void setdelflag(string delflag) {

  this .delflag = delflag;

  }

}

指标service

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

/**

  * 统计指标服务类

  */

public interface orgstatisticalindicatorsservice {

  /**

  * 根据id获取

  * @param id

  * @return

  */

  orgstatisticalindicators findorgstatisticalindicatorsbyid( long id);

 

  /**

  * 根据表名查询

  */

  list<orgstatisticalindicators> findorgstatisticalindicatorsbytablename(string name);

 

}

指标serviceimpl

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

@service

public class orgstatisticalindicatorsserviceimpl extends baseserviceimpl<orgstatisticalindicators, string> implements orgstatisticalindicatorsservice {

 

  @autowired

  private orgstatisticalindicatorsrespository respository;

 

  @override

  public orgstatisticalindicators findorgstatisticalindicatorsbyid( long id) {

  return respository.findbyidandanddelflag(id);

  }

 

  @override

  public list<orgstatisticalindicators> findorgstatisticalindicatorsbytablename(string name) {

  return respository.findorgstatisticalindicatorsbytablename(name);

  }

}

指标repository

?

1

2

3

4

5

6

7

8

public interface orgstatisticalindicatorsrespository extends jpaspecificationexecutor {

 

  @query (value = "select * from org_statistical_indicators where id=?1 and del_flag = '0'" ,nativequery = true )

  orgstatisticalindicators findbyidandanddelflag( long id);

 

  @query (value = "select * from org_statistical_indicators where del_flag = '0' and name =?1" ,nativequery = true )

  orgstatisticalindicators findorgstatisticalindicatorsbyname(string name);

}

这个repository要继承 extends jparepository<t, id> 才可以,写漏了。

上面使用了union 进行表之间的关联查询,关联的表有点多,所以代码有些长,同时因为表多,指标(表的属性)有500多个,无法确定查询的返回实体,所以只能自己根据数据的返回给数据绑定属性。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

原文链接:https://HdhCmsTestcnblogs测试数据/xiluonanfeng/p/10245974.html

查看更多关于Java如何使用Query动态拼接SQL详解的详细内容...

  阅读:27次