U E D R , A S I H C RSS

토비의스프링3/오브젝트와의존관계

1. DAO

  • 보를 JDBC API를 DB DAO 만들.
  • DAO(Data Access Object)
    • DB를 , .

1.1. User

  • 보를 바빈 따르는 .
    • 바빈(JavaBean)
      • .
      • 미는 .

        • 는 디
        • getter setter를 , .
  • User : 바빈

package springbook.user.domain;

public class User {
    String id;
    String name;
    String password;

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}
  • USER
UserId VARCHAR(10) Primary Key
Name VARCHAR(20) Not Null
Password VARCHAR(20) Not Null

1.2. UserDao

  • UserDao : JDBC를 , 는 DAO

package springbook.user.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import springbook.user.domain.User;

public class UserDao {
    public void add(User user) throws SQLException, ClassNotFoundException{
        Class.forName("com.mysql.jdbc.Driver");
        Connection c = DriverManager.getConnection("jdbc:mysql://localhost/springbook", "spring", "book");

        PreparedStatement ps = c.prepareStatement("insert into users(id, name, password) values(?,?,?)");
        ps.setString(1, user.getId());
        ps.setString(2, user.getName());
        ps.setString(3, user.getPassword());
		
        ps.executeUpdate();
		
        ps.close();
        c.close();		
    }
    public User get(String id) throws ClassNotFoundException, SQLException{
        Class.forName("com.mysql.jdbc.Driver");
        Connection c = DriverManager.getConnection("jdbc:mysql://localhost/springbook", "spring", "book");

        PreparedStatement ps = c.prepareStatement("select * from users where id = ?");
        ps.setString(1, id);
		
        ResultSet rs = ps.executeQuery();
        rs.next();
		
        User user = new User();
        user.setId(rs.getString("id"));
        user.setName(rs.getString("name"));
        user.setPassword(rs.getString("password"));
		
        rs.close();
        ps.close();
        c.close();
		
        return user;
    }
}

1.3. main()


    • DAO 만들
      • UserDao 무 복 .
    • 만들.
  • main 메

public static void main(String[] args) throws SQLException, ClassNotFoundException {
    UserDao dao = new UserDao();

    User user = new User();		
    user.setId("zeropage");
    user.setName("");
    user.setPassword("zp");
		
    dao.add(user);
		
    System.out.println(user.getId() + "등 ");
		
    User user2 = dao.get(user.getId());		
    System.out.println(user2.getName());
    System.out.println(user2.getPassword());
		
    System.out.println(user2.getId() + " ");
}
  • .

zeropage 등 

zp
zeropage  

1.4. DAO?

  • DAO?
    • UserDao
      • main() 메

    • UserDao .
DeleteMe) . -

2. DAO

2.1.

  • 는 끊. 면 변 ?
  • : 변 .
    • 능 변
      • 는데 5 리는 > 는데 5 뒤 문
    • ?

  • 따른 .

      • .
      • 끼리는 , 리.

2.2. 만들

2.2.1. UserDao

  1. DB .
  2. / SQL문 Statement를 만들 .
  3. 를 close.

  4. : DB
    • add() 메 get() 메 .
      • DAO 메를 만
        • DB
        • DB 는 방 바뀌면 데를 .

2.2.2.

  • .
  • UserDao : getConnection() 메

public void add(User user) throws SQLException, ClassNotFoundException {
    Connection c = getConnection();
    …
}

public void get(String id) throws SQLException, ClassNotFoundException {
    Connection c = getConnection();
    …
}
    
private Connection getConnection() throws SQLException, ClassNotFoundException {
    Class.forName("com.mysql.jdbc.Driver");
    Connection c = DriverManager.getConnection("jdbc:mysql://localhost/springbook", "spring", "book");
}
  • DAO 메 DB 는 방 바뀌면 getConnection() 메.

2.2.3. : 리


    • 내부 를 변
    • 부 동 .

      • 내부 .
    • (마 러, )
DeleteMe) -

2.3. DB 만들 독립

3. DAO




      • ,
    • 를 만들 는 방 -> 불
  • 1.3.1
    • 를 독립
      • 내부 를 변 를 만 (리링)
      • . .
    • .
  • 1.3.2
    • .

      • 를 따 내는
      • interface

  • 1.3.3
    • 른 독립 .
      • .

      • .
      • : 란 런 .

        • 를 내부
        • 받는. ()
  • 1.3.4
    • (OCP) (SOLID)
      • 모듈



        • 모듈는 부 .


        • .
        • 른 모듈 .


      • ,
  • .. 란?

4. (IoC)

  • 1.4.1

      • 만들 를 돌.
      • 리 - .
      • DaoFactory : 리.
  • 1.4.2


