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! ! !