Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung von Beispielen für die Verwendung von JdbcTemplate

Detaillierte Erläuterung von Beispielen für die Verwendung von JdbcTemplate

Y2J
Y2JOriginal
2017-05-10 10:15:111600Durchsuche

JdbcTemplate bietet eine abstraktere Kapselung basierend auf der JDBC-API und bietet Transaktionsverwaltungsfunktionen basierend auf Methodenanmerkungen. Durch die Verwendung der automatischen Konfigurationsfunktion von SpringBoot und das Ersetzen unserer automatischen Konfiguration von Beans möchte ich Ihnen das relevante Wissen über die Verwendung von JdbcTemplate in Spring Boot vorstellen.

In diesem Artikel wird die Verwendung von Spring Boot vorgestellt JdbcTemplate zur Zusammenarbeit.

Springs Operationen an der Datenbank sind tief in JDBC gekapselt. Mit der Injektionsfunktion von Spring können Sie DataSource in JdbcTemplate registrieren. JdbcTemplate bietet eine abstraktere Kapselung basierend auf der JDBC-API und bietet Transaktionsverwaltungsfunktionen basierend auf Methodenanmerkungen. Durch die Verwendung der automatischen Konfigurationsfunktion von SpringBoot und die automatische Konfiguration von Beans in unserem Namen.

Datenquellenkonfiguration

In Maven müssen wir Spring hinzufügen -boot -starter-jdbc-Modul

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

Dieses Modul erledigt die folgenden Dinge für uns

Tomcat-jdbc-{version}.jar konfiguriert DataSource automatisch für uns.

Wenn Sie keine DataSource definieren, konfiguriert SpringBoot automatisch eine In-Memory-Datenbankressourceneinstellung.
Wenn keine Beans festgelegt sind, registriert SpringBoot diese automatisch.
Initialisiert die Datenbank.
Wenn wir sie im Klassenpfad definieren Wenn Sie die Dateien schema.sql und data.sql laden, verwendet SpringBoot diese Dateien, um die Datenbank automatisch zu initialisieren (Sie müssen sich jedoch dafür entscheiden, die Bibliothek zu erstellen).
Zusätzlich zum Laden von schema.sql und data.sql lädt SpringBoot auch Schema- ${ platform}.sql und data-${platform}.sql, sofern sie in Ihrem Klassenpfad vorhanden sind.

  spring.datasource.schema=xxxx-db.sql 可以定义你的建库文件
  spring.datasource.data=xxxx-data.sql 可以定义你的数据文件
  spring.datasource.initialize=true|false 可以决定是不是要初始化这些数据库文件
  spring.datasource.continueOnError=true|false 有了错误是否继续运行

Unterstützung eingebetteter Datenbanken

Eingebettete Datenbanken werden typischerweise in Entwicklungs- und Testumgebungen verwendet und werden nicht für Produktionsumgebungen empfohlen. Spring Boot bietet automatisch konfigurierte eingebettete Datenbanken wie H2, HSQL und Derby. Für deren Verwendung ist keine Verbindungskonfiguration erforderlich.

Zum Beispiel können wir die folgende Konfiguration in pom.xml einführen, um HSQL

<dependency>
 <groupId>org.hsqldb</groupId>
 <artifactId>hsqldb</artifactId>
 <scope>runtime</scope>
</dependency>

zu verwenden, um eine Verbindung zur Produktionsdatenquellenkonfiguration

Nehmen Sie

MySQL-Datenbank als Beispiel. Führen Sie zunächst das Abhängigkeitspaket der MySQL-Verbindung ein und fügen Sie pom.xml hinzu:

<dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>5.1.21</version>
</dependency>
Konfigurieren Sie in src/main/. resources/application.properties Datenquelleninformationen

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

Verbindung JNDI-Datenquellenkonfiguration

Welche Datenquelle möchten Sie, wenn Sie die bereitstellen? Anwendung auf dem Anwendungsserver? Vom Anwendungsserver verwaltet, können Sie die folgende Konfigurationsmethode verwenden, um die JNDI-Datenquelle einzuführen.

