zoukankan      html  css  js  c++  java
  • 玩转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

  • 相关阅读:
    RollingFileAppender 日志按天记录输出到log文件
    spring boot jar包开机自启
    oracle 日常操作--触发器调试
    转载:java基础-String不可变的好处
    java 代码优化
    nginx部署ssl证书
    修改npm仓库地址
    linux下安装python3
    python一行代码开启http
    linux下安装mongodb
  • 原文地址:https://www.cnblogs.com/ChromeT/p/10965127.html
Copyright © 2011-2022 走看看