본문 바로가기

공부일지

231221 (Spring)

  1. 파라미터로 데이터 전송 대신 전송할 값 1개 정도일 때 사용해볼만한 형태-조회

@PathVariable

  • url에 패스를 추가하는 방식으로도 데이터를 전송할 수 있다.
  • 각 데이터를 {name}중괄호에 담아서 매핑으로 지정한다.
@RequestMapping("/joinPath/{name}/{gender}/{email}/{age}")
	public String join(Model model, @PathVariable String name, 
			@PathVariable String gender, @PathVariable int age, @PathVariable String email) {
		model.addAttribute("method", "@PathVariable 방식");
		model.addAttribute("name", name);
		model.addAttribute("gender", gender);
		model.addAttribute("age", age);
		model.addAttribute("email", email);
		
		return "member/info";
	}

포워드와 리다이렉트 방식의 화면전환

  • requestmapping에 String에 파일주소를 반환하는 경우 forward 방식으로 동작하게 된다.
  • redirect:을 쓰고 뒤에 루트를 작성해주면 된다.
@RequestMapping("/login_result")
	public String login(Model model, String user_id, String user_pw) {
		if("id".equals(user_id)&&"pw".equals(user_pw)) {
//			return "home";//포워드 형태의 응답
			return "redirect:/";//리다이렉트 형태의 응답
		} else {
			return "member/login";
		}
	}

css와 js의 매핑 추가하기

  • 경로를 다른 이름의 매핑으로 연결시킬 수 있다.
	<resources mapping="/img/**" location="/resources/images/" />
	<resources mapping="/css/**" location="/resources/css/" />
	<resources mapping="/js/**" location="/resources/js/" />
	<resources mapping="/resources/**" location="/resources/" />

스프링에서 라이브러리를 사용해 템플릿 적용하기

  • 기존의 include방식이 아닌 다른 방식으로 탬플릿을 적용하게 된다.
  • tiles jsp servlet 라이브러리를 디펜던시에 추가한다.
  • 탬플릿으로 할 파일을 만들고 태그라이브러리를 추가한다.
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
  • 탬플릿에서 내용이 작성될 부분에 insertAttribute를 넣어준다.
<tiles:insertAttribute name="container"></tiles:insertAttribute>
  • config.xml 파일을 만들고 tiles 세팅을 작성한다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
       "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
	<definition name="*" template="/WEB-INF/views/tiles/layout.jsp">
		<put-attribute name="container" value="/WEB-INF/views/{1}.jsp" />
	</definition>
	<definition name="*/*" template="/WEB-INF/views/tiles/layout.jsp">
		<put-attribute name="container" value="/WEB-INF/views/{1}/{2}.jsp" />
	</definition>
</tiles-definitions>
  • servlet-context에 beans 태그로 추가해준다.
  • 우선순위를 기본 viewresolver보다 우선되도록 설정해준다.
  • 만들어준 config.xml파일을 인식할 수 있도록 beans를 추가한다.
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
		<beans:property name="order" value="2" />
	</beans:bean>
	
	<beans:bean class="org.springframework.web.servlet.view.tiles3.TilesViewResolver">
		<beans:property name="order" value="1" />
	</beans:bean>
<beans:bean class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
		<beans:property name="definitions" value="/WEB-INF/views/tiles/config.xml" />
	</beans:bean>

스프링에서 데이터베이스 사용

  • mybatis spring와 spring jdbc디펜던시가 필요하다.
  • 스프링은 여러 데이터베이스 연결을 해두고 그 연결을 호출하여 데이터베이스 조회를 실시한다.
    • DBCP (DataBase Connention Pool)
    • Apache Commons DBCP를 사용할 것

