>Java >java지도 시간 >Spring Boot가 JdbcTemplate을 통합하는 방법

Spring Boot가 JdbcTemplate을 통합하는 방법

王林
王林앞으로
2023-05-12 14:17:141176검색

Integrate JdbcTemplate

JdbcTemplate은 Spring에서 제공하는 JDBC 템플릿 프레임워크 집합으로, JDBC를 직접 사용할 때 대량의 코드가 반복되는 문제를 AOP 기술을 사용하여 해결합니다. JdbcTemplate은 Mybatis만큼 유연하지는 않지만 JDBC를 직접 사용하는 것보다 훨씬 편리합니다. Spring Boot에서 JdbcTemplate을 사용하면 자동화된 구성 클래스인 JdbcTemplateAutoConfiguration을 제공합니다. 소스 코드의 일부는 다음과 같습니다.

@Configuration
@ConditionalOnClass({DataSource.class, JdbcTemplate.class})
@ConditionalOnSingleCandidate(DataSource.class)
@AutoConfigureAfter({DataSourceAutoConfiguration.class})
@EnableConfigurationProperties({JdbcProperties.class})
public class JdbcTemplateAutoConfiguration {
    public JdbcTemplateAutoConfiguration() {
    }
    @Configuration
    @Import({JdbcTemplateAutoConfiguration.JdbcTemplateConfiguration.class})
    static class NamedParameterJdbcTemplateConfiguration {
        NamedParameterJdbcTemplateConfiguration() {
        }
        @Bean
        @Primary
        @ConditionalOnSingleCandidate(JdbcTemplate.class)
        @ConditionalOnMissingBean({NamedParameterJdbcOperations.class})
        public NamedParameterJdbcTemplate namedParameterJdbcTemplate(JdbcTemplate jdbcTemplate) {
            return new NamedParameterJdbcTemplate(jdbcTemplate);
        }
    }
    @Configuration
    static class JdbcTemplateConfiguration {
        private final DataSource dataSource;
        private final JdbcProperties properties;

        JdbcTemplateConfiguration(DataSource dataSource, JdbcProperties properties) {
            this.dataSource = dataSource;
            this.properties = properties;
        }
        @Bean
        @Primary
        @ConditionalOnMissingBean({JdbcOperations.class})
        public JdbcTemplate jdbcTemplate() {
            JdbcTemplate jdbcTemplate = new JdbcTemplate(this.dataSource);
            Template template = this.properties.getTemplate();
            jdbcTemplate.setFetchSize(template.getFetchSize());
            jdbcTemplate.setMaxRows(template.getMaxRows());
            if (template.getQueryTimeout() != null) {
                jdbcTemplate.setQueryTimeout((int)template.getQueryTimeout().getSeconds());
            }
            return jdbcTemplate;
        }
    }
}

소스 코드를 보면 클래스 경로 아래에 DataSource와 JdbcTemplate이 존재하고 인스턴스가 하나만 있는 것을 알 수 있습니다. DataSource, 자동 구성이 적용됩니다. 개발자가 JdbcOperations를 제공하지 않으면 Spring Boot는 자동으로 JdbcTemplate을 컨테이너에 삽입합니다(JdbcTemplate은 JdbcOperations의 하위 클래스입니다). 따라서 JdbcTemplate을 사용하려는 개발자는 JdbcTemplate 종속성 및 DataSource 종속성만 제공하면 됩니다.

데이터베이스 및 테이블 생성

다음과 같이 데이터베이스에 테이블을 생성합니다.

CREATE TABLE `book` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(128) DEFAULT NULL,
  `author` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
INSERT INTO `chapter05`(`id`, `name`, `author`) VALUES (1, '斗罗大陆Ⅰ', '唐家三少');
INSERT INTO `chapter05`(`id`, `name`, `author`) VALUES (2, '斗罗大陆Ⅱ', '唐家三少');

프로젝트 생성

Spring Boot 프로젝트 생성 및 종속성 추가

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <scope>runtime</scope>
</dependency>
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid</artifactId>
  <version>1.1.9</version>
</dependency>

spring-boot-starter-jdbc는 spring-jdbc를 제공하고 데이터베이스 드라이버 종속성과 데이터베이스 연결 풀 종속성을 추가합니다

데이터베이스 구성

application.properties

spring.datasource에서 기본 데이터베이스 연결 정보를 구성합니다. alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/weirdo
spring.datasource.username=root
spring.datasource.password=root

엔티티 클래스 생성

Create Book 엔터티 클래스, 코드는 다음과 같습니다:

