create table market(num smallint auto_increment primary key,
sang varchar(30),
price int,
photoname varchar(50),
ipgoday datetime);
#tomcat port
server:
port: 9001
#jsp
spring:
mvc:
view:
prefix: /WEB-INF/
suffix: .jsp
devtools:
livereload:
enabled: true
#mysql
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: url
username: name
password: pw
#mybatis
mybatis:
type-aliases-package: data.model.dto,data.model.mapper
#data.model.*..dao(mapper)패키지,dto패키지 등록
mapper-locations:
- /mapper/**/*.xml
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.1</version>
</dependency>
<!-- jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- tomcat-embed-jasper -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
@Data
@Alias("mdto") //mybatis에서는 dto의 타입을 사용,dto타입 지정
public class MarketDto {
private int num;
private int price;
private String sang;
private String photoname;
private Timestamp ipgoday;
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="data.model.mapper.MarketMapperInter">
<select id="getTotalCount" resultType="int">
select count(*) from market
</select>
<select id="getAllSangs" resultType="mdto">
select * from market order by sang
</select>
<insert id="insertMarket" parameterType="mdto">
insert into market (sang,price,photoname,ipgoday) values(#{sang},#{price},#{photoname},now())
</insert>
</mapper>
@Mapper //Repository와 같은개념..인터페이스에도 가능
public interface MarketMapperInter {
public int getTotalCount(); //메서드명이 id역할..id가 똑같아야함
public List<MarketDto> getAllSangs();
public void insertMarket(MarketDto dto);
public MarketDto getData(int num);
public void updateMarket(MarketDto dto);
public void deleteMarket(int num);
}
@Controller
public class MarketController {
@Autowired
MarketMapperInter mapper;
@GetMapping("/market/list")
public ModelAndView list() {
ModelAndView model=new ModelAndView();
int totalCount=mapper.getTotalCount();
List<MarketDto> list=mapper.getAllSangs();
model.addObject("totalCount", totalCount);
model.addObject("list", list);
model.setViewName("market/marketList");
return model;
}
@PostMapping("/market/add")
public ModelAndView add(@ModelAttribute("mdto") MarketDto dto,
MultipartFile multi,
HttpSession session) {
ModelAndView model=new ModelAndView();
model.setViewName("redirect:list");
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss");
String path=session.getServletContext().getRealPath("save");
String fName=multi.getOriginalFilename();
String photo=sdf.format(new Date())+fName;
try {
multi.transferTo(new File(path+"\\"+photo));
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
dto.setPhotoname(photo);
mapper.insertMarket(dto);
return model;
}
}
파일 업로드 시 <form type=”file”>의 name 속성(Controller의 MultipartFile 참조변수명)과 DB의 컬럼명이 일치할 시 파일 업로드 실패