스프링(Spring) #3

jjinny_0609·2023년 3월 29일
0

Spring

목록 보기
3/6

전체적인 구조에 대해

LoginService.java

package org.hj.service;

import org.hj.model.LoginVO;

public interface LoginService {
	public void memreg(LoginVO member);
	public LoginVO login(LoginVO member);
}

LoginServicelmpl.java

package org.hj.service;

import org.hj.mapper.LoginMapper;
import org.hj.model.LoginVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class LoginServiceImpl implements LoginService {
	
	@Autowired
	LoginMapper lm;	// loginMapper lm = new LoginMapper();
	
	public void memreg(LoginVO member) {
		lm.memreg(member);
	};
	
	public LoginVO login (LoginVO member) {
		System.out.println("service="+member);
		System.out.println("service return="+lm.login(member));
		return lm.login(member);
	}
}

위의 코드는 Spring Framework에서 사용되는 서비스 계층의 구현체인 LoginServiceImpl 클래스와 LoginService 인터페이스입니다.

LoginServiceImpl 클래스는 LoginService 인터페이스를 구현합니다. 이 클래스에는 memreg와 login 메서드가 구현되어 있습니다.

memreg 메서드는 LoginMapper 인터페이스를 사용하여 member 객체를 데이터베이스에 저장하는 역할을 합니다. @Autowired 어노테이션을 사용하여 LoginMapper를 주입합니다.

login 메서드는 LoginMapper 인터페이스를 사용하여 member 객체를 데이터베이스에서 조회하는 역할을 합니다. 이 메서드는 member 객체를 인자로 받아 LoginMapper의 login 메서드를 호출하고, 해당 결과를 반환합니다.

LoginService 인터페이스는 memreg와 login 메서드를 선언하고 있습니다. 이 인터페이스를 구현하는 클래스는 반드시 memreg와 login 메서드를 구현해야 합니다.

@Service 어노테이션은 스프링 컨테이너에서 해당 클래스를 빈으로 등록하도록 지시하는 어노테이션입니다. 따라서 LoginServiceImpl 클래스는 스프링 컨테이너에서 빈으로 등록되어, 다른 클래스에서 @Autowired 어노테이션을 사용하여 주입할 수 있습니다.

이렇게 구현된 LoginServiceImpl 클래스와 LoginService 인터페이스는 컨트롤러와 데이터 액세스 계층에서 사용되어 로그인과 회원가입 기능을 구현하는 데에 활용될 수 있습니다.


LoginMapper.java

package org.hj.mapper;

import org.hj.model.LoginVO;

public interface LoginMapper {
	public void memreg(LoginVO member);
	public LoginVO login(LoginVO member);
}

LoginMapper.xml

