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 SieMySQL-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.javapackage 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='" + name + '\'' + ", email='" + email + '\'' + '}'; } }
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.javapackage 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; } }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!