dependencies 추가
5가지 필요
jpa 주석 부분 추가
<!-- 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>
<!-- jpa -->
<!-- jaxb-runtime -->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
#JPA setting
#스키마생성 create:기존테이블을 삭제 후 생성,update:변경된 부분만 반영
spring.jpa.hibernate.ddl-auto=update
#ddl생성시 데이터베이스의 고유 기능을 사용할지
spring.jpa.generate-ddl=true
#api호출시 실행되는 sql문을 콘솔에 보여줄지
spring.jpa.show-sql=true
#사용할 프로그램 종류에 따라 아래줄들은 바꿔줘야한다 위는 동일
#사용할 데이터베이스 종류
spring.jpa.database=mysql
#mysql setting
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/coffee?serverTimezone=Asia/Seoul
spring.datasource.username=tjdgus
spring.datasource.password=1234
#mysql상세지정
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
#jsp setting
spring.mvc.view.prefix=/WEB-INF/mycar/
spring.mvc.view.suffix=.jsp
spring.devtools.livereload.enabled=true
server.port=9002
#mysql setting
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/coffee?serverTimezone=Asia/Seoul
spring.datasource.username=tjdgus
spring.datasource.password=1234
#JPA setting
#스키마생성 create:기존테이블을 삭제 후 생성,update:변경된 부분만 반영
spring.jpa.hibernate.ddl-auto=update
#ddl생성시 데이터베이스의 고유 기능을 사용할지
spring.jpa.generate-ddl=true
#api호출시 실행되는 sql문을 콘솔에 보여줄지
spring.jpa.show-sql=true
#사용할 프로그램 종류에 따라 아래줄들은 바꿔줘야한다 위는 동일
#사용할 데이터베이스 종류
spring.jpa.database=mysql
#mysql상세지정
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
#jsp setting
spring.mvc.view.prefix=/WEB-INF/mycar/
spring.mvc.view.suffix=.jsp
spring.devtools.livereload.enabled=true
dto인식
테이블이 어디에 생성됐는지에 대한 것을 등록
정확한 패키지명 등록 와일드카드(*)사용 불가
@EntityScan("mycar.data") //dto인식 //테이블이 어디에 생성됐는지에 대한 것을 등록
dao인식
repository에 관한 bean 등록
정확한 패키지명 등록 와일드카드(*)사용 불가
@EnableJpaRepositories("mycar.data") //dao인식 //repository에 관한 bean 등록
package boot.mvc.tea;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@SpringBootApplication
@ComponentScan({"mycar.data"})
@EntityScan("mycar.data") //dto인식 //테이블이 어디에 생성됐는지에 대한 것을 등록
@EnableJpaRepositories("mycar.data") //dao인식 //repository에 관한 bean 등록
public class SpringBootJpaApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootJpaApplication.class, args);
}
}
@Entity
테이블과 매핑
@Entity가 붙은 클래스는 JPA가 관리하는 것
@Table
mysql에 mycar라는 테이블을 자동으로 만들어줌
@Table(name = "mycar")
@Data
lombok Annotation
@Id
각 entity를 구별하는 식별(시퀀스) 아이디 갖도록 설계
PK지정
@Column 어노테이션을 지정하지 않으면 열 이름은 기본 키 속성 또는 필드의 이름으로 가정
주의
@Id primary key용 자료형은 Long 자료형 사용할 것을 권장(String 안됨)
@GeneratedValue(strategy = GenerationType.AUTO)
-> @Id 와 @GeneratedValue가 함께 쓰여져 기본키 설정
@Column(name = "carname") / @Column
이름을 지정해주거나 / 이름 같으면 생략가능
@CreationTimestamp
entity가 생성되는 시점의 시간 자동등록
@Column(updatable = false)
수정시 이 컬럼은 수정하지 않겠다는 뜻 / update시 자동 update 안되도록 만들어줘야 함
updatable = false 없을 시 날짜가 null로 찍힐 것
-- 메인에 entity등록 후 실행 해보고 퀀텀db를 가보면 기존 테이블이 있으면 새로 추가한 컬럼 생성되어있고 index를 따로 저장하는 hibernate_sequence가 생성되어있음
package mycar.data;
import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.CreationTimestamp;
import lombok.Data;
@Entity
@Table(name = "mycar") //mysql에 mycar라는 테이블을 자동으로 만들어줌
@Data
public class MyCarDto {
@Id //각 entity를 구별하는 식별(시퀀스) 아이디 갖도록 설계
@GeneratedValue(strategy = GenerationType.AUTO)
private long num;
//이렇게가 기본키 설정
@Column(name = "carname")
private String carname;
@Column //이름 같으면 생략가능
private int carprice;
@Column
private String carcolor;
@Column
private String carguip;
@CreationTimestamp //entity가 생성되는 시점의 시간 자동등록
@Column(updatable = false) // 수정시 이 컬럼은 수정하지 않겠다는 뜻 / update시 자동 update 안되도록 만들어줘야 함
// updatable = false 없을 시 날짜가 null로 찍힐 것
private Timestamp guipday;
// 메인에 entity등록 후 실행 해보고 퀀텀db를 가보면 기존 테이블이 있으면 새로 추가한 컬럼 생성되어있고 index를 따로 저장하는 hibernate_sequence가 생성되어있음
}
jpa extends 받아오기 <dto,기본키 자료형>
package mycar.data;
import org.springframework.data.jpa.repository.JpaRepository;
public interface MyCarDaoInter extends JpaRepository<MyCarDto, Long>{ //jpa extends 받아오기 <dto,기본키 자료형> // JpaRepository<자료를 가져올 타입, 그 자료 안 기준 값>
}
@Autowired MyCarDaoInter carInter;
implement MyCarDaoInter 자동 생성해서 override 받으면 너무 많이 받기 때문에 inter 생성해서 @autowired로 받아와 사용
insert
save - id타입 유무에 따라 자동으로 insert인지 update인지 갈린다 //id타입 없으면 insert 있으면 update로 인식
//insert
public void insertMyCar(MyCarDto dto)
{
carInter.save(dto); //id타입 유무에 따라 자동으로 insert인지 update인지 갈린다 //id타입 없으면 insert 있으면 update로 인식
}
package mycar.data;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class MyCarDao{
@Autowired
MyCarDaoInter carInter; //implement MyCarDaoInter 자동 생성해서 override 받으면 너무 많이 받기 때문에 inter 생성해서 @autowired로 받아와 사용
//insert
public void insertMyCar(MyCarDto dto)
{
carInter.save(dto); //id타입 유무에 따라 자동으로 insert인지 update인지 갈린다 //id타입 없으면 insert 있으면 update로 인식
}
//전체출력
public List<MyCarDto> getAllDataes()
{
return carInter.findAll();
}
//num에 대한 값(dto) 반환
public MyCarDto getData(Long num)
{
return carInter.getReferenceById(num);
}
public void updateMyCar(MyCarDto dto)
{
carInter.save(dto);
}
public void delete(Long num)
{
carInter.deleteById(num);
}
}
spring framework 3 와 똑같이 사용하면 된다
package mycar.data;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class MyCarController {
@Autowired
MyCarDao dao;
@GetMapping("/car/carlist") //시작..
public ModelAndView list()
{
ModelAndView model=new ModelAndView();
List<MyCarDto> list=dao.getAllDataes();
model.addObject("list", list);
model.addObject("totalCount", list.size());
model.setViewName("carlist");
return model;
}
@GetMapping("/car/carform")
public String form()
{
return "addform";
}
@PostMapping("/car/insert")
public ModelAndView insert(@ModelAttribute MyCarDto dto)
{
ModelAndView model=new ModelAndView();
model.addObject("dto", dto);
dao.insertMyCar(dto);
model.setViewName("redirect:carlist");
return model;
}
@GetMapping("/car/updateform")
public String updateform(@RequestParam Long num,Model model)
{
MyCarDto dto=dao.getData(num);
model.addAttribute("dto", dto);
return "uform";
}
@PostMapping("/car/update")
public ModelAndView update(@ModelAttribute MyCarDto dto)
{
ModelAndView model=new ModelAndView();
dao.updateMyCar(dto);
model.setViewName("redirect:carlist");
return model;
}
@GetMapping("/car/delete")
public String delete(@RequestParam Long num)
{
dao.delete(num);
return "redirect:carlist";
}
}
img는 src/main/resources에 있는 static이 기본값이기에 ../사진이름 으로 넣으면 된다
<img alt="" src="../20.jpeg">