Discuss / Java / 使用JdbcTemplate (ps,数据库使用不了 hsqldb, 报无法连接到jdbcurl的错误,就索性用mysql了)

使用JdbcTemplate (ps,数据库使用不了 hsqldb, 报无法连接到jdbcurl的错误,就索性用mysql了)

Topic source

净净一隅

#1 Created at ... [Delete] [Delete and Lock User]

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);
}


  • 1

Reply