- 파라미터로 데이터 전송 대신 전송할 값 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 |