μ¬λ¬ DBμμ 곡ν΅μ μΌλ‘ μ¬μ©ν μ μλλ‘ μλ°μμλ JDBCλΌλ 곡ν΅λ μ€νμ μ 곡
- λ°μ΄ν° μ μ μΈμ΄ - ( DDL : Data Definition Language )
ν
μ΄λΈμ΄λ κ΄κ³μ ꡬ쑰λ₯Ό μμ±
- CREATE - μλ‘μ΄ λ°μ΄ν°λ² μ΄μ€ κ΄κ³ (ν μ΄λΈ) View, μΈλ±μ€ , μ μ₯ νλ‘μμ λ§λ€κΈ°.
- DROP - μ΄λ―Έ μ‘΄μ¬νλ λ°μ΄ν°λ² μ΄μ€ κ΄κ³ ( ν μ΄λΈ ) , λ·° , μΈλ±μ€ , μ μ₯ νλ‘μμ λ₯Ό μμ νλ€.
- ALTER - μ΄λ―Έ μ‘΄μ¬νλ λ°μ΄ν°λ² μ΄μ€ κ°μ²΄μ λν λ³κ²½ , RENAMEμ μν μ νλ€.
- TRUNCATE - κ΄κ³ ( ν μ΄λΈ )μμ λ°μ΄ν°λ₯Ό μ κ±°νλ€. ( νλ² μμ μ λμ΄ν¬ μ μμ.)
- λ°μ΄ν° μ‘°μ μΈμ΄ - ( DML : Data Manipulation Language )
ν
μ΄λΈμ λ°μ΄ν° κ²μ, μ½μ
, μμ , μμ νλ λ° μ¬μ©
- SELECT - κ²μ(μ§μ)
- INSERT - μ½μ (λ±λ‘)
- UPDATE - μ λ°μ΄νΈ(μμ )
- DELETE - μμ
- λ°μ΄ν° μ μ΄ μΈμ΄ - ( DCL : Data Control Language)
λ°μ΄ν°μ μ¬μ© κΆνμ κ΄λ¦¬νλ λ° μ¬μ©νλ©° GRANT, REVOKE λ¬Έ λ±μ΄ μλ€.
- GRANT - νΉμ λ°μ΄ν°λ² μ΄μ€ μ¬μ©μμκ² νΉμ μμ μ λν μν κΆνμ λΆμ¬νλ€.
- REVOKE - νΉμ λ°μ΄ν°λ² μ΄μ€ μ¬μ©μμκ² νΉμ μμ μ λν μν κΆνμ λ°ν or νμ νλ€.
- λ°μ΄ν°λ² μ΄μ€ μ¬μ©μμκ² GRANT λ° REVOKEλ‘ μ€μ ν μ μλ κΆν.
- SELECT - λ°μ΄ν°λ² μ΄μ€μμ λ°μ΄ν°λ₯Ό κ²μν μ μλ κΆν
- INSERT - λ°μ΄ν°λ² μ΄μ€μμ λ°μ΄ν°λ₯Ό λ±λ‘(μ½μ )ν μ μλ κΆν
- UPDATE - λ°μ΄ν°λ² μ΄μ€μ λ°μ΄ν°λ₯Ό μ λ°μ΄νΈ ν μ μλ κΆν
- DELETE - λ°μ΄ν°λ² μ΄μ€μ λ°μ΄ν°λ₯Ό μμ ν μ μλ κΆν.
- USAGE - μ€ν€λ§ λλ ν¨μμ κ°μ λ°μ΄ν°λ² μ΄μ€ κ°μ²΄λ₯Ό μ¬μ©ν μ μλ κΆν
DELETE, TRUNCATE, DROPμ μ°¨μ΄
- DELETE : λ°μ΄ν°λ μ§μμ§μ§λ§ ν μ΄λΈ μ©λμ μ€μ΄ λ€μ§ μλλ€. μνλ λ°μ΄ν°λ§ μ§μΈ μ μλ€. μλͺ» μμ ν κ²½μ° μμ νκ²μ λλ릴 μ μλ€.
- TRUNCATE : μμ ν μ©λμ΄ μ€μ΄λ€κ³ μΈλ±μ€ λ±λ λͺ¨λ μμ λλ€. ν μ΄λΈμ΄ μμ λμ§λ μμΌλ λ°μ΄ν°λ§ μμ νλ€. μ νν΄μ μ§μΈ μ μλ€. μμ ν μ λ λλ릴 μ μλ€
- DROP : ν μ΄λΈ μ 체λ₯Ό μμ , 곡κ°, κ°μ²΄λ₯Ό μμ νλ€, μμ ν μ λλ‘ λλ릴 μ μλ€.
Objectμ Relation κ°μ λΆμΌμΉ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν λꡬ μ½λμ λ°λ³΅μ μ€μ΄κ³ κ°μ²΄ μ€μ¬μ μ€κ³μ μ§μ€ν΄μ κ°λ°μ μ§νν μ μλ€.
μλ° μ§μμμ μμ£Ό μ°μ΄λ ORMμ JPAμ Hibernateκ° μλ€. JPAλ₯Ό λ§λ€λΉμ NOSQLμ΄ λμ€μ§ μμμ RDBMSμλ§ νμ μ μΌλ‘ μ¬μ©μ΄ κ°λ₯
JpaRepository--extends-->PagingAndSortingRepository
PagingAndSortingRepository--extends-->CrudRepository
CrudRepository--extends-->Repository
| Class | Methods |
|---|---|
| Repository | |
| CrudRepository | save saveAll findById existsById findAll findAllById delete deleteAll |
| PagingAndSortingRepository | findAll(Sort var1) findAll(Pageable var1) |
| JpaRepository | flush() saveAndFlush() deleteInBatch() getOne() |
μλ° μ λλ¦μμ Type νκΈ° μ½μ΄μ μλ―Έ
- E - Element (μμλ₯Ό μλ―Έ)
- K - Key (ν€λ₯Ό μλ―Έ)
- N - Number (μ«μλ₯Ό μλ―Έ)
- T - Type (νμ μ μλ―Έ)
- V - Value (κ°μ μλ―Έ)
Association κ΄κ³λ νλ μ΄μμ κ°μ²΄κ° μ°κ²°λμ΄ μλ μνλ₯Ό λνλΈλ€. μ΄λ μ°κ²°μ νλμ κ°μ²΄κ° λ€λ₯Έ κ°μ²΄λ₯Ό μμ νκ±°λ μ°Έμ‘°νλ μνκ° λλ€.
Entity
public class School {
@id @Column("SCHOOL_ID")
private Long id;
private String name;
private String address;
private String telnumber;
}
@Entity
public class Student {
@Id @Column("STUDENT_ID")
private Long id;
private String userName;
private String grade;
@ManyToOne(fetch = FetchType.LAZY)
@JoinCoulmn(name = "SCHOOL_ID")
private School school
}
FetchType.LAZYλ‘λ©μ μ¬μ©νλ©΄ JPAλ ν λ²μ λͺ¨λ λ°μ΄ν°λ₯Ό λ€ λ‘λ©νμ§ μκ³ proxyλ₯Ό μ΄μ©ν΄μ μ²λ¦¬νλ€. λ κ° μ΄μμ Entityλ€μ μ μ΄νλ λ©μλλ€μ μ¬μ©ν λλ ν΄λΉ λ©μλλ€μSchoolServiceμfindStudentInfoλ©μλμ κ°μ΄@Transactionalμ΄λ Έν μ΄μ μ μ¬μ©ν΄μ νλμ νΈλμμ μμμ μ€νλλλ‘ ν΄μΌ νλ€.
@Entity
public class School {
@id @GeneratedValue
@Column("SCHOOL_ID")
private Long id;
private String name;
private String address;
private String telnumber;
@OneToMany(mappedBy = "school")
private Set<Student> students;
public void registerStudent(Student s){
if (students == null) {
students = new HashMap<Student>();
}
students.add(s);
}
}
@Entity
public class Student {
@Id @Column("STUDENT_ID")
private Long id;
private String userName;
private String grade;
@ManyToOne(fetch = FetchType.LAZY)
@JoinCoulmn(name = "SCHOOL_ID")
private School school
}QueryDSLμ μΌμ’
μ ννμμΌλ‘ κΈ°μ‘΄ μΈμ΄μ λ©μλλ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ² μ΄μ€μ μ§μλ₯Ό ν μ μλ€.
maven, gradle μ€μ μΌλ‘ QClass λ₯Ό Entityλ‘λΆν° μλμΌλ‘ μμ±ν΄μ€λ€.
Spring Data JPA μμλ queryDSLμ κ°μ΄ μ¬μ©ν μ μλ κΈ°λ° ν΄λμ€λ₯Ό μ 곡 νλλ° κ·Έ ν΄λμ€κ° QueryDslRepositorySupport μ΄λ€.
JPA μ¬μ©ν λμ κΈ°μ‘΄ Repositoryμ κΈ°λ₯μ μΆκ°νλ ννλ‘ κ°λ° μ§νμ΄ κ°λ₯νλ€.
QueryDslRepositorySupportλ μΆμ ν΄λμ€μ΄λ―λ‘ κ΅¬ν체λ₯Ό λ§λ€μ΄μΌ νλλ° μ μ°¨κ° νμνλ€.
QClassμμ± (Build Tool μ€μ )Custom Repository Interfaceμμ± (JPAμμ μ§μνμ§ μλ 쿼리μ λν Interface μμ±)QueryDslRepositorySupportꡬν체 μμ±Custom Repositoryμμ±
public interface UserRepositoryCustom {
List findAllLike(String keyword);
}
public class UserRepositoryImpl extends QuerydslRepositorySupport implements UserRepositoryCustom {
public UserRepositoryImpl() {
super(UserEntity.class);
}
@Override
@Autowired
public void setEntityManager(EntityManager entityManager) {
super.setEntityManager(entityManager);
}
@Override
public List findAllLike(String keyword) {
QUserEntity qUserEntity = QUserEntity.userEntity;
JPQLQuery<UserEntity> query = from(qUserEntity);
List<UserEntity> resultList =
query.where(qUserEntity.username.like(keyword)).fetch();
return resultList;
}
}
QueryDslRepositorySupportλ Entity Classμ λν μμ‘΄μ±μ΄ κ°ν΄μ μμ±μμ μ λ¬λ°μ§ λͺ»νλ©΄ μΈμ€ν΄μ€κ° μμ±λμ΄λ μ¬μ©ν μ μμΌλ©° λ€λ₯Έλ°©λ²μΌλ‘ Entityλ₯Ό μ£Όμ ν μ μκ² λμ΄μλ€. (setEntity μμ)
MyBatisμμλ 쿼리 λ§€ν ꡬ문μ μ€ννκΈ° μν΄ sqlSession κ°μ²΄λ₯Ό μ¬μ©νκ³ sqlSession κ°μ²΄λ₯Ό μμ±νκΈ° μν΄μ SqlSessionFactoryλ₯Ό μ¬μ©νλ€. μ€νλ§κ³Ό κ°μ΄ μ¬μ©ν λλ SqlSessionTemplateμ μ΄λ€.
κ·Έ μ΄μ λ μ€νλ§ μ¬μ©μμ sqlSessionμ λ체νμ¬μ£Όκ³ μμΈ μ²λ¦¬λ₯Ό Mybatisκ° μλλΌ Springμ DataAccessExceptionμΌλ‘ μΉν μμΌμ€λ€.
Mybatisμμλ Root Resource ν΄λμ DDL, DML νμΌμ λκ³ μ€νλκ² ν μ μλ€. application.properties νμΌμ μ§μ κ°λ₯ν μ΅μ μ 5κ°μ§μ΄λ
- Spring.database.platform : λ°μ΄ν° λ² μ΄μ€ μ ν
- Spring.datasource.schema : μ€ν€λ§λ₯Ό μ μνλ SQLνμΌ
- Spring.datasource.data : λ°μ΄ν°λ₯Ό μ λ ₯νλ SQL νμΌ
- Spring.datasource.separator : SQL ꡬλΆμ
- Spring.datasource.sql-script-encoding : SQL μΈμ½λ© μ΅μ
Tomcat 7 λ²μ κΉμ§λ DBCP1 - μ±κΈ μ€λ λλ‘ μλ²μ λΆνκ° λ§μ΄ λͺ°λ¦΄ κ²½μ°μ λκΈ°μ΄μ΄ μκΈ°λ λ¬Έμ κ° λ§μ