ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

ํ•˜์Šคํƒ€๊ทธ๋žจ์„ ๋งŒ๋“ค๋ฉด์„œ ๊ฐ€์žฅ ๋จธ๋ฆฌ๊ฐ€ ์•„ํŒ ๋˜ ๋ถ€๋ถ„์ด ํŒ”๋กœ์šฐ ๋ถ€๋ถ„์ด์—ˆ๋‹ค. ํšŒ์›์ด๋‚˜ ๊ฒŒ์‹œ๊ธ€ ๊ฐ™์€ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๊ฒŒ์‹œํŒ ํŽ˜์ด์ง€์™€ ํ‹€์ด ๋น„์Šทํ•ด์„œ ์ƒ๊ฐ๋ณด๋‹ค ์ˆ˜์›”ํ•˜๊ฒŒ ๋งŒ๋“ค์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ํŒ”๋กœ์šฐ๋Š” DB๊ตฌ์„ฑ๋„ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ์ง€ ๋ง‰๋ง‰ํ–ˆ๋‹ค.

 

Model


FollowVO

@Setter
@Getter
@ToString
public class FollowVO {

	private int followNo;
	private int activeUser;
	private int passiveUser;
	private Date regDate;
	
	private String activeUserId;
	private String passiveUserId;
	
	private String profileName;
	
}

์šฐ์„  DB์—๋Š” ํŒ”๋กœ์šฐ๋ฒˆํ˜ธ, ํŒ”๋กœ์šฐ๊ฑด์œ ์ €, ํŒ”๋กœ์šฐ๋‹นํ•œ์œ ์ €, ํŒ”๋กœ์šฐ๋“ฑ๋ก๋‚ ์งœ๋ฅผ ๋งŒ๋“ค์—ˆ๊ณ , ํ”„๋ก ํŠธ์—์„œ ํŒ”๋กœ์šฐ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™•์ธํ•  ๋•Œ ์œ ์ €์˜ ์•„์ด๋””์™€ ํ”„๋กœํ•„ ์‚ฌ์ง„์„ ๋ณด์ด๊ธฐ ์œ„ํ•ด ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋‘์—ˆ๋‹ค.

 

 

 

Repository


IFollowDAO

public interface IFollowDAO {
	//ํŒ”๋กœ์šฐ ํ•˜๊ธฐ
	void follow(FollowVO follow);
	
	//์–ธํŒ”๋กœ์šฐ ํ•˜๊ธฐ
	void unfollow(FollowVO follow);
	
	//ํŒ”๋กœ์šฐ ์œ ๋ฌด
	int isFollow(FollowVO follow);
	
	//ํŒ”๋กœ์šฐ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ
	List<FollowVO> selectActiveUserList(int activeUser);
	
	//ํŒ”๋กœ์›Œ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ
	List<FollowVO> selectPassiveUserList(int passiveUser);
	
	//ํƒˆํ‡ด์‹œ ํŒ”๋กœ์šฐ์‚ญ์ œ
	void deleteUserAllFollow(int activeUser);
}
  • ํŒ”๋กœ์šฐํ•˜๊ธฐ
  • ์–ธํŒ”๋กœ์šฐํ•˜๊ธฐ
  • ํŒ”๋กœ์šฐ ์œ ๋ฌด ํ™•์ธ
  • ํŒ”๋กœ์šฐ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ
  • ํŒ”๋กœ์›Œ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ
  • ํƒˆํ‡ด์‹œ ํŒ”๋กœ์šฐ ์ „์ฒด ์‚ญ์ œ

 

 

 

Mapper


