> CREATE DATABASE kakaroodb default CHARACTER SET UTF8
> use kakaroodb
Table 생성.
> create table UserProfile (id varchar(64) PRIMARY KEY, name varchar(64), phone varchar(64), address varchar(255))
잘 생성되었는지 확인.
> select * from UserProfile
계정/비번 생성. create user 'user명'@'server명' identified by 'password'
DB access 등의 모든 권한 부여.
> grant all privileges on *.* to 'kakaroo'@'localhost' //*.* : database명.table명 을 의미함.
> flush privileges
* 간단한 SQL 명령어 계정 생성 create user 'user명'@'server명' identified by 'password'
계정 삭제 drop user [user명]@[server명]
생성한 계정으로 로그인 mysql -u kakaroo -p
show databases
use [dbName]
show tables status
MySQL에 root로 접속 한 뒤 use mysql; select host, user from user; 현재 생성된 db의 사용자 계정들을 확인할 수 있다. 사용자 계정 생성 GRANT USAGE ON [database명].[table명] TO [user명]@[server명] IDENTIFIED BY ['패스워드']; ex) grant usage on database.* to user1@localhost identified by 'user1';
생성된 사용자 계정 권한 설정 GRANT ALL ON [database명].[table명] TO [user명]@[server명]; => 모든 권한을 준다 GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER ON [database명].[tabel명] TO [user명]@[server명]; => 특정 권한을 준다 ex) grant all on database.* to user1@localhost; grant select,insert,update,delete,create,drop.index,alter on database.* to user1@localhost;
권한 적용(반드시 해야 함) >flush privileges
권한 보기 > show grants for user@host
REVOKE ALL ON [database명].[table명] FROM [user명]@[server명]; => 모든 권한을 삭제한다 REVOKE DROP ON [database명].[table명] FROM [user명]@[server명]; => 특정 권한(drop)을 삭제한다 ex) revoke all on database.* from user1@localhost; revoke drop,index on database.* from user1@localhost;
2. Database data를 관리할 mapper 패키지를 생성합니다.
3. DB operation 을 수행하는 interface mapper를 정의합니다.
// mapper 는 xml 로 설정할 수도 있고, 코드에서 annotation을 설정해서 사용할 수도 있습니다. 프로그래머의 스타일에 따라...
package com.example.project.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.example.project.model.UserProfile;
@Mapper
public interface UserProfileMapper {
@Select("SELECT * FROM UserProfile WHERE id=#{id}")
UserProfile getUserProfile(@Param("id") String id);
@Select("SELECT * FROM UserProfile")
List<UserProfile> getUserProfileList();
@Insert("INSERT INTO UserProfile VALUES(#{id}, #{name}, #{phone}, #{address})")
int insertUserProfile(@Param("id") String id, @Param("name") String name, @Param("phone") String phone, @Param("address") String address);
@Update("UPDATE UserProfile SET name=#{name}, phone=#{phone}, address=#{address} WHERE id=#{id}")
int updateUserProfile(@Param("id") String id, @Param("name") String name, @Param("phone") String phone, @Param("address") String address);
@Delete("DELETE FROM UserProfile WHERE id=#{id}")
int deleteUserProfile(@Param("id") String id);
}
4. 기존의 Controller에서 사용한 HashMap 대신 mapper의 메소드로 변경해줍니다.
@RestController
public class UserProfileController {
//private Map<String, UserProfile> userMap;
private UserProfileMapper mapper;
public UserProfileController(UserProfileMapper mapper) {
this.mapper = mapper;
}
/*@PostConstruct
public void init() {
userMap = new HashMap<String, UserProfile>(); userMap.put("1", new
UserProfile("1", "홍길동", "111-1111", "서울시 강남구 대치1동")); userMap.put("2", new
UserProfile("2", "홍길서", "222-2222", "서울시 강남구 대치2동")); userMap.put("3", new
UserProfile("3", "홍길남", "3333-3333", "서울시 강남구 대치3동"));
}*/
@GetMapping("/user/{id}") //localhost:8080/user/id
public UserProfile getUserProfile(@PathVariable("id") String id) {
return mapper.getUserProfile(id);
//return userMap.get(id);
}
@GetMapping("/user/all")
public List<UserProfile> getUserProfileList() {
return mapper.getUserProfileList();
//return new ArrayList<UserProfile>(userMap.values());
}
@PutMapping("/user/{id}")
public void putUserProfile(@PathVariable("id") String id,
@RequestParam("name") String name,
@RequestParam("phone") String phone,
@RequestParam("address") String address) {
mapper.updateUserProfile(id, name, phone, address);
//UserProfile userProfile = new UserProfile(id, name, phone, address);
//userMap.put(id, userProfile);
}
@PostMapping("/user/{id}")
public void postUserProfile(@PathVariable("id") String id,
@RequestParam("name") String name,
@RequestParam("phone") String phone,
@RequestParam("address") String address) {
mapper.insertUserProfile(id, name, phone, address);
//UserProfile userProfile = userMap.get(id);
//userProfile.setName(name);
//userProfile.setPhone(phone);
//userProfile.setAddress(address);
}
@DeleteMapping("/user/{id}")
public void deleteUserProfile(@PathVariable("id") String id) {
mapper.deleteUserProfile(id);
//userMap.remove(id);
}
}
POM은 Project Object Model 의 약자로 이름 그대로 Project Object Model의 정보를 담고있는 파일. 이 파일에서 주요하게 다루는 기능들은 다음과 같습니다. -프로젝트 정보 : 프로젝트의 이름, 개발자 목록, 라이센스 등 -빌드 설정 : 소스, 리소스, 라이프 사이클별 실행한 플러그인(goal)등 빌드와 관련된 설정 -빌드 환경 : 사용자 환경 별로 달라질 수 있는 프로파일 정보 -POM연관 정보 : 의존 프로젝트(모듈), 상위 프로젝트, 포함하고 있는 하위 모듈 등
Maven이란?
프로젝트를 진행하게 되면 단순히 자신이 작성한 코드만으로 개발하는 것이 아니라 많은 라이브러리들을 활용해서 개발을 하게 됩니다. 이 때 사용되는 라이브러리들의 수가 수십개가 훌쩍 넘어버리는 일이 발생해 이 많은 라이브러리들을 관리하는 것이 힘들어지는 경우가 종종 발생하곤 합니다. Maven은 이러한 문제를 해결해 줄수 있는 도구입니다. Maven은 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는데 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해 자동으로 다운 받아줍니다.
Maven은 프로젝트의 전체적인 라이프사이클을 관리하는 도구이며, 많은 편리함과 이점이 있어 널리 사용되고 있습니다. 기존에는 Ant가 많이 사용되었지만 Maven이 Ant를 넘어서 더 많은 개발자들이 사용하게 되었고 비교적 최근에는 Gradle이 새롭게 나와 사용되고 있습니다.
Maven은 JDK설치와 같이 설치할 수 있습니다. 환경변수 잡아주고 하면 cmd에서 mvn –version을 통해 버전을 알 수 있고 설치가 가능하다. 설치는메이븐 홈페이지에서 할 수 있습니다.
Gradle이란?
Gradle이란 기본적으로 빌드 배포 도구(Build Tool)입니다. 안드로이드 앱을 만들때 필요한 공식 빌드시스템이기도 하며 JAVA, C/C++, Python 등을 지원합니다. 빌드툴인 Ant Builder와 그루비 스크립트를 기반으로 구축되어 기존 Ant의 역할과 배포 스크립트의 기능을 모두 사용가능합니다.
기본 메이븐의 경우 XML로 라이브러리를 정의하고 활용하도록 되어 있으나, Gradle의 경우 별도의 빌드스크립트를 통하여 사용할 어플리케이션 버전, 라이브러리등의 항목을 설정 할 수 있습니다.
장점으로는 스크립트 언어로 구성되어 있기때문에, XML과 달리 변수선언, if, else, for등의 로직이 구현가능하여 간결하게 구성 가능합니다.
라이브러리 관리 : 메이븐 레파지토리를 동일하게 사용할 수 있어서 설정된 서버를 통하여 라이브러리를 다운로드 받아 모두 동일한 의존성을 가진 환경을 수정할 수 있습니다. 자신이 추가한 라이브러리도 레파지토리 서버에 올릴 수 있습니다.
프로젝트 관리 : 모든 프로젝트가 일관된 디렉토리 구조를 가지고 빌드 프로세스를 유지하도록 도와줍니다.