tuple1 = (11, 22, 33)
for i in range( len( tuple1) ):
print( tuple1[i] )
packing, unpacking
packing
하나의 변수에 여러개의 값을 넣는 것
unpacking
패킹된 변수에서 여러개의 값을 꺼내오는 것
c = (3, 4)
d, e = c # c의 값을 언패킹하여 d, e에 값을 넣었다
f = d, e # 변수 d와 e를 f에 패킹
튜플의 활용
두 변수의 값을 바꿀 때 임시변수가 필요 없다.
함수의 리턴 값으로 여러 값을 전달할 수 있다.
Packing 실습
x = 3
y = 5
position = (x,y)
print("x, y로 이루어진 튜플 position의 값은 {}입니다.".format(position))
Packing, Unpacking을 이용해 튜플의 값을 바꾸기
a = 1
b = 2
#코드를 작성해 보세요.
a, b = b,a
print("a : {}, b : {}".format(a, b))
튜플을 이용한 함수의 리턴값
튜플 리스트 활용
for a in enumerate(list):
print('{}번째 값: {}'.format(a[0], a[1]))
for a in enumerate(list):
print('{}번째 값: {}'.format(*a))
튜플 딕셔너리 활용
for a in dict.items():
print('{}의 나이는:{}'.format(a[0], a[1]))
for a in dict.items():
print('{}의 나이는:{}'.format(*a))
예시 )
products = {"풀" : 1800, "색종이" : 1000}
for product in products.items():
print("{}은 {}원이다.".format(product[0], product[1]))
list = ['개', '고양이', '사자']
for product in enumerate(list):
print("{}번째 값은 {}이다.".format(product[0], product[1]))
출력
풀은 1800원이다.
색종이은 1000원이다.
0번째 값은 개이다.
1번째 값은 고양이이다.
2번째 값은 사자이다.
input 조건을 넣어준 while문
while selected not in ['가위', '바위', '보']:
selected = input('가위, 바위, 보 중에 선택하세요>')
while문으로 for문처럼 출력해보기
numbers = [1,2,3]
length = len(numbers)
i = 0
while
i<length
:
print(numbers[i])
i = i + 1
딕셔너리의 이름표에는 문자열과 숫자형, 튜플을 사용할 수 있으며, 값으로는 어떤 자료형이 오던 상관 없습니다.
# ↓ 이름표는 문자열 또는 숫자를 주로 사용하지만
dict = { "이름표" : [1,2,3] }
# ↑ 값은 리스트를 포함해서 무엇이든 올 수 있습니다.
print( dict["이름표"] )
결과
[1, 2, 3]
딕셔너리 수정하기
추가
dict['three']=3
수정
dict['one']=11
삭제
del(dict['one'])
dict.pop('two')
딕셔너리 Key와 Value 값 출력하기
days_in_month = {"1월":31, "2월":28, "3월":31, "4월":30, "5월":31}
for key in days_in_month.keys():
print(key)
for value in days_in_month.values():
print(value)
출력
1월
2월
3월
4월
5월
31
28
31
30
31
days_in_month = {"1월":31, "2월":28, "3월":31, "4월":30, "5월":31}
for key, value in days_in_month.items():
#출력 형식은 아래 print함수를 참고하세요
print("{}은 {}일이 있습니다.".format( key, value ) )
출력
1월은 31일이 있습니다.
2월은 28일이 있습니다.
3월은 31일이 있습니다.
4월은 30일이 있습니다.
5월은 31일이 있습니다.
인덱스를 이용하는 방법
products = {"풀" : 1800, "색종이" : 1000}
for product in products.items():
print("{}은 {}원이다.".format(product[0], product[1]))
list = [1,2,3,4,5]
list[0] // 첫번째값
list[-1] // 마지막값
list[5], list[-6] // 에러
list[2] = 7 // 값 변경
rainbow=['빨강','주황','노랑','초록','파랑','남색','보라']
#rainbow를 이용해서 first_color에 값을 저장하세요
first_color = rainbow[0]
print('무지개의 첫번째 색은 {}이다'.format(first_color) )
rainbow=['빨강','주황','노랑','초록','파랑','남색','보라']
#rainbow를 이용해서 last_color에 값을 저장하세요
last_color = rainbow[-1]
print('무지개의 마지막 색은 {}이다'.format(last_color) )
리스트에 새로운 값을 추가하는 방법
list1=[1,2,3]이라고 할 때
append를 이용
list1.append(4)
append를 이용하면 리스트에 새로운 값이 추가된다.
뒤에 새로운 리스트를 더하기
list2=list1+[4]
list1은 그대로 두고, 새로운 리스트를 만들어 낸다.
list1 = [1,2,3]
list2 = list1 + [4]
n = 4
if n in list2:
print('{}가 리스트에 있다'.format(n))
if True:
print("조건식이 True이므로 실행됩니다.")
if False:
print("조건식이 False이므로 실행되지 않습니다.")
** 주의 : if문 아래줄은 들여쓰기 되어야 한다.
from datetime import datetime
hour = datetime.now().hour
#현재 시간이 12시보다 작을때만 print문을 실행하도록 이 아래줄에 if문을 추가하세요.
if(hour < 12):
print('오전입니다.')#if문을 추가한 이후 이 줄은 들여쓰기 되어야 합니다.
IF ELSE문
mine = '가위'
yours = '바위'
if mine == yours:
print("비겼습니다.")
#이 아래줄에 else문을 추가해서 비기지 않은 경우에만 아래 print문이 실행되도록 만들어 보세요
else:
print("비기지 않았습니다.")#else문이 추가되고 나면 이 줄은 들여쓰기 되어야 합니다.
from datetime import datetime
hour = datetime.now().hour
from datetime import datetime
minute = datetime.now().minute
문자열.format()
number = 15
if number % 3 == 0: #number가 3의 배수인지 확인합니다.
print("{}는 3의 배수입니다.".format(number))#이 코드는 실행됩니다.
number = 16
if number % 3 == 0: #number가 3의 배수인지 확인합니다.
print("{}는 3의 배수입니다.".format(number))#이 코드는 실행되지 않습니다.
number = 20
welcome = '환영합니다'
base = '{} 번 손님 {}'
#아래 3개의 print는 같은 값을 출력
print(number,'번 손님',welcome)
print(base.format(number,welcome))
print('{} 번 손님 {}'.format(number,welcome))
#=>20 번 손님 환영합니다
함수 만들기
a = 5
b = 7
#이 아래줄에 a와 b를 더해서 result에 저장하는 함수add를 만들어 보세요.
def add():
result = a + b #함수 내부의 코드가 되려면 이 줄은 들여쓰기 되어야 합니다.
print(result) #함수 내부의 코드가 되려면 이 줄은 들여쓰기 되어야 합니다.
#이 아래에서 add함수를 사용해 보세요.
add()
def add(a,b):
#함수 add에서 a와 b를 입력받아서 두 값을 더한 값을 result에 저장하고 출력하도록 만들어 보세요.
result = a + b
print( "{} + {} = {}".format(a,b,result) )#print문은 수정하지 마세요.
add(10,5)
Return이 있는 함수 만들기
def add_10(value):
result = value + 10
return result
n = add_10(5)
print(n)
따옴표/큰따옴표를 포함하는 문자열 만들기
#string1을 선언하세요.
string1 = """다스베이더가 말했다.
"내가 니 애비다!"
그 말을 들은 루크는 '깜짝' 놀랐다."""
print(string1)
DataSource를 쉽게 접근하기 위한 유틸 클래스, 트랜젝션매니져 및 다양한 DataSource 구현을 제공
org.springframework.jdbc.object
RDBMS 조회, 갱신, 저장등을 안전하고 재사용 가능한 객제 제공
org.springframework.jdbc.support
jdbc.core 및 jdbc.object를 사용하는 JDBC 프레임워크를 지원
JDBC Template
org.springframework.jdbc.core에서 가장 중요한 클래스입니다.
리소스 생성, 해지를 처리해서 연결을 닫는 것을 잊어 발생하는 문제 등을 피할 수 있도록 합니다.
스테이먼트(Statement)의 생성과 실행을 처리합니다.
SQL 조회, 업데이트, 저장 프로시저 호출, ResultSet 반복호출 등을 실행합니다.
JDBC 예외가 발생할 경우 org.springframework.dao패키지에 정의되어 있는 일반적인 예외로 변환시킵니다.
실습코드
JdbcTemplate select 예제1
열의 수 구하기
int rowCount = this.jdbcTemplate.queryForInt("select count(*) from t_actor");
JdbcTemplate select 예제2
변수 바인딩 사용하기
int countOfActorsNamedJoe = this.jdbcTemplate.queryForInt("select count(*) from t_actor where first_name = ?", "Joe");
JdbcTemplate select 예제3
String값으로 결과 받기
String lastName = this.jdbcTemplate.queryForObject("select last_name from t_actor where id = ?", new Object[]{1212L}, String.class);
JdbcTemplate select 예제4
한 건 조회하기
Actor actor = this.jdbcTemplate.queryForObject(
"select first_name, last_name from t_actor where id = ?",
new Object[]{1212L},
new RowMapper<Actor>() {
public Actor mapRow(ResultSet rs, int rowNum) throws SQLException {
Actor actor = new Actor();
actor.setFirstName(rs.getString("first_name"));
actor.setLastName(rs.getString("last_name"));
return actor;
}
});
JdbcTemplate select 예제5
여러 건 조회하기
List<Actor> actors = this.jdbcTemplate.query(
"select first_name, last_name from t_actor",
new RowMapper<Actor>() {
public Actor mapRow(ResultSet rs, int rowNum) throws SQLException {
Actor actor = new Actor();
actor.setFirstName(rs.getString("first_name"));
actor.setLastName(rs.getString("last_name"));
return actor;
}
});
JdbcTemplate select 예제6
중복 코드 제거 (1건 구하기와 여러 건 구하기가 같은 코드에 있을 경우)
public List<Actor> findAllActors() {
return this.jdbcTemplate.query( "select first_name, last_name from t_actor", new ActorMapper());
}
private static final class ActorMapper implements RowMapper<Actor> {
public Actor mapRow(ResultSet rs, int rowNum) throws SQLException {
Actor actor = new Actor();
actor.setFirstName(rs.getString("first_name"));
actor.setLastName(rs.getString("last_name"));
return actor;
}
}
JdbcTemplate insert 예제
INSERT 하기
this.jdbcTemplate.update("insert into t_actor (first_name, last_name) values (?, ?)", "Leonor", "Watling");
JdbcTemplate update 예제
UPDATE 하기
this.jdbcTemplate.update("update t_actor set = ? where id = ?", "Banjo", 5276L);
JdbcTemplate delete 예제
DELETE 하기
this.jdbcTemplate.update("delete from actor where id = ?", Long.valueOf(actorId));
JdbcTemplate외의 접근방법
NamedParameterJdbcTemplate
JdbcTemplate에서 JDBC statement 인자를 ?를 사용하는 대신 파라미터명을 사용하여 작성하는 것을 지원
Spring JPA의 경우에는 객체 단위로 CRUD가 가능합니다. 일반적으로 CUD는 단일 테이블에 대하여 작업을 하는 경우가 많은데 Mybatis에서 하게 되면 해당 쿼리를 직접 짜고, 들어오는 Parameter에 대하여 모두 확인하여 처리해야 하는 경우가 많습니다.
그러나 MyBatis의 장점을 무시할 순 없습니다. ER-DB를 사용하는 경우 자기가 원하는 Query를 짜서 직접 데이터를 손쉽게 전달하고 처리할 수 있다는 장점이 있죠. 특히, Spring JPA에서 활용하는 상당히 복잡한 나름대로의 SQL을 배워야 하고, 테이블 Join을 하게 될 경우 해당 조건을 객체구조에도 녹여내야 하는 등 배우고 익혀서 적용해야 할 포인트가 많아지게 됩니다.