Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- removeClass
- selectoptions
- 주석이 먹히지 않을 때
- index %
- Git
- excel중복체크
- slideUp
- ctrl+/
- 증가값
- 1521
- Parent
- is_check
- selectedIndex
- 소스트리인증실패
- 파일질라설치오류
- Math.ceil()
- push오류
- calc.plus
- FileZilla설치
- SUB함수
- 파일질라설치
- FileZilla다운로드
- Math.floor()
- calc.minus
- Math.round()
- hide
- 파일질라다운로드
- addClass
- Excel
- toFixed()
Archives
- Today
- Total
잡동사니에도 사랑을
[21.10.18] MyBatis활용 - 수정, 삭제, 검색 본문
728x90
반응형
////////UserUpdateService.java
package user.service;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import user.bean.UserDTO;
import user.dao.UserDAO;
public class UserUpdateService implements UserService {
@Override
public void execute() {
Scanner scan = new Scanner(System.in);
System.out.print("수정 할 아이디 입력 : ");
String id = scan.next();
UserDAO userDAO = UserDAO.getInstance();
UserDTO userDTO = userDAO.getUser(id);
if(userDTO == null) {
System.out.println("찾고자 하는 아이디가 없습니다.");
}else {
System.out.println(userDTO.getName() + "\t" + userDTO.getId() + "\t" + userDTO.getPwd());
System.out.print("수정 할 이름 입력 : ");
String name = scan.next();
System.out.print("수정 할 비밀번호 입력 : ");
String pwd = scan.next();
Map<String, String> map = new HashMap<String, String>();
map.put("name", name);
map.put("id", id);
map.put("pwd", pwd);
userDAO.update(map);
System.out.println("데이터를 수정하였습니다");
}
}
}
////////UserUpdateService.java - UserDAO
public UserDTO getUser(String id) {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserDTO userDTO = sqlSession.selectOne("userSQL.getUser", id);
// selectOne : 딱 한줄만 가져오겠다.
// getUser라는 Mapper파일로 넘어와 id에 getUser라고 명시된 것을 찾아오고
// parameter로 Mapper에 넘겨준 뒤 다시 DAO의 selectOne으로 넘어와 DTO에 넘긴다
sqlSession.close();
// Generic 타입이 자동적으로 바뀐다.
return userDTO;
}
public void update(Map<String, String> map) {
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.update("userSQL.update", map);
sqlSession.commit();
sqlSession.close();
}
[결과]
////////UserDeleteService.java
package user.service;
import java.util.Scanner;
import user.bean.UserDTO;
import user.dao.UserDAO;
public class UserDeleteService implements UserService {
@Override
public void execute() {
Scanner scan = new Scanner(System.in);
System.out.print("삭제 할 아이디 입력 : ");
String id = scan.next();
UserDAO userDAO = UserDAO.getInstance();
UserDTO userDTO = userDAO.getUser(id);
if (userDTO == null) {
System.out.println("찾고자 하는 아이디가 없습니다.");
return;
}
userDAO.delete(id);
System.out.println("데이터를 삭제하였습니다");
}
}
////////UserDeleteService.java - UserDAO
public void delete(String id) {
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.delete("userSQL.delete", id);
sqlSession.commit();
sqlSession.close();
}
[결과]
////////UserSearchService.java
package user.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import user.bean.UserDTO;
import user.dao.UserDAO;
public class UserSearchService implements UserService {
@Override
public void execute() {
Scanner scan = new Scanner(System.in);
System.out.println("1. 이름 검색");
System.out.println("2. 아이디 검색");
System.out.print("번호 입력 : ");
int num = scan.nextInt();
String columnName = null;
String value = null;
if (num == 1) {
System.out.print("이름 입력 : ");
value = scan.next();
columnName = "name";
} else if (num == 2) {
System.out.println("아이디 입력 : ");
value = scan.next();
columnName = "id";
}
// parameter로 넘길 수 있는 값은 하나밖에 넘길 수 없다.
// 그래서 Map을 이용해주는 것이다.
Map<String, String> map = new HashMap<String, String>();
map.put("columnName", columnName);
map.put("value", value);
// DB
UserDAO userDAO = UserDAO.getInstance();
List<UserDTO> list = userDAO.search(map);
for(UserDTO userDTO : list) {
System.out.println(userDTO.getName()+"\t"+userDTO.getId()+"\t"+userDTO.getPwd());
// 데이터를 실어줘야 한다는 점에서 select와는 다르다
}
}
}
////////UserSearchService.java - UserDAO
public List<UserDTO> search(Map<String, String> map) {
SqlSession sqlSession = sqlSessionFactory.openSession();
List<UserDTO> list = sqlSession.selectList("userSQL.search", map);
sqlSession.close();
return list;
}
}
[결과]
////////userMapper.xml
<select id="getUser" parameterType="String" resultType="user">
select * from usertable where id=#{id}
</select>
<update id="update" parameterType="java.util.Map">
update usertable set name = #{name}, pwd=#{pwd} where id=#{id}
</update>
<delete id="delete" parameterType="String">
delete usertable where id = #{id}
</delete>
<select id="search" parameterType="java.util.Map"
resultType="user">
<!-- XML -->
<!--
select * from usertable where
<if test="columnName=='name'">
name like '%' || #{value} || '%'
</if>
<if test="columnName=='id'">
id like '%' || #{value} || '%'
</if>
-->
//--------------------------------------------------------------------------
<!--
select * from usertable where
<choose>
<when test="columnName=='name'">
name like '%' || #{value} || '%'
</when>
<otherwise>
id like '%' || #{value} || '%'
</otherwise>
</choose>
-->
//---------------------------------------------------------------------------
select * from usertable where ${columnName} like '%' || #{value} || '%'
</select>
</mapper>
마지막으로 정보가 노출되지 않도록 mybatis-config.xml로 넘어와 환경설정을 해준다.
////////db.properties
jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:xe
jdbc.username=c##java
jdbc.password=bit
properties의 name은 맘대로 설정해줘도 상관없다.
////////mybatis-config.xml
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
이렇게만 설정하면 에러가 뜬다.
왜? mybatis-config.xml에서는 db.properties가 어디있는지 모르니까.
db.properties의 존재를 mybatis-config.xml에게 알려줘야 한다.
<properties resource="db.properties"></properties>
728x90
반응형
'JAVA_EE > MYBATIS' 카테고리의 다른 글
[21.10.15] MyBatis활용 - 입력, 출력 (0) | 2021.10.15 |
---|