AWS BACK DAY 17. Java - Database ์—ฐ๋™

์ด๊ฐ•์šฉยท2023๋…„ 1์›” 25์ผ

Java ๊ธฐ์ดˆ

๋ชฉ๋ก ๋ณด๊ธฐ
15/26
post-thumbnail

๐Ÿ“ŒJava - Mysql (workbench) ์—ฐ๋™

๐Ÿ“Œ ์‚ฌ์ „ ์ค€๋น„

mysql ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋‹ค์šด

  • maven์— ์˜์กด์„ฑ ์ถ”๊ฐ€

๊ฐ•์‚ฌ๋‹˜ DB ์ž๋ฃŒ(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)

๋‹ค์šด๋กœ๋“œํ•œ ํŒŒ์ผ ์ž˜๋ผ๋‚ด๊ธฐ ctrl + T
ํ•ด๋‹น ํŒจํ‚ค์ง€๋กœ ๊ฐ•์‚ฌ๋‹˜DB์ž๋ฃŒ ๋ถ™์—ฌ๋„ฃ๊ธฐ (ctrl + V)
mysql ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ > com.mysql > cj > jdbc > Driver.class

    private Vector connections = new Vector(10);
    private String _driver = "com.mysql.cj.jdbc.Driver", // Ctrl + V
    _url = "jdbc:mysql://127.0.0.1:@@@@/chatting", //Mysql chatting schema
    _user = "root",  // Mysql workbench id
    _password = "@@@@"; //Mysql workbench password

๐Ÿ“Œ MySQL (Workbench)

์ƒˆ๋กœ์šด SCHEMAS ์—ด๊ธฐ
user_mst table ์ƒ์„ฑ
role_mst table ์ƒ์„ฑ
role_dtl table ์ƒ์„ฑ
Column ์ •๋ณด๋Š” ์‚ฌ์ง„ ์ฐธ๊ณ 

๐Ÿ“Œ Java์—์„œ ํšŒ์›๋“ฑ๋ก -> MySQL์— ์—ฐ๋™ code

package j23_database;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import j20_JSON.builder.User;

public class UserInsert {
	
	private DBConnectionMgr pool ;
	
