玩转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
但行好事,相信技术,转载请注明出处