public class DaoFactory{
	//  ConnectionMaker를   복됨
	public UserDao userDao( ){
		return new UserDao(new DConnectionMaker());
	}

	public AccountDao accountDao( ){
		return new AccountDao(new DConnectionMaker());
	}

	public MessageDao messageDao( ){
		return new MessageDao(new DConnectionMaker());
	}
}

public class DaoFactory{
	public UserDao userDao( ){
		return new UserDao(connectionMaker());
	}

	public AccountDao accountDao( ){
		return new AccountDao(connectionMaker());
	}

	public MessageDao messageDao( ){
		return new MessageDao(connectionMaker());
	}

	//  리
	public ConnectionMaker connectionMaker(){
		return new DConnectionMaker();
	}
}


  • 1.4.3
    • 란?
      • 뒤바뀌는
      • 른 대 .
      • .
        • 브러리는 능동 .
        • .

  • IoC .
    • .

5. IoC

5.1 리를 IoC
  • 5.1.1
    • 빈(bean) : 만들 를 부. 바빈는 빈 . 부른.
    • 리(bean factory) : 빈 IoC. IoC . .
    • (application context) : IoC 만들 리. 보를 , . 보를 따 IoC . 는 xml .
    • 보 : IoC 보. IoC .
    • /IoC : IoC 리를 /IoC .
  • 5.1.2
    • 보를 만는 방 ->
      • 1. 리를 @Configuration .

@Configuration
public class DaoFactory{}
  • 2. 를 만들는 메는 @Bean.

@Configuration
public class DaoFactory{
@Bean
public UserDao userDao(){ ...}
}
  • 만들 보를 및 빈 ->
    • 1. ApplicationContext . @Configuration AnnotationConfigApplicationContext @Configuration .

public static void main(Strings[] args) throws ClassNotFoundException, SQLException{
ApplicatioContext context = new AnnotationConfigApplicationContext(DaoFactory.class);
}
  • 2. ApplicationContext getBean()메 .

public static void main(Strings[] args) throws ClassNotFoundException, SQLException{
ApplicatioContext context = new AnnotationConfigApplicationContext(DaoFactory.class);
UserDao dao = context.getBean("userDao", UserDao.class);
}
getBean()메 : ApplicationContext 는 메. "" ApplicationContext . 빈 . 는 userDao()는 메 "" userDao. 메 myUserDao()면 "myUserDao" . Object 바 5 릭 메 .
5.2
  • 5.2.1
    • @Configuration IoC . 내부 @Configuration @Bean메 getBean() 메 .
  • 5.2.2

      1. .
      2. IoC .
      3. 는 빈 .

6.

6.1
  • . 면 내부 는 빈 를 모 .
  • 리는 부 만들 . , .

    • 1. private .
    • 2. .
    • 3. 만 만들.
    • 4. 를 만들 바람.
6.2
  • . .
6.3 링 빈
  • (scope) : 는 빈 는 범. 빈 만 만들 . (prototype), (request), (session) .

7. (DI)

  • : 는 모듈 .
  • (DI)? : (Dependency Injection) (IoC) 방 더 명 .

      1. 모델 는 런 . .
      2. 3 .
      3. () 만들.
  • DI : DI를 받 받는데 를 바 , .
  • DI
    • Bean : 는 DI를 Bean .
    • Bean Factory : 런 Bean Factory Bean 를 맺.
    • (Dependency Lookup) : DI방 는 DI를 받는 Bean . 만 DL 면 Bean .

8. XML

  • XML
  • 는 DI를 만들 . XML .
    • <beans> : @Configuration. <bean>.
      • <bean> : @Bean 바 메.
        • <id> : @Bean 메 . getBean() .
        • <class> : @Bean 메 return. .
        • <property> : @Bean 메 DI를 . .
          • <name> : set부 .
          • <ref> : Bean id.
          • <value> : 른 Bean <ref> 대 . 링, .
  • (Java )

@Configuration
class DaoFactory {
 ...

 @Bean
 public ConnectionMaker connectionMaker() {
  return new DConnectionMaker();
 }

 @Bean
 userDao setConnectionMaker(connectionMaker()) {
 ... };
}
  • (XML)

<beans>
 <bean id="myConnectionMaker" class="springbook.user.dao.DConnectionMaker" />

 <bean id="userDao" class="springbook.dao.UserDao">
  <property name="connectionMaker ref="myConnectionMaker" />
 </bean>
</beans>
  • XML
    • GenericXmlApplicationContext("xml ")를 .

ApplicationContext context = new GenericXmlApplicationContext("springbook/user/dao/daoContext.xml")

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:31:21
Processing time 0.0627 sec