config 파일의 작성

  • 연결과 관련된 내용을 저장할 properties 파일을 만든다.
  • Spring bean Configuration file을 생성해준다.
  • config 파일과 properties 파일을 연결한다.
    • namespace 탭으로 가서 context를 체크한다.
    • <context:property-placeholder location="classpath:dbconnention/db.properties"/>
    • context:property-placeholder에 로케이션으로 만들어둔 프로퍼티를 지정한다.
    • classpath는resources가 기준이다.
  • bean을 3개 추가한다.
  • basicdatasourse 클래스를 선언하고 프로퍼티로 db 연결정보를 추가한다.
  • sqlSessionFactory 클래스를 선언하고 프로퍼티로 dataSource와 mapperLocations를 추가한다.
    • dataSource는 이미 사용중인 클래스이기 때문에 해당 클래스에 id를 부여하고 ref(레퍼런스)를 지정하여주면 된다.
    • 매퍼를 찾을 때 classPath를 기준으로 찾아가도록 한다.
    • *_mapper.xml로 하면 매퍼 종류를 모두 인식할 수 있다.
  • sqlSessionTemplate 클래스를 추가한다.
    • sqlSessionTemplate는 생성자가 필요하기 때문에 constructor-arg를 추가해 sqlFactory를 레퍼런스 처리 해준다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
	
	<context:property-placeholder location="classpath:dbconn/db.properties"/>
	<bean class="org.apache.commons.dbcp2.BasicDataSource" id="dbcp">
		<property name="driverClassName" value="${db.driver}"/>
		<property name="url" value="${db.url}"/>
		<property name="username" value="${hanul.user}"/>
		<property name="password" value="${hanul.pw}"/>
	</bean>
	<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlFac">
		<property name="dataSource" ref="dbcp"/>
		<property name="mapperLocations" value="classpath:mappers/*_mapper.xml"/>
	</bean>
	<bean class="org.mybatis.spring.SqlSessionTemplate" >
		<constructor-arg name="sqlSessionFactory" ref="sqlFac"></constructor-arg>
	</bean>
	
</beans>
  • root-context 파일에 만들어준 config 위치를 지정해 파일을 등록한다.
<import resource="classpath:dbconn/*.xml" />

VO 만들 때 getter/setter, 생성자 자동 생성 라이브러리

  • lombok 라이브러리를 사용한다.
  • lombok을 라이브러리에서 찾아서 설치해준다.
  • sts를 다시 실행하고 getter, setter가 필요한 vo에 @getter 와 @setter를 어노테이션으로 추가한다.
@Setter @Getter
public class CustomerVO {
	private int customer_id;
	private String name, gender, email, phone;

}

interface, service, dao, mapper

  • spring legacy의 db 접속의 기본 구조는 다음과 같다.
    • service에 해당하는 인터페이스를 만든다.
    • service를 상속받고 @service 어노테이션을 달아줄 impl 클래스를 만들어준다.
    • service를 상속받고 @Repository 어노테이션을 달아줄 dao 클래스를 만들어준다.
    • sqlSession을 이용해 db를 접속하여 보낼 쿼리문을 mapper에 만들어준다.
    • controller 에 impl에 해당하는 클래스를 필드로 선언하고 @Autowired를 붙여준다.
    • impl에 dao에 해당하는 클래스를 필드로 선언하고 @Autowired 를 붙여준다.
    • dao에 sqlSession을 필드로 선언한고 @Autowired를 붙여준다.
    • dao에서 sql의 메소드를 통해 매퍼의 쿼리문을 실행하고 결과를 반환한다.
    • dao에서 받아온 결과를 impl이 받아 controller로 보내준다.
    • controller는 받아온 데이터를 Model의 addAttribute 기능을 이용해 jsp로 전달한다.
    • jsp에서 결과를 출력한다.

DB 연동의 예시

  • controller
@Controller
public class CustomerController {

	@Autowired private CustomerServiceImpl service;
	
	@RequestMapping("/list.cu")
	public String list(Model model) {
		List<CustomerVO> list = service.customer_list();
		model.addAttribute("list", list);
		return "customer/list";
	}
}
  • service
public interface CustomerService {
	//crud

	int customer_register(CustomerVO vo);
	List<CustomerVO> customer_list();
	CustomerVO customer_info();
	int customer_update(CustomerVO vo);
	int customer_delete(int id);
	
}
  • impl
@Service
public class CustomerServiceImpl implements CustomerService {

	@Autowired private CustomerDAO dao;
	
	@Override
	public int customer_register(CustomerVO vo) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public List<CustomerVO> customer_list() {
		return dao.customer_list();
	}
}
  • dao
@Repository
public class CustomerDAO implements CustomerService {

	@Autowired private SqlSession sql;
	
	@Override
	public int customer_register(CustomerVO vo) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public List<CustomerVO> customer_list() {
		return sql.selectList("customer.list");
	}
  • mapper
<?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="customer">
	<select id="list" resultType="com.hanul.smart.customer.CustomerVO">
		select * from customer
	</select>
</mapper>

'공부일지' 카테고리의 다른 글

240115 (IoT)  (0) 2024.01.15
231227 (Spring)  (0) 2023.12.27
231220 (Spring)  (0) 2023.12.20
231219 (Android)  (0) 2023.12.20
231213 (Android)  (0) 2023.12.13