1. JdbcTemplate 、DataSource
//使用PropertySource注解注入配置 @Bean DataSource createDataSource() throws IOException { HikariConfig config = mySqlConfig.getConfig(); DataSource ds = new HikariDataSource(config); return ds; }
@Bean JdbcTemplate createJdbcTemplate(@Autowired DataSource dataSource) { return new JdbcTemplate(dataSource); }
**2. ****mySqlConfig 返回一个HikariConfig **
@Component public class MySqlConfig { @Value("${account}") String username; @Value("${jdbcUrl}") String jdbcUrl; @Value("${password}") String password; @Value("${connectionTimeout}") String connectionTimeout; @Value("${idleTimeout}") String idleTimeout; @Value("${maximumPoolSize}") String maximumPoolSize; @Value("${autoCommit}") String autoCommit;
public HikariConfig getConfig(){ HikariConfig config = new HikariConfig(); config.setJdbcUrl(jdbcUrl); config.setUsername(username); config.setPassword(password); config.addDataSourceProperty("connectionTimeout", connectionTimeout); // 连接超时 config.addDataSourceProperty("idleTimeout", idleTimeout); // 空闲超时 config.addDataSourceProperty("maximumPoolSize", maximumPoolSize); // 最大连接数 config.addDataSourceProperty("autoCommit", autoCommit); // 自动提交 return config; }
public String getUsername() { return username; }
public String getJdbcUrl() { return jdbcUrl; }
public String getPassword() { return password; }
public long getConnectionTimeout() { return Long.valueOf(connectionTimeout);
}
public String getAutoCommit() { return autoCommit; }
public long getIdleTimeout() { return Long.valueOf(idleTimeout); }
public int getMaximumPoolSize() { return Integer.valueOf(maximumPoolSize); } }
4. UserService
......
@Autowired JdbcTemplate jdbcTemplate;
public User register(String email, String password, String name) throws SQLException{ /* if(getUserFromDB(email)!=null){ throw new RuntimeException("email exist."); } User user=new User(); user.setEmail(email); user.setName(name); user.setPassword(password); this.registerUser2DB(user); mailService.sendRegistrationMail(user); return user; */ KeyHolder holder=new GeneratedKeyHolder(); if(1!=jdbcTemplate.update( (conn)-> { PreparedStatement ps=conn.prepareStatement( "insert into user(name,email,password) values(?,?,?)", Statement.RETURN_GENERATED_KEYS); ps.setObject(1,name); ps.setObject(2,email); ps.setObject(3,password); return ps; }, holder )){ throw new RuntimeException("Insert failed"); } return new User(holder.getKey().longValue(),email,name,password); }
Sign in to make a reply
净净一隅
1. JdbcTemplate 、DataSource
//使用PropertySource注解注入配置
@Bean
DataSource createDataSource() throws IOException {
HikariConfig config = mySqlConfig.getConfig();
DataSource ds = new HikariDataSource(config);
return ds;
}
@Bean
JdbcTemplate createJdbcTemplate(@Autowired DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
**2. ****mySqlConfig 返回一个HikariConfig **
@Component
public class MySqlConfig {
@Value("${account}")
String username;
@Value("${jdbcUrl}")
String jdbcUrl;
@Value("${password}")
String password;
@Value("${connectionTimeout}")
String connectionTimeout;
@Value("${idleTimeout}")
String idleTimeout;
@Value("${maximumPoolSize}")
String maximumPoolSize;
@Value("${autoCommit}")
String autoCommit;
public HikariConfig getConfig(){
HikariConfig config = new HikariConfig();
config.setJdbcUrl(jdbcUrl);
config.setUsername(username);
config.setPassword(password);
config.addDataSourceProperty("connectionTimeout", connectionTimeout); // 连接超时
config.addDataSourceProperty("idleTimeout", idleTimeout); // 空闲超时
config.addDataSourceProperty("maximumPoolSize", maximumPoolSize); // 最大连接数
config.addDataSourceProperty("autoCommit", autoCommit); // 自动提交
return config;
}
public String getUsername() {
return username;
}
public String getJdbcUrl() {
return jdbcUrl;
}
public String getPassword() {
return password;
}
public long getConnectionTimeout() {
return Long.valueOf(connectionTimeout);
}
public String getAutoCommit() {
return autoCommit;
}
public long getIdleTimeout() {
return Long.valueOf(idleTimeout);
}
public int getMaximumPoolSize() {
return Integer.valueOf(maximumPoolSize);
}
}
4. UserService
......
@Autowired
JdbcTemplate jdbcTemplate;
......
public User register(String email, String password, String name) throws SQLException{
/*
if(getUserFromDB(email)!=null){
throw new RuntimeException("email exist.");
}
User user=new User();
user.setEmail(email);
user.setName(name);
user.setPassword(password);
this.registerUser2DB(user);
mailService.sendRegistrationMail(user);
return user;
*/
KeyHolder holder=new GeneratedKeyHolder();
if(1!=jdbcTemplate.update(
(conn)-> {
PreparedStatement ps=conn.prepareStatement(
"insert into user(name,email,password) values(?,?,?)", Statement.RETURN_GENERATED_KEYS);
ps.setObject(1,name);
ps.setObject(2,email);
ps.setObject(3,password);
return ps;
},
holder
)){
throw new RuntimeException("Insert failed");
}
return new User(holder.getKey().longValue(),email,name,password);
}