(8)spring整合JDBC_基于RowMapper

约定不等于承诺〃 2022-04-15 23:52 254阅读 0赞
  1. package spring.model;
  2. public class User {
  3. private int id;
  4. private String username;
  5. private String password;
  6. private String nickname;
  7. private Group group;
  8. public Group getGroup() {
  9. return group;
  10. }
  11. public void setGroup(Group group) {
  12. this.group = group;
  13. }
  14. public User(String username, String password, String nickname) {
  15. super();
  16. this.username = username;
  17. this.password = password;
  18. this.nickname = nickname;
  19. }
  20. public int getId() {
  21. return id;
  22. }
  23. public void setId(int id) {
  24. this.id = id;
  25. }
  26. public String getUsername() {
  27. return username;
  28. }
  29. public void setUsername(String username) {
  30. this.username = username;
  31. }
  32. public String getPassword() {
  33. return password;
  34. }
  35. public void setPassword(String password) {
  36. this.password = password;
  37. }
  38. public String getNickname() {
  39. return nickname;
  40. }
  41. public void setNickname(String nickname) {
  42. this.nickname = nickname;
  43. }
  44. public User() {
  45. }
  46. @Override
  47. public String toString() {
  48. return "User [id=" + id + ", username=" + username + ", password=" + password + ", nickname=" + nickname
  49. + ", group=" + group + "]";
  50. }
  51. }
  52. package spring.model;
  53. public class Group {
  54. private int id;
  55. private String name;
  56. public int getId() {
  57. return id;
  58. }
  59. public void setId(int id) {
  60. this.id = id;
  61. }
  62. public String getName() {
  63. return name;
  64. }
  65. public void setName(String name) {
  66. this.name = name;
  67. }
  68. }

GroupDao:

  1. @Repository("groupJdbcDao")
  2. public class GroupDao implements IGroupDao {
  3. private JdbcTemplate jdbcTemplate;
  4. @Override
  5. public void add(Group group) {
  6. // TODO 自动生成的方法存根
  7. final String INSERT_SQL = "insert into t_group (name) value(?)";
  8. KeyHolder keyHolder = new GeneratedKeyHolder();
  9. jdbcTemplate.update(new PreparedStatementCreator() {
  10. @Override
  11. public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
  12. // TODO 自动生成的方法存根
  13. PreparedStatement ps = connection.prepareStatement(INSERT_SQL, new String[] {"id"});
  14. ps.setString(1, group.getName());
  15. return ps;
  16. }
  17. },keyHolder);
  18. group.setId(keyHolder.getKey().intValue());//获取数据库中id的值,为group对象设置id
  19. }
  20. @Resource
  21. public void setDataSource(DataSource dataSource) {
  22. jdbcTemplate = new JdbcTemplate(dataSource);
  23. }
  24. }

UserDao:

  1. @Repository("userJdbcDao")
  2. public class UserDao implements IUserDao {
  3. private JdbcTemplate jdbcTemplate;
  4. @Resource
  5. public void setDataSource(DataSource dataSource) {
  6. jdbcTemplate = new JdbcTemplate(dataSource);
  7. }
  8. @Override
  9. public void add(User user) {
  10. jdbcTemplate.update("insert into t_user(username,password,nickname,gid) value (?,?,?,?)",
  11. user.getUsername(),user.getPassword(),user.getNickname(),user.getGroup().getId());
  12. }
  13. @Override
  14. public void update(User user) {
  15. // TODO 自动生成的方法存根
  16. jdbcTemplate.update("update user set username=?,password=?,nickname=? where id=?",
  17. user.getUsername(),user.getPassword(),user.getNickname(),user.getId());
  18. }
  19. @Override
  20. public void delete(int id) {
  21. // TODO 自动生成的方法存根
  22. jdbcTemplate.update("delete from user where id=?",id);
  23. }
  24. @Override
  25. public User load(int id) {
  26. // TODO 自动生成的方法存根
  27. String sql="select t1.id uid,t1.*,t2.* from t_user t1 left join t_group t2 on (t1.gid=t2.id) where t1.id=?";
  28. User u=(User)jdbcTemplate.queryForObject(sql, new Object[]{id},new UserMapper());
  29. return u;
  30. }
  31. @Override
  32. public List<User> list(String sql,Object[] args) {//把数据库中数据映射到对象
  33. // TODO 自动生成的方法存根
  34. String Count="select count(*) from t_user";
  35. int count=jdbcTemplate.queryForObject(Count,Integer.class);
  36. System.out.println("count:"+count);
  37. String userSql="select username,nickname from t_user";
  38. List<Map<String, Object>> us=jdbcTemplate.queryForList(userSql);
  39. for(Map<String, Object> u:us) {
  40. System.out.println(u.get("username")+","+u.get("nickname"));
  41. }
  42. return jdbcTemplate.query(sql, args, new UserMapper());
  43. }
  44. private class UserMapper implements RowMapper<User>{
  45. @Override
  46. public User mapRow(ResultSet rs, int rowNum) throws SQLException {
  47. // TODO 自动生成的方法存根
  48. Group g=new Group();
  49. g.setName(rs.getString("name"));
  50. g.setId(rs.getInt("gid"));
  51. User u=new User();
  52. u.setId(rs.getInt("uid"));
  53. u.setNickname(rs.getString("nickname"));
  54. u.setPassword(rs.getString("password"));
  55. u.setUsername(rs.getString("username"));
  56. u.setGroup(g);
  57. return u;
  58. }
  59. }
  60. }

注意:(1).创建UserMapper类继承RowMapper,然后实现关系映射

(2).load传入的参数是Object[]{id},然后传入UserMapper对象

(3).jdbcTemplate.query(sql, args, new UserMapper());因为有UserMapper,实现把数据库数据转换为对象,所以返回的是List,然后args是Object[]类型的

(4).数据库表名不能和sql关键字一样,比如group就不行,得创建表名为t_group

测试类:

  1. @Test
  2. public void testLoad() {
  3. User u=userJdbcDao.load(2);
  4. System.out.println(u);
  5. }
  6. @Test
  7. public void testList() {
  8. String sql="select t1.id uid,t1.*,t2.* from t_user t1 left join t_group t2 on (t1.gid=t2.id)";,
  9. List<User> us=userJdbcDao.list(sql, null);//无参数就传入null
  10. for(User u:us) {
  11. System.out.println(u);
  12. }
  13. }

注意:(1).两个表连接在一起,有2个id,无法区分,所以把User的id设为uid,这样在UserDao的RowMapper映射就方便了。

发表评论

表情:
评论列表 (有 0 条评论,254人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Spring整合JDBC

    Spring整合JDBC 什么是JDBC JDBC代表Java Database Connectivity,他是提供一组JavaApi来访问关系数据库的Java程序。这些A