基本概念
简单了解 DTO
- 数据传输对象(DTO)(Data Transfer Object),是一种设计模式之间传输数据的软件应用系统。
- 数据传输目标往往是 数据访问对象从数据库中检索数据。
- 数据传输对象与数据交互对象或数据访问对象之间的差异是一个以不具有任何行为除了存储和检索的数据(访问和存取器)。
JdbcTemplate
(原文链接:https://blog.csdn.net/Huangyuhua068/article/details/82142044 )
- JDBC已经能够满足大部分用户最基本的需求,但是在使用JDBC时,必须自己来管理数据库资源如:获取PreparedStatement,设置SQL语句参数,关闭连接等步骤。JdbcTemplate就是Spring对JDBC的封装,目的是使JDBC更加易于使用。JdbcTemplate是Spring的一部分。 JdbcTemplate处理了资源的建立和释放。他帮助我们避免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果
- JdbcTemplate中执行SQL语句的方法大致分为3类:
- execute:没有返回值,可以执行所有的SQL语句,一般用于执行DDL语句。
- update: 返回一个int值,影响的行数,用于执行INSERT、UPDATE、DELETE等DML语句。
- queryXxx: 用于 DQL数据查询语句。
- DQL:数据库查询语言。关键字:SELECT … FROM … WHERE。
- DDL :数据库模式定义语言。关键字:CREATE,DROP,ALTER。
- DML:数据操纵语言。关键字:INSERT、UPDATE、DELETE。
- DCL:数据控制语言 。关键字:GRANT、REVOKE。
- TCL:事务控制语言。关键字:COMMIT、ROLLBACK、SAVEPOINT。
- DDL,DML,DCL,DQL,TCL共同组成数据库的完整语言。
JPA复杂查询
- 使用JdbcTemplate
Repository
package com.ll.repository;
import java.sql.Date;
import java.sql.Types;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class DTODao {
@Resource
private JdbcTemplate jdbcTemplate;
public List<Map<String, Object>> queryHomeWorkDTOListMap(String homework_id) {
String sql="select u.username,uh.homework_id from user_2 u left join user_homework uh on (u.id=uh.user_id and uh.homework_id=?)where u.type='学生' ";
Object[] args = {
homework_id };//传入参数数组,按照顺序放入sql中的 ? 占位符
int[] argTypes = {
Types.VARCHAR };//传入参数的数据类型,一一对应,用来设置参数的数据类型
//return this.jdbcTemplate.queryForList(sql, args, argTypes);
return jdbcTemplate.queryForList(sql, args, argTypes);
}
public List<Map<String, Object>> getHomeworkmaster2ByDateAndType(long sreachDate,String type){
String sql="select * from homeworkmaster2 where open_date=? and type=?";
Date date=new Date(sreachDate);
Object[] args = {
date,type };//传入参数数组,按照顺序放入sql中的 ? 占位符
int[] argTypes = {
Types.DATE, Types.VARCHAR };//传入参数的数据类型,一一对应,用来设置参数的数据类型
//return this.jdbcTemplate.queryForList(sql, args, argTypes);
return jdbcTemplate.queryForList(sql, args, argTypes);
}
}
- jdbctemplate实现查询:
1、queryForObject 查询单个字段
- queryForObject(sql,class) 参数说明:SQL执行的SQL语句, class:查询结果的类型
- queryForObject(sql,class,param) 参数说明:SQL执行的SQL语句 class:查询结果的类型,param就是SQL需要的参数。
2、queryForMap 查询单个对象的数据---------------------Map<String, Object>
- queryForMap 会把一行的数据存储到Map对象中。
- 一个Map对象就存储一条记录, key存储的是列名, value是存储该行数据的值
- queryForMap(sql,参数)
3、 queryForObject查询单个实体对象:
- 使用queryForObject方法,实现查询返回单个实体类对象。
- 结果映射器: BeanPropertyRowMapper。
- queryForObject(sql, new BeanPropertyRowMapper(类型),参数
4、queryForList(sql,参数) 查询多个对象
- 返回一个List对象,List对象存储是Map对象
5、query(sql,new BeanPropertyRowMapper(),参数) 查询多个对象
- 返回的是一个List对象,List对象存储的是实体类
(原文链接:https://blog.csdn.net/Huangyuhua068/article/details/82142044 )
Entity
- 不需要@entity
- 变量可以随意写
- 不会影响数据库
package com.ll.entity;
import java.sql.Date;
public class HomeworkDTO {
private String userName;
private String isSubmit;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getIsSubmit() {
return isSubmit;
}
public void setIsSubmit(String isSubmit) {
this.isSubmit = isSubmit;
}
.....
}
service
package com.zz.service;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.zz.dto.HomeWorkDTO;
import com.zz.repository.DTODao;
import com.zz.util.DateUtil;
@Service
public class HomeWorkService {
@Resource
DTODao dtodao;
//根据id查询提交情况
public ArrayList<HomeworkDTO> getUserHomeworkByMasterId2(String mid){
ArrayList<HomeworkDTO> ls=new ArrayList<HomeworkDTO>();
List<Map<String, Object>> listmap=dtodao.queryHomeWorkDTOListMap(mid);
for(int i=0;i<listmap.size();i++) {
String username=(String) listmap.get(i).get("username");
String hmid=(String) listmap.get(i).get("homework_id");
HomeworkDTO hd=new HomeworkDTO();
hd.setUserName(username);
if(hmid==null||"".equals(hmid)) {
hd.setIsSubmit("未提交");
}else {
hd.setIsSubmit("已提交");
}
ls.add(hd);
}
return ls;
}
public ArrayList<HomeWorkDTO> getHomewokmasterByDateAndType(long sreachDate,String type){
ArrayList<HomeWorkDTO> ls=new ArrayList<HomeWorkDTO>();
List<Map<String, Object>> listmap=dtodao.getHomewokmasterByDateAndType(sreachDate, type);
for(int i=0;i<listmap.size();i++){
String id=(String) listmap.get(i).get("id");
String title=(String) listmap.get(i).get("title");
String type1=(String) listmap.get(i).get("type");
String content=(String) listmap.get(i).get("content");
System.out.println( listmap.get(i).get("update_time"));
SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String update_timestr= listmap.get(i).get("update_time").toString();
String open_datestr=listmap.get(i).get("open_date").toString();
HomeWorkDTO hk=new HomeWorkDTO();
try {
java.util.Date udate=s.parse(update_timestr);
hk.setUpdate_time(DateUtil.tranceToSqlDate(udate));
java.util.Date udate2=s.parse(open_datestr);
hk.setOpen_date(DateUtil.tranceToSqlDate(udate2));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("***********"+hk.getUpdate_time());
hk.setId(id);
hk.setType(type1);
hk.setContent(content);
ls.add(hk);
}
return ls;
}
}
controller
package com.zz.controller;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.zz.dto.HomeWorkDTO;
import com.zz.service.HomeWorkService;
@RestController
@RequestMapping("hc")
public class HomeWorkController {
@Resource
HomeWorkService hservice;
@RequestMapping("submitdetail/{id}")
public ArrayList<HomeWorkDTO> getHomeworkdetailByMasterId2(@PathVariable("id") String mid){
return hservice.getHomeworkdetailByMasterId2(mid);
}
@RequestMapping("getbydatetype/{date}/{type}")
public ArrayList<HomeWorkDTO> getHomewokmasterByDateAndType(@PathVariable("date") long sreachDate,@PathVariable("type") String type){
SimpleDateFormat sformat=new SimpleDateFormat("yyyy-MM-dd");
Date d=null;
try {
d=sformat.parse("2019-07-27");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return hservice.getHomewokmasterByDateAndType(d.getTime(), type);
}
}
- springboot controller地址传值:
- 1、 在拦截路径上用{参数名字} ------@RequestMapping(“submitdetail/{id}”)
- 2、使用@PathVariable(参数名字) 获取参数值------------(@PathVariable(“id”) String mid)