spring.datasource.jndi-name=java:jboss/datasources/customers

Benutzerdefinierte Datenquellenkonfiguration

Wenn Sie beispielsweise nicht die Standardkonfigurationsdatenquelle verwenden möchten, möchten Sie Um die Datenquelle für die Datenpoolverwaltung von Alibaba zu verwenden, können Sie sie auch selbst konfigurieren

Schließen Sie zunächst die Standardkonfigurationsdatenquelle von tomcat-jdbc aus

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-jdbc</artifactId>
 <exclusions>
  <exclusion>
   <groupId>org.apache.tomcat</groupId>
   <artifactId>tomcat-jdbc</artifactId>
  </exclusion>
 </exclusions>
</dependency>
Definieren Sie Ihre eigenen Datenressourcen für die Datenpoolverwaltung wird hier verwendet. Sie können auch BasicDataSource

<dependency>
 <groupId>com.alibaba</groupId>
 <artifactId>druid</artifactId>
 <version>1.0.19</version>
</dependency>
package com.example;

import javax.sql.DataSource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;
import org.springframework.web.servlet.DispatcherServlet;
import com.alibaba.druid.pool.DruidDataSource;
import com.example.Listener.IndexListener;
import com.example.filter.IndexFilter;
import com.example.servlet.MyServlet;
@SpringBootApplication
public class SpringBootSimpleApplication {
 @Autowired
 private Environment env;
 @Bean
 public DataSource dataSource() {
  DruidDataSource dataSource = new DruidDataSource();
  dataSource.setUrl(env.getProperty("spring.datasource.url"));
  dataSource.setUsername(env.getProperty("spring.datasource.username"));//用户名
  dataSource.setPassword(env.getProperty("spring.datasource.password"));//密码
  dataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
  dataSource.setInitialSize(2);
  dataSource.setMaxActive(20);
  dataSource.setMinIdle(0);
  dataSource.setMaxWait(60000);
  dataSource.setValidationQuery("SELECT 1");
  dataSource.setTestOnBorrow(false);
  dataSource.setTestWhileIdle(true);
  dataSource.setPoolPreparedStatements(false);
  return dataSource;
 }
 public static void main(String[] args) {
  SpringApplication.run(SpringBootSimpleApplication.class, args);
 }
}
Sie können auch verwenden andere:

<dependency>
 <groupId>commons-dbcp</groupId>
 <artifactId>commons-dbcp</artifactId>
 <version>1.4</version>
</dependency>
@Bean
public DataSource dataSource() {
 BasicDataSource dataSource = new BasicDataSource();
 dataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
 dataSource.setUrl(env.getProperty("spring.datasource.url"));
 dataSource.setUsername(env.getProperty("spring.datasource.username"));
 dataSource.setPassword(env.getProperty("spring.datasource.password"));
 return dataSource;
}
Codebeispiel

Entitätsobjekt erstellen

/src/main/java/com/example /domain/User.java

package com.example.domain;
public class User
{
 private Integer id;
 private String name;
 private String email;
 public User()
 {
 }
 public User(Integer id, String name, String email)
 {
  this.id = id;
  this.name = name;
  this.email = email;
 }
 public Integer getId()
 {
  return id;
 }
 public void setId(Integer id)
 {
  this.id = id;
 }
 public String getName()
 {
  return name;
 }
 public void setName(String name)
 {
  this.name = name;
 }
 public String getEmail()
 {
  return email;
 }
 public void setEmail(String email)
 {
  this.email = email;
 }
 @Override
 public String toString() {
  return "User{" +
    "id=" + id +
    ", name=&#39;" + name + &#39;\&#39;&#39; +
    ", email=&#39;" + email + &#39;\&#39;&#39; +
    &#39;}&#39;;
 }
}

Persistenzschicht erstellen

Mit der obigen Datenquellenkonfiguration können wir JdbcTemplate in die Daten einfügen Zugriffskomponente und Kommunikation mit der Datenbank. Interaktion.

