上一篇寫了關於jdbcTemplate的一些基本使用,這一篇來聊聊SimpleJdbcInsert
SimpleJdbcInsert是springjdbc提供的一個簡化插入操作的類,下面來看一下常用的api
創建SimpleJdbcInsert實例
創建一個用戶表
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`password` varchar(255) DEFAULT NULL,
`user_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
創建實例
private SimpleJdbcInsert simpleJdbcInsert;
private DriverManagerDataSource dataSource;
@Before
public void init() {
dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/blogsrc?useUnicode=true&characterEncoding=UTF-8");
dataSource.setUsername("root");
dataSource.setPassword("zhao");
simpleJdbcInsert = new SimpleJdbcInsert(dataSource);
}
新增
通過withTableName
綁定需要操作的數據庫表,然后指定新增的參數
/**
* simpleJdbcInsert新增
*/
@Test
public void insertTest() {
Map<String, Object> parameters = new HashMap<String, Object>(3);
parameters.put("user_name", "小明");
parameters.put("password", "123456");
simpleJdbcInsert.withTableName("user").execute(parameters);
}
返回主鍵
通過usingGeneratedKeyColumns
指定主鍵,executeAndReturnKey
執行並返回主鍵,返回的主鍵為Number類型,如有需要,自行轉換
/**
* simpleJdbcInsert新增,並返回主鍵
*/
@Test
public void insertAndReturnPrimaryKeyTest() {
Map<String, Object> parameters = new HashMap<String, Object>(3);
parameters.put("user_name", "小明");
parameters.put("password", "123456");
Number primaryKey = simpleJdbcInsert.withTableName("user")
.usingGeneratedKeyColumns("id")// 指定主鍵列名
.executeAndReturnKey(parameters);
System.out.println("主鍵為:" + primaryKey);
}
限制插入的列
usingColumns
方法可以限制插入的列
/**
* simpleJdbcInsert新增,返回主鍵,並限制插入的列
*/
@Test
public void usingColumnsTest() {
Map<String, Object> parameters = new HashMap<String, Object>(3);
parameters.put("user_name", "小明");
parameters.put("password", "123456");
Number primaryKey = simpleJdbcInsert.withTableName("user")
.usingColumns("user_name")// 限制輸入的列,因為限制只新增用戶名,所以password的值不會進數據庫
.usingGeneratedKeyColumns("id")// 指定主鍵列名
.executeAndReturnKey(parameters);
System.out.println("主鍵為:" + primaryKey);
}
SqlParameterSource
SqlParameterSource
接口對sql參數進行了封裝,兩個常用的實現BeanPropertySqlParameterSource
和MapSqlParameterSource
,BeanPropertySqlParameterSource
可以通過javabean
構造,MapSqlParameterSource
則可以用map構造
@Test
public void sqlParameterSourceTest() {
User user = new User();
user.setUserName("小明");
user.setPassword("123456");
// BeanPropertySqlParameterSource
SqlParameterSource sqlParm = new BeanPropertySqlParameterSource(user);
simpleJdbcInsert.withTableName("user").execute(sqlParm);
// MapSqlParameterSource
simpleJdbcInsert = new SimpleJdbcInsert(dataSource);
Map<String, Object> mapParameters = new HashMap<String, Object>();
mapParameters.put("user_name", "小明");
mapParameters.put("password", "123456");
SqlParameterSource sqlParmMap = new MapSqlParameterSource(mapParameters);
simpleJdbcInsert.withTableName("user").execute(sqlParmMap);
simpleJdbcInsert = new SimpleJdbcInsert(dataSource);
// 也可以通過MapSqlParameterSource addValue 添加參數
SqlParameterSource sqlParmMapAdd = new MapSqlParameterSource()
// addValues(map) 一次添加多個參數
.addValue("user_name", "小明")// 單個添加
.addValue("password", "123456");
simpleJdbcInsert.withTableName("user").execute(sqlParmMapAdd);
}
需要注意jdbcTemplate
是線程安全的,所以可以一直使用同一個實例,但simpleJdbcInsert
不是線程安全的,每次使用都要獲取一個新的simpleJdbcInsert
實例