<?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="org.hj.mapper.LoginMapper">
  	
  	<insert id="memreg">
  		insert into member (id, password, name, birth, gender, phonenum)
  		value(#{id},#{password},#{name},sysdate(),"f","0101");
  	</insert>
  	
  	<select id="login" resultType="org.hj.model.LoginVO">
  		select id, password
  		from member
  		where id=#{id} and password=#{password}
  	</select>
  </mapper>

위 예제는 Mapper Interface인 LoginMapper는 memreg와 login 메서드를 정의하고 있습니다. memreg 메서드는 LoginVO 타입의 멤버를 입력받아, 데이터베이스의 member 테이블에 해당 정보를 삽입하는 쿼리를 실행합니다. login 메서드는 LoginVO 타입의 멤버를 입력받아, 데이터베이스의 member 테이블에서 해당하는 아이디와 비밀번호를 조회하는 쿼리를 실행하고, 조회 결과를 LoginVO 객체로 반환합니다.

XML 매퍼 파일인 LoginMapper.xml은 org.hj.mapper.LoginMapper 네임스페이스를 사용하는 매퍼 파일로, memreg와 login 메서드에 해당하는 SQL 쿼리를 정의하고 있습니다. memreg에 해당하는 SQL 쿼리는 insert 태그를 사용하여 삽입 쿼리를 정의하고, login에 해당하는 SQL 쿼리는 select 태그를 사용하여 조회 쿼리를 정의합니다. login의 결과 타입은 resultType 속성으로 org.hj.model.LoginVO를 지정하여, 조회 결과를 LoginVO 객체로 매핑할 수 있도록 합니다.

이렇게 작성된 Mapper Interface와 XML 매퍼 파일은 MyBatis ORM 프레임워크에서 사용되어, 애플리케이션에서 데이터베이스와 상호작용을 할 때에 사용됩니다.


Mapper Interface

MyBatis와 같은 ORM 프레임워크를 사용하여 데이터베이스와 상호작용을 할 때, Mapper Interface를 사용하는 것이 일반적입니다. Mapper Interface는 SQL 쿼리를 실행하고 결과를 매핑하는 메서드를 정의합니다.

Mapper Interface를 작성할 때에는, 인터페이스에 매핑할 SQL 쿼리를 정의하고, 매핑할 결과 객체와 매개변수를 지정합니다. 예를 들어, 다음과 같은 Mapper Interface를 작성할 수 있습니다.

public interface UserMapper {
    @Select("SELECT * FROM users WHERE id = #{id}")
    User getUserById(@Param("id") int id);
    
    @Insert("INSERT INTO users (name, age, email) VALUES (#{name}, #{age}, #{email})")
    void insertUser(User user);
    
    @Update("UPDATE users SET name = #{name}, age = #{age}, email = #{email} WHERE id = #{id}")
    void updateUser(User user);
    
    @Delete("DELETE FROM users WHERE id = #{id}")
    void deleteUser(@Param("id") int id);
}

위의 예제에서는 @Select, @Insert, @Update, @Delete와 같은 어노테이션을 사용하여 SQL 쿼리를 정의하고 있습니다. 또한, 매개변수를 전달할 때에는 @Param 어노테이션을 사용하여 매개변수의 이름을 명시합니다.

Mapper Interface를 작성한 후에는, 이를 MyBatis와 같은 ORM 프레임워크에서 매핑해줘야 합니다. 이를 위해서는 Mapper Interface를 구현하는 XML 파일을 작성하고, 이를 스프링 설정 파일에서 등록하는 방식을 사용합니다. 이러한 과정을 거쳐야 Mapper Interface를 사용하여 데이터베이스와 상호작용할 수 있습니다.

프로젝트의 구성

  • 일반적인 웹 프로젝트의 구조는 3-Tier의 구조를 활용

  • 스프링의 MVC를 이용하는 예제의 구성


로그인

a태그로도 가능하다

로그인 과정


아이디값이 없으면 null이니까 login페이지를 리턴하도록

아래와 같이 변경해줌 else일때 세션에 저장하도록

작성(59~63)

이제 데이터베이스 값을 화면으로 넘겨주기 위한 작업을 해보자.

list.jsp 생성

list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri ="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<table border="1">
		<tr>
			<td>ID</td><td>이름</td><td>생년월일</td><td>이메일</td><td>휴대폰</td>
		</tr>
		<c:forEach items="${memlist}" var="list">
		<tr>
			<td><a href="">${list.id}</a></td>
			<td>${list.name}</td>
			<td>${list.age}</td>
			<td>${list.email}</td>
			<td>${list.phone}</td>
		</tr>
		</c:forEach>
	</table>
</body>
</html>

LoginService.java

package org.hj.service;

import java.util.ArrayList;

import org.hj.model.LoginVO;

public interface LoginService {
	public void memreg(LoginVO member);
	public LoginVO login(LoginVO member);
	public ArrayList<LoginVO> memlist();
}

LoginServicelmpl.java

package org.hj.service;

import java.util.ArrayList;

import org.hj.mapper.LoginMapper;
import org.hj.model.LoginVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class LoginServiceImpl implements LoginService {
	
	@Autowired
	LoginMapper lm;
	
	public void memreg(LoginVO member) {
		lm.memreg(member);
	}
	
	public LoginVO login (LoginVO member) {
		System.out.println("service="+member);
		System.out.println("service return="+lm.login(member));
		return lm.login(member);
	}
	
	public ArrayList<LoginVO> memlist(){
		return lm.memlist();
	}
}

LoginMapper.java

package org.hj.mapper;

import java.util.ArrayList;

import org.hj.model.LoginVO;

public interface LoginMapper {
	public void memreg(LoginVO member);
	public LoginVO login(LoginVO member);
	public ArrayList<LoginVO> memlist();
}

LoginMapper.xml

<?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="org.hj.mapper.LoginMapper">
  	
  	<insert id="memreg">
  		insert into member(id, password, name, gender, phonenum)
  		value(#{id},#{password},#{name},"f", "0101");
  	</insert>
  	
  	<select id="login" resultType="org.hj.model.LoginVO">
  		select id, password
  		from member
  		where id=#{id} and password=#{password}
  	</select>
  
  	<select id="memlist" resultType="org.hj.model.LoginVO">
  		select *
  		from member
  	</select>
  </mapper>
profile
뉴비 개발자 입니다. velog 주소 : https://velog.io/@jjinny_0609 Github 주소 :

0개의 댓글