[SpringBoot] 10. Intégration de JdbcTemplate dans SpringBoot

En Java, nous utilisons généralement JdbcTemplate, JPA, MyBatis et d'autres solutions de persistance des données. Bien sûr, la plus simple est le JdbcTemplate fourni avec Spring. Examinons-le ensemble.

1. Introduire la dépendance JdbcTemplate

<!-- mysql -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<!-- jdbc连接 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- lombok插件 -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

2. Contenu de la configuration de la base de données

spring:
  # 数据库配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=true&characterEncoding=UTF-8
    # springboot 2.0 整合了hikari ,据说这是目前性能最好的java数据库连接池
    hikari:
      username: root
      password: 123456

3. Commencez

Créer une classe User.java

@Data
public class User {

    /**
     * 主键id
     */
    private long id;
    /**
     * 登录账号
     */
    private String name;
    /**
     * 登录密码
     */
    private String password;
    /**
     * 性别
     */
    private int sex;
    /**
     * 年龄
     */
    private int age;
}

Le plugin lombok est utilisé ici, donc les méthodes get, set et toString peuvent être omises en utilisant l'annotation @Data

Créer une couche de persistance des données UserDao.java

@Repository
public class User {

    @Autowired
    private JdbcTemplate jdbcTemplate;
    
	...
}

@Repository, indiquant que cette classe a la fonction de CRUD (ajout, suppression, modification et inspection) d'objets
@Autowired, injectés automatiquement dans JdbcTemplate

Augmenter

public int addUser(User user) {
        String sql = "insert into user(name,password,sex,age) value(?,?,?,?)";
        return jdbcTemplate.update(sql, new Object[]{user.getName(), user.getPassword(), user.getSex(), user.getAge()});
    }

Le nombre de lignes affectées par la base de données est retourné 1

Effacer

public int deleteUser(int id) {
        String sql = "delete from user where id = ?";
        return jdbcTemplate.update(sql, new Object[]{id});
    }

Changer

public int updateUser(User user) {
        String sql = "update user set name = ?,password = ?,sex = ?,age = ? where id = ?";
        return jdbcTemplate.update(sql, new Object[]{user.getName(), user.getPassword(), user.getSex(), user.getAge(), user.getId()});
    }

Vérifier

public List<User> listUser() {
        String sql = "select id,name,password,sex,age from user where 1 = 1";
        return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
    }

En plus de ces utilisations de base, JdbcTemplate prend également en charge d'autres utilisations, telles que l'appel de procédures stockées, etc. Elles sont relativement faciles et similaires à Jdbc lui-même

4. Analyse du code source

Dans la classe org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration, nous pouvons voir:

@Configuration
@ConditionalOnClass({ DataSource.class, JdbcTemplate.class })
@ConditionalOnSingleCandidate(DataSource.class)
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcTemplateAutoConfiguration {

	@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);
			JdbcProperties.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;
		}

	}

	@Configuration
	@Import(JdbcTemplateConfiguration.class)
	static class NamedParameterJdbcTemplateConfiguration {

		@Bean
		@Primary
		@ConditionalOnSingleCandidate(JdbcTemplate.class)
		@ConditionalOnMissingBean(NamedParameterJdbcOperations.class)
		public NamedParameterJdbcTemplate namedParameterJdbcTemplate(
				JdbcTemplate jdbcTemplate) {
			return new NamedParameterJdbcTemplate(jdbcTemplate);
		}

	}

}

Lorsque DataSource et JdbcTemplate existent dans le chemin de classe actuel, la classe sera automatiquement configurée. La méthode JdbcTemplate indique que si le développeur ne fournit pas d'instance de JdbcOperations, le système configurera automatiquement un bean JdbcTemplate (JdbcTemplate est une implémentation de l'interface JdbcOperations )

Si vous trouvez des lacunes dans la lecture, veuillez laisser un message! ! !

Publié 100 articles originaux · loué 321 · 20 000+ vues

Je suppose que tu aimes

Origine blog.csdn.net/qq_40065776/article/details/105642843
conseillé
Classement