728x90
#1) 프로젝트 개발 환경
intellj , java(jdk-11), spring boot2.7.17, mysql , maven, jsp(jstl)
#2) 프로젝트 의존성을 추가
Lombok, spring web , spring dev tools, mysql driver, mybatis framewrok
총 5가지를 추가했습니다.
#3) 기본 설정
pom.xml
<!-- jstl (인텔리제이는 jar추가하면대서 안넣어도댐-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- Tomcat 사용 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
이 두가지를 추가해줍니다.
다음으로는 application.properties를 추가 해 줍니다.
이 설정은 yml 이나 properties 어느 것이든 상관 없습니다.
application.properties
#server.port설정
server.port=8080
#jsp 설정
spring.mvc.view.prefix=/WEB-INF/폴더이름/
spring.mvc.view.suffix=.jsp
spring.devtools.livereload.enabled=true
#MySql 설정
class.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://@localhost:3306/spring?serverTimezone=Asia/Seoul
spring.datasource.username=root
spring.datasource.password=1234
#mysql 상세 지정
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
#4) 메인 어플리케이션 설정
@SpringBootApplication
@ComponentScan({"data.model.*"}) //컨트롤러가 경로 찾을 패키지 명 적기
@MapperScan({"data.model.*"}) //mybatis에서 mapper실행하기 위한 위한 경로 적기
public class SpringBootMybatis4Application {
public static void main(String[] args) {
SpringApplication.run(SpringBootMybatis4Application.class, args);
}
}
#5) 클래스 생성 (패키지 경로 / 클래스이름.class)
data.model.dto / MarketDto.class
@Data //lombok -> getter/setter 해주는 것
@Alias("mdto") -> mapper에서 이 dto클래스 별명을 정한것, 이 별명을 사용함 mapper에서
public class MarKetDto {
private String num;
private int price;
private String sang;
private String photoname;
private Timestamp ipgoday;
}
data.model.service / MarketServiceInter
public interface MarketServiceInter {
//중요!!!!!!!!!! 메소드 이름 == mappper에 이름 같아야함
public int getTotalCount();
public List<MarKetDto> getAllSangpum();
public void insertSangpum(MarKetDto dto);
public MarKetDto getNum(int num);
public void deleteOfMarket(String num);
public void updateOfMarket(MarKetDto dto);
}
data.model.service / MarketService → inter 구현하는 클래스
@Service
public class MarketService implements MarketServiceInter {
@Autowired
MarketMapperInter mapperInter;
@Override
public int getTotalCount() {
return mapperInter.getTotalCount();
}
@Override
public List<MarKetDto> getAllSangpum() {
return mapperInter.getAllSangpum();
}
@Override
public void insertSangpum(MarKetDto dto) {
mapperInter.insertSangpum(dto);
}
@Override
public MarKetDto getNum(String num) {
return mapperInter.getNum(num);
}
@Override
public void deleteOfMarket(String num) {
mapperInter.deleteOfMarket(num);
}
@Override
public void updateOfMarket(MarKetDto dto) {
mapperInter.updateOfMarket(dto);
}
}
XML → mapper
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://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="getAllSangpum" resultType="mdto">
select * from market order by num desc
</select>
<insert id="insertSangpum" parameterType="mdto">
insert into market values(null,#{sang},#{price},#{photoname},now())
</insert>
<select id="getNum" resultType="mdto" parameterType="String">
select * from market where num=#{num}
</select>
<delete id="deleteOfMarket" parameterType="String">
delete from market where num=#{num}
</delete>
<update id="updateOfMarket" parameterType="mdto">
update set market sang=#{sang},price=#{price},photoname=#{photoname} where num=#{num}
</update>
</mapper>
data.model.mapper / MarketMapperInter
public interface MarketMapperInter {
public int getTotalCount(); //메소드 이름 == mappper에 이름이 된다.
public List<MarKetDto> getAllSangpum();
public void insertSangpum(MarKetDto dto);
public MarKetDto getNum(String num);
public void deleteOfMarket(String num);
public void updateOfMarket(MarKetDto dto);
}
Controller
@Controller
public class MarketController {
@Autowired
MarketService service;
//root 설정
@GetMapping("/")
public String start() {
return "redirect:market/marketlist";
}
//여기에 /market/을 하였기 때문에 초기 중간경로가 market으로 설정 그러므로 중간경로에 market을 꼭 써줘야한다
@GetMapping("/market/marketlist")
public ModelAndView list() {
ModelAndView modelAndView = new ModelAndView();
//DB로부터 총 갯수 얻기
int totalCount = service.getTotalCount();
List<MarKetDto> list = service.getAllSangpum();
modelAndView.addObject("totalcount", totalCount);
modelAndView.addObject("list", list);
modelAndView.setViewName("market/marketlist");
return modelAndView;
}
//writeform으로 포워딩
@GetMapping("/market/writeform")
public String writeform() {
return "market/addForm";
}
//사진 파일 insert 하기
@PostMapping("/market/add")
public String add(Model model, @ModelAttribute MarKetDto dto,
MultipartFile uphotoname,
HttpSession session) {
List<MultipartFile> list = new ArrayList<MultipartFile>();
//업로드할 save 경로 구하기
String path = session.getServletContext().getRealPath("/save");
System.out.println(path);
//압로드한 파일 dto 얻기
dto.setPhotoname(uphotoname.getOriginalFilename());
//실제 업로드
try {
uphotoname.transferTo(new File(path + "\\" + uphotoname.getOriginalFilename()));
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
model.addAttribute("dto", dto);
service.insertSangpum(dto);
return "redirect:marketlist";
}
@GetMapping("/market/delete")
public String delete(@RequestParam String num, HttpServletRequest request) {
//글 삭제시 실제 경로 사진도 삭제되게 만들기.
String photo = service.getNum(num).getPhotoname();
if (!photo.equals(null)) {
String path = request.getServletContext().getRealPath("/save");
File file = new File(path + "\\" + photo);
file.delete();
}
//삭제
service.deleteOfMarket(num);
return "redirect:marketlist";
}
//update 폼으로 넘어가기.
@GetMapping("/market/update")
public ModelAndView update(@ModelAttribute MarKetDto dto) {
ModelAndView modelandview = new ModelAndView();
modelandview.addObject("dto", dto);
modelandview.setViewName("market/uform");
return modelandview;
}
@PostMapping("/market/updateform")
public ModelAndView updateform(@ModelAttribute MarKetDto dto) {
ModelAndView modelandview = new ModelAndView();
modelandview.addObject("dto", dto);
//업데이트
service.updateOfMarket(dto);
modelandview.setViewName("redirect:marketlist");
return modelandview;
}
}
폼은 없이 crud 로직만 작성했습니다. 이상입니다.
728x90