public class Book {
    private int id;
    private String name;
    private String author;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
}

데이터베이스 액세스 레이어 생성

BookDao 생성, 코드는 다음과 같습니다.

@Repository
public class BookDao {
    @Autowired
    JdbcTemplate jdbcTemplate;
    public int addBook(Book book) {
        return jdbcTemplate.update("INSERT INTO book(name,author) VALUES (?,?)",
                book.getName(), book.getAuthor());
    }
    public int updateBook(Book book) {
        return jdbcTemplate.update("UPDATE book SET name=?,author=? WHERE id=?",
                book.getName(), book.getAuthor(), book.getId());
    }
    public int deleteBookById(Integer id) {
        return jdbcTemplate.update("DELETE FROM book WHERE id=?", id);
    }
    public Book getBookById(Integer id) {
        return jdbcTemplate.queryForObject("select * from book where id=?",
                new BeanPropertyRowMapper<>(Book.class), id);
    }
    public List<Book> getAllBooks() {
        return jdbcTemplate.query("select * from book",
                new BeanPropertyRowMapper<>(Book.class));
    }
}

코드 설명:

  • BookDao를 생성하고 jdbcTemplate을 삽입합니다. spring-jdbc 관련 의존성이 추가되었기 때문에 JdbcTemplate은 Spring 컨테이너에 자동으로 등록되므로 여기에

  • JdbcTemplate을 사용하여 JdbcTemplate을 직접 주입할 수 있다. JdbcTemplate에서는 세 가지 유형의 작업을 완료하기 위해 주로 update 및atchUpdate 메소드를 사용한다. 추가, 삭제 및 수정 중 쿼리 및 queryForObject 메소드는 주로 쿼리 기능을 완료하는 데 사용됩니다. 그 밖에도 임의의 SQL을 실행할 수 있는 실행 메소드, 저장 프로시저를 호출할 때 사용하는 호출 메소드 등이 있습니다.

  • 쿼리 연산을 실행할 때 쿼리된 컬럼을 일치시키기 위해 RowMapper가 필요합니다. 엔터티 클래스의 속성은 일대일입니다. 컬럼 이름과 속성 이름이 같으면 BeanPropertyRowMapper를 직접 사용할 수 있고, 컬럼 이름과 속성 이름이 다르다면 개발자가 직접 RowMapper 인터페이스를 구현하여 컬럼과 엔터티 클래스 속성을 일대일로 매핑해야 합니다.

Create Service and Controller

Create BookService and BooKController

@Service
public class BookService {
    @Autowired
    BookDao bookDao;
    public int addBook(Book book) {
        return bookDao.addBook(book);
    }
    public int updateBook(Book book) {
        return bookDao.updateBook(book);
    }
    public int deleteBookById(Integer id) {
        return bookDao.deleteBookById(id);
    }
    public Book getBookById(Integer id) {
        return bookDao.getBookById(id);
    }
    public List<Book> getAllBooks() {
        return bookDao.getAllBooks();
    }
}
@RestController
public class BookController {
    @Autowired
    BookService bookService;
    @GetMapping("/bookOps")
    public void bookOps() {
        Book b1 = new Book();
        b1.setId(99);
        b1.setName("西厢记");
        b1.setAuthor("王实甫");
        int i = bookService.addBook(b1);
        System.out.println("addBook>>>" + i);
        Book b2 = new Book();
        b2.setId(1);
        b2.setName("朝花夕拾");
        b2.setAuthor("鲁迅");
        int updateBook = bookService.updateBook(b2);
        System.out.println("updateBook>>>"+updateBook);
        Book b3 = bookService.getBookById(1);
        System.out.println("getBookById>>>"+b3);
        int delete = bookService.deleteBookById(2);
        System.out.println("deleteBookById>>>"+delete);
        List<Book> allBooks = bookService.getAllBooks();
        System.out.println("getAllBooks>>>"+allBooks);
    }
}

마지막으로 브라우저에서 http://localhost:8081/bookOps 주소를 방문하면 콘솔 인쇄 로그는 다음과 같습니다.

addBook>>> ;1
updateBook>>>1
getBookById>>>com.sang.Book@35e33288
deleteBookById>>>1
getAllBooks>>>[com.sang.Book@2f7c2d6d, com. sang.Book@32db4b36]

데이터베이스 내 데이터는 다음과 같습니다.

Spring Boot가 JdbcTemplate을 통합하는 방법

위 내용은 Spring Boot가 JdbcTemplate을 통합하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제