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.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.0637 sec