玩转Spring全家桶笔记 03 Spring的JDBC操作以及SQL批处理的实现

1 spring-jdbc

  • core JdbcTemplate 等相关核心接口和类(核心)
  • datesource 数据源相关的辅助类(内嵌数据源的初始化)
  • object 将基本的JDBC操作封装成对象
  • support 错误码等其他辅助工具

 


2.在学习之前先了解一下如何去通过注解实现一个Bean 

  • @Component 通用注解 用来注解一个通用的Bean 一般作为一个工具Bean
  • @Repository 数据操作的一个仓库
  • @Service 服务业务
  • @Controller SpringMVC
  • @RestController 

3.简单的JDBC 操作

  • query
  • queryForObject
  • queryForList
  • update 实现插入和修改删除
  • execute

4. 代码上手操作

新建一个UserRepository 使用@Repository注解注释为一个数据操作的仓库


@Autowired
private JdbcTemplate jdbcTemplate;


/***
     * 插入数据
     * 
     * @Author MRC
     * @Date 2019年6月4日 上午11:12:56
     */
    public void insertData() {
        
        Arrays.asList("123","456").forEach(bar -> {
            
            jdbcTemplate.update("insert into user(id,username,password) values(?,?,?)", bar,bar,bar);
            
        });
}

2.查询数据


public void listData() {
        //查询单个
        System.out.println(jdbcTemplate.queryForObject("select count(id) from user", Long.class));
        
        //查询list
        List<String> list = jdbcTemplate.queryForList("select id from user",String.class);
        
        list.forEach(id -> {
            
            System.out.println("id--->"+id);
            
        });
        
        
        //查询出来的数据与对象进行关联
        List<User> users = jdbcTemplate.query("select * from user", new RowMapper<User>() {

            @Override
            public User mapRow(ResultSet arg0, int arg1) throws SQLException {
                
                return new User(arg0.getString("id"), arg0.getString("username"), arg0.getString("password"));
            }
        });
        
        
        users.forEach(user -> {
            System.out.println("user--->"+user);
            
        });
    }

 

3.使用SimpleJdbcInsert 代替JdbcTemplate 实现最基本的查询


 

@Autowired
private SimpleJdbcInsert simpleJdbcInstall;

//注入两个对象
  @Bean
    @Autowired
    public SimpleJdbcInsert simpleJdbcInsert(JdbcTemplate jdbcTemplate) {
        
        //将User表与SimpleJdbcInsert关联到一起
        return new SimpleJdbcInsert(jdbcTemplate).withTableName("user").usingGeneratedKeyColumns("id");
        
    }
    
    @Bean
    @Autowired
    public NamedParameterJdbcTemplate namedParameterJdbcTemplate(DataSource dataSource) {
        return new NamedParameterJdbcTemplate(dataSource);
    }

 

3.1 使用SimpleJdbcTemplate

HashMap<String, String> row = new HashMap<>();
    
      //id会自动生成 采用自增长主键
row.put(
"username", "ddd"); row.put("password", "345"); Number id = simpleJdbcInstall.executeAndReturnKey(row); System.out.println(id);

 5. SQL批处理


 

JdbcTemplate

  • batchUpdate 
  • BatchPreparedStatementSetter

NamedParameterJdbcTemplate

  • batchUpdate
  • SqlParameterSourceUtils.createBatch

 

5.1 使用JdbcTemplate.batchUpdate 实现一个SQL批处理

public void batchInsert() {
        //使用Jdbc批量操作数据
        jdbcTemplate.batchUpdate("insert into user(username,password) values(?,?)", new BatchPreparedStatementSetter() {
            
            //sql语句里面的?进行一个赋值
            @Override
            public void setValues(PreparedStatement ps, int i) throws SQLException {
                
                ps.setString(1, "user-"+i);
                ps.setString(2, "pass-"+i);
                
            }
            //批量操作次数
            @Override
            public int getBatchSize() {
                return 5;
            }
        });
    }

 

5.2使用 NamedParamterJdbcTemplate 实现一个SQL批处理

@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

public void batchInsert2() {
        
        List<User> users = new ArrayList<>();
        
     //主键自增长 所以不写 users.add(
new User("", "user-11", "pass-11")); users.add(new User("", "user-12", "pass-12")); users.add(new User("", "user-13", "pass-13")); namedParameterJdbcTemplate.batchUpdate("insert into user(username,password) values(:username,:password)", SqlParameterSourceUtils.createBatch(users)); }

 


示例代码:https://gitee.com/mrc1999/SpringBoot-study-book/tree/master/03JdbcTemplate

 

posted @ 2019-06-04 11:21  程序猿小码  阅读(655)  评论(0编辑  收藏  举报