spring的版本爲4.1.4(spring3我也用過,就配置信息略有不一樣,其用法仍是同樣的)
java
須要在applicationContext.xml中配置如下信息spring
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"> <constructor-arg ref="dataSource"/> </bean>
若是已經在文件中配置了jdbctemplate的話還能夠使用如下方法配置sql
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"> <constructor-arg ref="jdbcTemplate"/> </bean>
固然也能夠使用最原始的方法(該方法也須要配置jdbctemplate)app
NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate);
本文章中的全部案例都是根據如下類來試驗的:code
public class User { private int id; private String userName; private String sex; private String password; private String address; //省略 set/get }
public User selectUserById(String id) { String sql = "SELECT id,username,sex,password,address FROM user WHERE id = :id"; Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("id", id); RowMapper<User> rm = BeanPropertyRowMapper.newInstance(User.class); User user = namedParameterJdbcTemplate.queryForObject(sql, paramMap, rm); return user; }
public User queryByUser(User user) { String sql = "SELECT id,username,sex,password,address FROM user WHERE id = :id"; SqlParameterSource ps = new BeanPropertySqlParameterSource(user); RowMapper<User> rm = BeanPropertyRowMapper.newInstance(User.class); return namedParameterJdbcTemplate.queryForObject(sql, ps, rm); }
public List<User> selectUser() { String sql = "SELECT id,username,sex,password,address FROM user"; Map<String, Object> paramMap = new HashMap<String, Object>(); RowMapper<User> rm = BeanPropertyRowMapper.newInstance(User.class); List<User> userList = namedParameterJdbcTemplate.query(sql, rm); return userList; }
public List<User> selectUserLikeByName(String name) { //'%'空格:userName空格'%' 必定要有空格,否則會報錯 String sql = "SELECT id,username,sex,password,address FROM user WHERE username LIKE '%' :userName '%'"; Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("userName", name); RowMapper<User> rm = BeanPropertyRowMapper.newInstance(User.class); List<User> users = namedParameterJdbcTemplate.query(sql, paramMap, rm); return users; }
public void insertUser(User user) { String sql = "INSERT INTO user (username, sex, password, address) VALUES (:username,:sex,:password,:address)"; Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("username", user.getUserName()); paramMap.put("sex", user.getSex()); paramMap.put("password", user.getPassword()); paramMap.put("address", user.getAddress()); namedParameterJdbcTemplate.update(sql, paramMap); }
public void updateUser(User user) { String sql = "UPDATE user SET username = :userName,sex = :sex,password=:password,address=:address WHERE id = :id;"; SqlParameterSource ps = new BeanPropertySqlParameterSource(user); namedParameterJdbcTemplate.update(sql, ps); }
能夠與添加數據再進行對比,這樣就能發現當佔位符比較多的狀況下傳入對象時多麼的方便xml
public void deleteUser(String id) { String sql = "DELETE FROM user WHERE id = :id"; Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("id", id); namedParameterJdbcTemplate.update(sql, paramMap); }
看到此處能夠發現添加,修改,刪除數據namedParameterJdbcTemplate提供的方法都是同樣的,都是update方法。對象
批量操做數據一共有兩種方法get
public void batchInsert() { User chen = new User("chen", "男", "123456789", "fuzhou"); User alex = new User("alex", "男", "123456", "fuzhou"); List<User> userList = new ArrayList<>(); userList.add(chen); userList.add(alex); List<Map<String, Object>> batchValues = new ArrayList<>(userList.size()); for (User user : userList) { batchValues.add( new MapSqlParameterSource("username", user.getUserName()) .addValue("sex", user.getSex()) .addValue("password", user.getPassword()) .addValue("address", user.getAddress()) .getValues()); } String sql = "INSERT INTO user (username, sex, password, address) VALUES (:username,:sex,:password,:address)"; int[] updateCounts = namedParameterJdbcTemplate.batchUpdate(sql, batchValues.toArray(new Map[userList.size()])); }
public void batchInsertUser() { User chen = new User("chen", "男", "123456789", "fuzhou"); User alex = new User("alex", "男", "123456", "fuzhou"); List<User> userList = new ArrayList<>(); userList.add(chen); userList.add(alex); String sql = "INSERT INTO user (username, sex, password, address) VALUES (:username,:sex,:password,:address)"; SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(userList.toArray()); int[] updateCounts = namedParameterJdbcTemplate.batchUpdate(sql, batch); }
public void batchUpdate() { User chen = new User(12,"chen", "男", "111111111", "fuzhou"); User alex = new User(13,"alex", "男", "111111111", "fuzhou"); List<User> userList = new ArrayList<>(); userList.add(chen); userList.add(alex); List<Map<String, Object>> batchValues = new ArrayList<>(userList.size()); for (User user : userList) { batchValues.add( new MapSqlParameterSource("username", user.getUserName()) .addValue("id",user.getId()) .addValue("sex", user.getSex()) .addValue("password", user.getPassword()) .addValue("address", user.getAddress()) .getValues()); } String sql = "UPDATE user SET username = :username,sex = :sex,password=:password,address=:address WHERE id = :id;"; int[] updateCounts = namedParameterJdbcTemplate.batchUpdate(sql, batchValues.toArray(new Map[userList.size()])); }
public void batchUpdateUser() { User chen = new User(14,"chen", "男", "111111111", "fuzhou"); User alex = new User(15,"alex", "男", "111111111", "fuzhou"); List<User> userList = new ArrayList<>(); userList.add(chen); userList.add(alex); String sql = "UPDATE user SET username = :username,sex = :sex,password=:password,address=:address WHERE id = :id;"; SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(userList.toArray()); int[] updateCounts = namedParameterJdbcTemplate.batchUpdate(sql, batch); }
同上io