/src/main/java/com/example/repositories/UserRepository.java

package com.example.repositories;
import com.example.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.sql.*;
import java.util.List;
@Repository
public class UserRepository {
 @Autowired
 private JdbcTemplate jdbcTemplate;
 @Transactional(readOnly = true)
 public List<User> findAll() {
  return jdbcTemplate.query("select * from users", new UserRowMapper());
 }
 @Transactional(readOnly = true)
 public User findUserById(int id) {
  return jdbcTemplate.queryForObject("select * from users where id=?", new Object[]{id}, new UserRowMapper());
 }
 public User create(final User user) {
  final String sql = "insert into users(name,email) values(?,?)";
  KeyHolder holder = new GeneratedKeyHolder();
  jdbcTemplate.update(new PreparedStatementCreator() {
   @Override
   public PreparedStatement createPreparedStatement(Connection connection)
     throws SQLException {
    PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
    ps.setString(1, user.getName());
    ps.setString(2, user.getEmail());
    return ps;
   }
  }, holder);
  int newUserId = holder.getKey().intValue();
  user.setId(newUserId);
  return user;
 }
 public void delete(final Integer id) {
  final String sql = "delete from users where id=?";
  jdbcTemplate.update(sql,
    new Object[]{id},
    new int[]{java.sql.Types.INTEGER});
 }
 public void update(final User user) {
  jdbcTemplate.update(
    "update users set name=?,email=? where id=?",
    new Object[]{user.getName(), user.getEmail(), user.getId()});
 }
}
class UserRowMapper implements RowMapper<User> {
 @Override
 public User mapRow(ResultSet rs, int rowNum) throws SQLException {
  User user = new User();
  user.setId(rs.getInt("id"));
  user.setName(rs.getString("name"));
  user.setEmail(rs.getString("email"));
  return user;
 }
}

Unit-Test

Sie haben vielleicht bemerkt, dass wir diese Konfigurationsaufgaben meistens in der Anwendung vornehmen.

Erstellen Sie Unit-Tests, um unsere Persistenzschichtmethoden zu testen

/src/test/java/SpringBootJdbcDemoApplicationTests.java

import com.example.SpringBootJdbcDemoApplication;
import com.example.domain.User;
import com.example.repositories.UserRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;
import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(SpringBootJdbcDemoApplication.class)
public class SpringBootJdbcDemoApplicationTests
{
  Logger logger= LoggerFactory.getLogger(SpringBootJdbcDemoApplicationTests.class);
 @Autowired
 private UserRepository userRepository;
 @Test public void testAll(){
  findAllUsers();
  findUserById();
  createUser();
 }
 @Test
 public void findAllUsers() {
  List<User> users = userRepository.findAll();
  assertNotNull(users);
  assertTrue(!users.isEmpty());
 }
 @Test
 public void findUserById() {
  User user = userRepository.findUserById(1);
  assertNotNull(user);
 }
 private void updateById(Integer id) {
  User newUser = new User(id, "JackChen", "JackChen@qq.com");
  userRepository.update(newUser);
  User newUser2 = userRepository.findUserById(newUser.getId());
  assertEquals(newUser.getName(), newUser2.getName());
  assertEquals(newUser.getEmail(), newUser2.getEmail());
 }
 @Test
 public void createUser() {
  User user = new User(0, "tom", "tom@gmail.com");
  User savedUser = userRepository.create(user);
  logger.debug("{}",savedUser);
  User newUser = userRepository.findUserById(savedUser.getId());
  assertEquals("tom", newUser.getName());
  assertEquals("tom@gmail.com", newUser.getEmail());
  updateById(newUser.getId());
  userRepository.delete(newUser.getId());
 }
}
[Verwandte Empfehlungen]

1.

Kostenloses Java-Video-Tutorial

2.

Umfassende Analyse von Java-Anmerkungen

3.

Alibaba Java Development Manual

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von Beispielen für die Verwendung von JdbcTemplate. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn