批量插入数据
增加测试方法
@Test public void testBatchInsert(){ String batchInsertSql = "insert into `porsche`(`name`,`price`) values (?,?)"; // List的长度就是sql要执行的次数,每一个数组表示每一次执行用到的参数 List<Object[]> batchData = new ArrayList<>(); batchData.add(new Object[]{"918 Spyder",13380000}); batchData.add(new Object[]{"Cayman",720000}); batchData.add(new Object[]{"Boxster",670000}); batchData.add(new Object[]{"Carrera GT",6450000}); int[] countList = jdbcTemplate.batchUpdate(batchInsertSql, batchData); System.out.println("Affected rows:" + Arrays.toString(countList)); } 复制代码
执行测试方法,四条SQL插入语句全部执行成功
将查询到的单条记录转换成Java对象
首先新建一个entity包,并增加一个实体类Porsche,属性与数据库字段一致,如果字段名不一致可以使用别名来保持一致
public class Porsche { private Integer id; private String name; private Double price; // 此处省略getter/setter/toString方法 } 复制代码
增加测试方法
@Test public void testFindOneTransfer2JavaBean(){ String findOneSql = "SELECT porsche_id id, name, price FROM porsche WHERE porsche_id=?"; // RowMapper,定义每一行记录和Java Bean如何映射 RowMapper rowMapper = new BeanPropertyRowMapper(Porsche.class); Porsche taycan = (Porsche) jdbcTemplate.queryForObject(findOneSql, rowMapper, 4); System.out.println(taycan); } 复制代码
要注意的点:
执行测试,成功输出JavaBean
如果查询不到记录就会报错,可以使用try catch来包裹
将查询到的多条记录封装成List
增加测试方法
@Test public void testFindListTransfer2ArrayList(){ String findListSql = "SELECT porsche_id id, name, price FROM porsche WHERE price >=?"; // 要使用List形式的rowMapper RowMapper rowMapper = new BeanPropertyRowMapper<>(Porsche.class); List<Porsche> porsches = jdbcTemplate.query(findListSql, rowMapper, 500000); System.out.println(porsches); } 复制代码
执行测试
查询price最大的一条记录
增加测试方法
@Test public void testFindMaxPrice(){ String findMaxPriceSql = "SELECT MAX(price) FROM porsche"; // 基本数据类型的包装类可以直接使用包装类的class,自定义的类需要new BeanPropertyRowMapper Double maxPrice = jdbcTemplate.queryForObject(findMaxPriceSql, Double.class); System.out.println(maxPrice); } 复制代码
执行测试方法
具名参数的SQL语句插入数据,多个参数以Map传递
由于使用❓作为占位符必须要保持参数的顺序,因此可以使用变量名代替SQL语句参数中的占位符,使用具名参数要使用到NamedParameterJdbcTemplate
xml中配置一个NamedParameterJdbcTemplate
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"> <constructor-arg name="dataSource" ref="dataSource"></constructor-arg> </bean> 复制代码
增加测试方法
@Test public void insertByNamedParameter(){ String insertSqlNamedParameter = "INSERT INTO porsche(name,price) VALUES(:name,:price)"; Map namedParameter = new HashMap<>(); namedParameter.put("name","Taycan Tubo S"); namedParameter.put("price",880000); int count = namedParameterJdbcTemplate.update(insertSqlNamedParameter, namedParameter); System.out.println("Affected rows:" + count); } 复制代码
执行测试
以sqlParameter形式传递参数插入数据
增加测试方法
@Test public void insertByJavaBeanParameter(){ String insertSqlByJavaBeanParameter = "INSERT INTO porsche(name,price) VALUES(:name,:price)"; Porsche porsche = new Porsche(); porsche.setName("Taycan 2023"); porsche.setPrice(880000.0); BeanPropertySqlParameterSource beanPropertySqlParameterSource = new BeanPropertySqlParameterSource(porsche); int count = namedParameterJdbcTemplate.update(insertSqlByJavaBeanParameter, beanPropertySqlParameterSource); System.out.println("Affected rows:" + count); } 复制代码
执行测试
至此,Spring JdbcTemplate模块完结🎉