使用DAO模式
Topic source另一个查询方法getUserByEmail
public User getUserByEmail(String email){
return this.getJdbcTemplate().queryForObject("select id,name,email,password from user where email=? limit 1",
new Object[]{email},new BeanPropertyRowMapper<>(User.class));
}
- 1
净净一隅
.....
@Autowired
UserDao userDao;
......
@Transactional
public User register(Register registerInfo) throws SQLException{
System.out.println("开始注册");
String email=registerInfo.getEmail();
String name=registerInfo.getUsername();
String password=registerInfo.getPassword();
User user;
try{
this.userDao.getUserByEmail(email);
throw new RuntimeException(email+" exists. please go to [sign in]");
}catch (EmptyResultDataAccessException e){}
user=this.userDao.createUser(name,email,password);
user.setName(name);
user.setEmail(email);
user.setPassword(password);
//添加注册积分
this.addBonus(user.getId());
return user;
}
@Component
public class UserDao extends AbstractDao<User>{
public User getUserByEmail(String email){
return this.getJdbcTemplate().queryForObject("select id,name,email,password from user where email=? limit 1",
new Object[]{email},new BeanPropertyRowMapper<>(User.class));
}
public long queryUserByEmail(String email){
return this.getJdbcTemplate().queryForObject("select count(1) from user where email=?",
new Object[]{email}, (ResultSet rs, int rowNum) -> {
// SELECT COUNT(*)查询只有一列,取第一列数据:
return rs.getLong(1);
});
}
@Transactional
public User createUser(String name,String email,String password){
KeyHolder holder=new GeneratedKeyHolder();
if(1!=this.getJdbcTemplate().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");
}
User user=new User();
user.setId(holder.getKey().longValue());
return user;
}
}