spring boot DAO之jdbcTemplate
发表于:2024-11-23 作者:热门IT资讯网编辑
编辑最后更新 2024年11月23日,依赖 org.springframework.boot spring-boot-starter-data-jpa
依赖
org.springframework.boot spring-boot-starter-data-jpa mysql mysql-connector-java
application-database.properties
#初始化数据库的时候,如果错误,是否继续启动。spring.datasource.continue-on-error=false#jdbc driver.默认通过uri来自动检测。spring.datasource.driver-class-name=com.mysql.jdbc.Driver#jdbc url.连接数据库的urispring.datasource.url=jdbc:mysql://172.28.1.227:3310/fc?useUnicode=true&autoReconnect=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useServerPrepStmts=false#数据库连接用户名spring.datasource.username=fcdev#数据连接密码spring.datasource.password=123456#全限定名,连接池。默认自动检测classpathspring.datasource.type=com.zaxxer.hikari.HikariDataSource#sql脚本字符spring.datasource.sql-script-encoding=UTF-8#jdbcTemplate配置参数spring.jdbc.template.fetch-size=-1spring.jdbc.template.max-rows=-1spring.jdbc.template.query-timeout=60
源码-JdbcProperties
@ConfigurationProperties(prefix = "spring.jdbc")public class JdbcProperties { private final Template template = new Template(); public Template getTemplate() { return this.template; } /** * {@code JdbcTemplate} settings. */ public static class Template { /** * Number of rows that should be fetched from the database when more rows are * needed. Use -1 to use the JDBC driver's default configuration. */ private int fetchSize = -1; /** * Maximum number of rows. Use -1 to use the JDBC driver's default configuration. */ private int maxRows = -1; /** * Query timeout. Default is to use the JDBC driver's default configuration. If a * duration suffix is not specified, seconds will be used. */ @DurationUnit(ChronoUnit.SECONDS) private Duration queryTimeout; }}
源码-JdbcTemplateAutoConfiguration
@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); } }}
jdbcTemplate使用
@Repositorypublic class TestJdbcDao { @Autowired private JdbcTemplate jdbcTemplate; public String getMenuNameById(int id){ return jdbcTemplate.queryForObject("select name from t_sys_menu where id = ?", new Object[]{id}, String.class); }}
jdbcTemplate测试
@RunWith(SpringRunner.class)@SpringBootTestpublic class AppContextTest { @Autowired private TestJdbcDao testJdbcDao; @Test public void jdbcTest(){ String menuName = testJdbcDao.getMenuNameById(1); System.out.println("menuName = " + menuName); }