	public UserInsert() {
		pool = DBConnectionMgr.getInstance(); //Singleton
	}
			
			
	public int saveUser(User user) {
		
		int successCount = 0;
		String sql = null;
		Connection connection = null; // ์ „์—ญ๋ณ€์ˆ˜๋กœ ๋นผ์คŒ
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		
		try { // why??? 
			 connection = pool.getConnection();  //workbench ์— ์ ‘์†
			 
			 sql = "insert into user_mst\r\n"
			 		+ "values (0,?,?,?,?)";
			 /*
			  * ? ์“ฐ๋Š” ์ด์œ  : ์–ด๋–ค ๊ฐ’์ด ๋“ค์–ด๊ฐˆ์ง€ ๋ชจ๋ฅด๋‹ˆ
			  *  
			  */
			 
			 preparedStatement = connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
			 preparedStatement.setString(1, user.getUsername());  // 1 <-- '?' ์˜ ์ˆœ์„œ
			 preparedStatement.setString(2, user.getPassword());
			 preparedStatement.setString(3, user.getName());
			 preparedStatement.setString(4, user.getEmail());
			 
			 successCount = preparedStatement.executeUpdate();  //insert, update, delete ๋ช…๋ น ์‹คํ–‰
			 
			 resultSet = preparedStatement.getGeneratedKeys(); //return ResultSet
			 
			 if(resultSet.next()) {
				 System.out.println("์ด๋ฒˆ์— ๋งŒ๋“ค์–ด์ง„ user_id Key๊ฐ’: " + resultSet.getInt(1));
				 user.setUserId(resultSet.getInt(1)); //set
			 }
			 
			 
			 
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		
		return successCount;  // ๊ฑด์ˆ˜๋งŒ ๋ฆฌํ„ด
	}
	
	public int saveRoles(Map<String,Object> map) {
		
		
		int successCount = 0;
		String sql = null;
		Connection connection = null; // ์ „์—ญ๋ณ€์ˆ˜๋กœ ๋นผ์คŒ
		PreparedStatement preparedStatement = null;
		
		
		
		try { // why??? 
			 connection = pool.getConnection();  //workbench ์— ์ ‘์†
			 
			 List<Integer> roles = (List<Integer>) map.get("roles"); // map์€ key๊ฐ’์ด ๋ช…ํ™•
			 User user = (User)map.get("user");
			 
			 sql = "insert into role_dtl\r\n"
						+ "		 	values";
			 // map์•ˆ์— ๋“ค์–ด ์žˆ๋Š” List ํฌ๊ธฐ๋งŒํผ ๋ฐ˜๋ณต ํšŸ์ˆ˜
			 for(int i = 0; i<roles.size(); i++) {
					sql += "(0,?,?)";
					if(i< roles.size()-1) {
						sql += ",";
					}
				}
			 
			 preparedStatement = connection.prepareStatement(sql); //prepareStatement์—” ์™„์„ฑ๋œ query๋ฌธ์„ ์ „๋‹ฌํ•ด์•ผํ•จ
			 
			 for(int i = 0; i<roles.size();i++) {
			 preparedStatement.setInt((i*2) + 1, roles.get(i) );  
			 preparedStatement.setInt((i*2) + 2, user.getUserId());
			 }
			 successCount = preparedStatement.executeUpdate();  //insert, update, delete ๋ช…๋ น ์‹คํ–‰
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	
		return successCount;
	}
	
	
	
	public static void main(String[] args) {
		
		UserInsert userInsert = new UserInsert(); //saveUser๋ฅผ ์“ฐ๊ธฐ์œ„ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ
		
		User user = User.builder()
				    .username("qqq")
				    .password("1234") 
				    .name("qqq")
				    .email("qqq@gmail.com")
				    .build();
		int successCount = userInsert.saveUser(user);
		
		System.out.println("query execution sucess: " + successCount + "๊ฑด");
		System.out.println(user); 
		
		/*==============================================================*/
		/*
		 * ๊ถŒํ•œ์„ ์–ด๋–ป๊ฒŒ ์ฃผ๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ
		 */
	
		List<Integer> roleIdList = new ArrayList<>();
		roleIdList.add(15); // ์ˆซ์ž๊ฐ€ ๋ฌด์—‡์ด๋“  ์ค‘์š”์น˜์•Š์Œ
		roleIdList.add(16);
		
		Map<String,Object> map = new HashMap<>();
		map.put("user", user);
		map.put("roles", roleIdList);
		
		/*
		 * ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌถ์–ด๋‘๋Š” ์šฉ๋„ 
		 * List - ๋ฐ˜๋ณต ์šฉ๋„
		 * 
		 * Map - ๊ผฌ๋ฆฌํ‘œ๋ฅผ ๋‹ฌ์•„๋†“๋Š”๋‹ค... key๋ฅผ ์„ ํƒํ•˜๋ฉด value๊ฐ€ ๋”ฐ๋ผ๋‚˜์˜ค๋Š”... ์ž„์‹œ entity(์‹ค์žฌ) ๊ฐ์ฒด
		 * 
		 */
		
		
		System.out.println(map);
		
		successCount = userInsert.saveRoles(map);
		
		

	}

}
 
 
package j23_database;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

public class RoleInsert {
	
	private DBConnectionMgr pool;  //  ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ (์ ‘์†๋Œ€๊ธฐ์ž ์ฐฝ...)
	
	public RoleInsert() {
	
			pool = DBConnectionMgr.getInstance(); //์‹ฑ๊ธ€ํ†ค, ์œ ์ผํ•œ ์ธ์Šคํ„ด์Šค(๊ฐ์ฒด) , ์ปฌ๋ ‰์…˜ List( Vector )
	}
	
	
	public int saveRole(String roleName) {
		
		int successCount = 0;
		
		/*
		 * ํ”„๋ฆฌ ์ปค๋„ฅ์…˜ (free - Connection) ํ• ๋•Œ ์“ฐ๋Š” ๋ณ€์ˆ˜๋“ค 
		 */
		
		String sql = null;
		Connection con = null;            //db ์—ฐ๊ฒฐ
		PreparedStatement pstmt = null;   //db ์‹คํ–‰
		ResultSet rs = null;
		
		try {
			con = pool.getConnection();
			sql = "insert into role_mst values (0,?)";
			pstmt = con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
			pstmt.setString(1, roleName);  // ์ฒซ๋ฒˆ์งธ ? < --- set 
			 
			successCount = pstmt.executeUpdate(); // ์™„์„ฑ๋œ query๋ฌธ pstmt๊ฐ€ ๋“ค๊ณ ์žˆ์Œ
			
			int newKey = 0;
			
			rs = pstmt.getGeneratedKeys();  // ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๋ฉด, ์ž๋™์ฆ๊ฐ€(auto increment) ํ‚ค๊ฐ’์„ ๋“ค๊ณ  ์žˆ์Œ
			if(rs.next()) { // while ๋ฌธ ๋Œ€์‹  If๋ฌธ ์“ด ์ด์œ ?  ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜๋ผ์„œ..
				newKey = rs.getInt(1); // 1๋ฒˆ์—ด์˜ ์œ„์น˜ 
			}
			
			System.out.println(newKey !=0 ? "์ƒˆ๋กœ์šด ํ‚ค๊ฐ’: " + newKey : "ํ‚ค๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์Œ");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			
			pool.freeConnection(con, pstmt, rs);
		}
		
		return successCount;
	}
	
	public static void main(String[] args) {
		
		
		RoleInsert roleInsert = new RoleInsert();
		
		int successCount = roleInsert.saveRole("ROLE_TESTER");
		System.out.println("insert ์„ฑ๊ณต ๊ฑด์ˆ˜: " + successCount);
		
	}

}

Java์—์„œ ํšŒ์›์ •๋ณด ์—…๋ฐ์ดํŠธ, MySQL์—์„œ ํ™•์ธํ•œ ๋ฐ์ดํ„ฐ (user_mst) Java์—์„œ ํšŒ์›์ •๋ณด ์—…๋ฐ์ดํŠธ, MySQL์—์„œ ํ™•์ธํ•œ ๋ฐ์ดํ„ฐ (role_dtl) Java์—์„œ ํšŒ์›์ •๋ณด ์—…๋ฐ์ดํŠธ, MySQL์—์„œ ํ™•์ธํ•œ ๋ฐ์ดํ„ฐ (role_mst)

0๊ฐœ์˜ ๋Œ“๊ธ€