FollowMapper.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="com.hastagram.myapp.follow.repository.IFollowDAO">

	<resultMap type="com.hastagram.myapp.follow.model.FollowVO" id="FollowResultMap">
		<id property="followNo" column="follow_no" />
		<result property="activeUser" column="active_user" />
		<result property="passiveUser" column="passive_user" />
		<result property="regDate" column="reg_date"/>
		
		<result property="activeUserId" column="active_user_id" />
		<result property="passiveUserId" column="passive_user_id" />
		
		<result property="profileName" column="profile_name" />
	</resultMap>
	
	<resultMap type="com.hastagram.myapp.users.model.UsersVO" id="UsersResultMap">
		<id property="userNo" column="user_no" />
		<result property="email" column="email"/>
		<result property="id" column="id"/>
		<result property="pw" column="pw"/>
		<result property="name" column="name"/>
		<result property="intro" column="intro"/>
		<result property="phone" column="phone"/>
		<result property="regDate" column="regDate"/>
	</resultMap>

	<!-- ํŒ”๋กœ์šฐ ๊ธฐ๋Šฅ -->
	<insert id="follow">
		insert into follow(active_user, passive_user) values(#{activeUser},#{passiveUser})
	</insert>
	
	<!-- ์–ธํŒ”๋กœ์šฐ ๊ธฐ๋Šฅ -->
	<delete id="unfollow">
		delete from follow where active_user=#{activeUser} and passive_user=#{passiveUser}
	</delete>
	
	<!-- ํŒ”๋กœ์šฐ ์œ ๋ฌด ์กฐํšŒ ๊ธฐ๋Šฅ -->
	<select id="isFollow" resultType="int">
		select count(*) from follow where active_user=#{activeUser} and passive_user=#{passiveUser}
	</select>
	
	<!-- ํŒ”๋กœ์šฐ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ -->
	<select id="selectActiveUserList" resultMap="FollowResultMap">
		select 
			active_user,
		    passive_user,
		    F.reg_date as reg_date,
		    U.id as passive_user_id,
		    I.profile_name as profile_name
		from follow F 
		left outer join users U 
		on (F.passive_user = U.user_no)
		left outer join user_imgs I
		on (I.user_no = U.user_no)
		where active_user=#{activeUser}
		order by reg_date desc
	</select>
	
	<!-- ํŒ”๋กœ์›Œ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ -->
	<select id="selectPassiveUserList" resultMap="FollowResultMap">
		select 
			active_user,
		    passive_user,
		    F.reg_date as reg_date,
		    U.id as active_user_id,
		    I.profile_name as profile_name
		from follow F 
		left outer join users U 
		on (F.active_user = U.user_no) 
		left outer join user_imgs I
		on (I.user_no = U.user_no)
		where passive_user=#{passiveUser}
		order by reg_date desc;
	</select>
	
	<!-- ํƒˆํ‡ด์‹œ ํŒ”๋กœ์šฐ ์‚ญ์ œ -->
	<delete id="deleteUserAllFollow">
		delete from follow where active_user=#{active_user}
	</delete>
	
</mapper>

 

 

mvc-config.xml

<mybatis-spring:scan base-package="com.hastagram.myapp.follow.repository"/>

 

 

 

 

 

JUnitTest


FollowDAOTest

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= {"classpath:/spring/mvc-config.xml"})
public class FollowDAOTest {

	@Autowired
	private IFollowDAO followDAO;
	
	//ํŒ”๋กœ์šฐ ํ…Œ์ŠคํŠธ
	@Test
	public void followTest() throws Exception {
		FollowVO vo = new FollowVO();
		
		vo.setActiveUser(2);
		vo.setPassiveUser(4);
		
		followDAO.follow(vo);
		
	}
	
	//์–ธํŒ”๋กœ์šฐ ํ…Œ์ŠคํŠธ
	@Test
	public void unfollowTest() throws Exception {
		
		FollowVO vo = new FollowVO();
		
		vo.setActiveUser(2);
		vo.setPassiveUser(4);
		
		followDAO.unfollow(vo);
		
		
	}
	
	//๋งžํŒ” ์œ ๋ฌด ํ…Œ์ŠคํŠธ
	@Test
	public void isfollowTest() throws Exception {
		
		FollowVO vo = new FollowVO();
		
		vo.setActiveUser(2);
		vo.setPassiveUser(4);
		
		int result = followDAO.isFollow(vo);
		
		if(result == 0) {
			System.out.println("ํŒ”๋กœ์šฐ ๋˜์–ด์žˆ์ง€ ์•Š์Œ");
		} else { 
			System.out.println("ํŒ”๋กœ์šฐ ๋˜์–ด์žˆ์Œ");
		}
	}
	
	//ํŒ”๋กœ์ž‰, ํŒ”๋กœ์›Œ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ
	@Test
	public void selectList() throws Exception {
		List<FollowVO> follower = followDAO.selectPassiveUserList(3);
		List<FollowVO> following = followDAO.selectActiveUserList(3);
		
		System.out.println(follower);
		System.out.println(following);
	}
	
}

 

 

 

 

 

Service


IFollowService

public interface IFollowService {

	//ํŒ”๋กœ์šฐ ํ•˜๊ธฐ
	void follow(FollowVO follow);
	
	//์–ธํŒ”๋กœ์šฐ ํ•˜๊ธฐ
	void unfollow(FollowVO follow);
	
	//ํŒ”๋กœ์šฐ ์œ ๋ฌด
	int isFollow(FollowVO follow);
	
	//ํŒ”๋กœ์šฐ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ
	List<FollowVO> selectActiveUserList(int activeUser);
	
	//ํŒ”๋กœ์›Œ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ
	List<FollowVO> selectPassiveUserList(int passiveUser);
	
}

 

 

 

 

 

Controller


FollowController

@RestController
public class FollowController {

	private static final Logger logger = LoggerFactory.getLogger(UsersController.class);
	
	@Autowired
	private IFollowService followService;
	@Autowired
	private IUsersService usersService;

๊ณตํ†ต URL ์—†์Œ

๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€