JdbcTemplate簡介
JdbcTemplate是Spring JDBC的核心類,借助該類提供的方法可以很方便的實現數據的增刪改查。
Spring對數據庫的操作在jdbc上面做了深層次的封裝,使用spring的注入功能,可以把DataSource注冊到JdbcTemplate之中。
JdbcTemplate位於中。其全限定命名為org.springframework.jdbc.core.JdbcTemplate。要使用JdbcTemlate還需一個
這個包包含了事務和異常控制
JdbcTemplate主要提供以下五類方法:
-
execute方法:可以用於執行任何SQL語句,一般用於執行DDL語句;
-
update方法及batchUpdate方法:update方法用於執行新增、修改、刪除等語句;batchUpdate方法用於執行批處理相關語句;
-
query方法及queryForXXX方法:用於執行查詢相關語句;
-
call方法:用於執行存儲過程、函數相關語句。
xml中的配置:
<!-- 掃描 --> <context:component-scan base-package="com.zzj.*"></context:component-scan> <!-- 不屬於自己工程的對象用bean來配置 --> <!-- 配置數據庫連接池 --> <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close" p:username="root" p:password="qw13579wq"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/test"></property> </bean> <!-- 配置jdbcTemplate --> <bean class="org.springframework.jdbc.core.JdbcTemplate" p:dataSource-ref="dataSource"></bean>
常用方法:
數據庫user_info表:
我們先創建一個實體對象,對應數據庫表中的信息,方便之后的查詢操作
package com.zzj.vo; public class UserInfo { private int id; private String userName; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "UserInfo [id=" + id + ", userName=" + userName + ", password=" + password + "]"; } }
修改(包含增、刪、改):update()方法,另有批量插入方法batchUpdate()
update()方法增刪改:
UserInfoDao.java代碼:
@Repository public class UserInfoDao { @Autowired //從容器中自動掃描獲取jdbcTemplate private JdbcTemplate jdbcTemplate; //update()實現增加數據 public boolean insert(int id,String userName,String password){ String sql = "insert into user_info values (?,?,?)"; return jdbcTemplate.update(sql,id,userName,password)>0; } //update()實現修改 public boolean update(int id,String userName,String password){ String sql = "update user_info set user_name=?,password=? where id=?"; return jdbcTemplate.update(sql,userName,password,id)>0; } //update()實現刪除 public boolean delete(int id){ String sql = "delete from user_info where id=?"; return jdbcTemplate.update(sql,id)>0; } }
測試類代碼:
public class Test { public static void main(String[] args) { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml"); UserInfoDao userDao = applicationContext.getBean(UserInfoDao.class); boolean insert = userDao.insert(1,"Jim", "123"); boolean update = userDao.update(1,"Tom","123456"); boolean delete = userDao.delete(1); System.out.println("插入:"+insert+",修改:"+update+",刪除:"+delete);
} }
測試結果:
查詢:查詢單個值、查詢一個對象、查詢多個對象
查詢單個值
//查詢單個值 public boolean login(String userName,String password){ try { String sql = "select id from user_info where user_name=? and password=?"; jdbcTemplate.queryForObject(sql,String.class,userName,password); return true; } catch (DataAccessException e) { return false; } }
查詢一個對象:RowMapper方法和ResultSetExtractor方法
//查詢單個對象 public UserInfo getById(int id){ String sql = "select id,user_name,password from user_info where id=?"; //RowMapper方法 class UserInfoRowMapper implements RowMapper<UserInfo>{ @Override public UserInfo mapRow(ResultSet rs, int rowNum) throws SQLException { UserInfo userInfo = new UserInfo(); userInfo.setId(rs.getInt("id")); userInfo.setUserName(rs.getString("user_name")); userInfo.setPassword(rs.getString("password")); return userInfo; } } return jdbcTemplate.queryForObject(sql,new UserInfoRowMapper(),id); //RowMapper方法的Lambda表達式 return jdbcTemplate.queryForObject(sql,(ResultSet rs,int rowNum)->{ UserInfo userInfo = new UserInfo(); userInfo.setId(rs.getInt("id")); userInfo.setUserName(rs.getString("user_name")); userInfo.setPassword(rs.getString("password")); return userInfo; },id); //ResultSetExtractor方法 class UserInfoResultSet implements ResultSetExtractor<UserInfo>{ @Override public UserInfo extractData(ResultSet rs) throws SQLException, DataAccessException { UserInfo userInfo = null; if(rs.next()){ userInfo = new UserInfo(); userInfo.setId(rs.getInt("id")); userInfo.setUserName(rs.getString("user_name")); userInfo.setPassword(rs.getString("password")); } return userInfo; } } return jdbcTemplate.query(sql,new UserInfoResultSet(),id); //ResultSetExtractor方法的lambda表達式 return jdbcTemplate.query(sql,(ResultSet rs)->{ UserInfo userInfo = null; if(rs.next()){ userInfo = new UserInfo(); userInfo.setId(rs.getInt("id")); userInfo.setUserName(rs.getString("user_name")); userInfo.setPassword(rs.getString("password")); } return userInfo; },id); }
查詢多個對象:RowMapper方法和ResultSetExtractor方法
//查詢多個對象 public List<UserInfo> selectAll(){ String sql = "select id,user_name,password from user_info"; //RowMapper方法 class UserInfoRowMapper implements RowMapper<UserInfo>{ @Override public UserInfo mapRow(ResultSet rs, int rowNum) throws SQLException { UserInfo userInfo = new UserInfo(); userInfo.setId(rs.getInt("id")); userInfo.setUserName(rs.getString("user_name")); userInfo.setPassword(rs.getString("password")); return userInfo; } } return jdbcTemplate.query(sql,new UserInfoRowMapper()); //RowMapper方法的Lambda表達式 return jdbcTemplate.query(sql,(ResultSet rs,int rowNum)->{ UserInfo userInfo = new UserInfo(); userInfo.setId(rs.getInt("id")); userInfo.setUserName(rs.getString("user_name")); userInfo.setPassword(rs.getString("password")); return userInfo; }); //ResultSetExtractor方法 class UserInfoResultSet implements ResultSetExtractor<List<UserInfo>>{ @Override public List<UserInfo> extractData(ResultSet rs) throws SQLException, DataAccessException { List<UserInfo> list = new ArrayList<>(); while(rs.next()){ UserInfo userInfo = new UserInfo(); userInfo.setId(rs.getInt("id")); userInfo.setUserName(rs.getString("user_name")); userInfo.setPassword(rs.getString("password")); list.add(userInfo); } return list; } } return jdbcTemplate.query(sql, new UserInfoResultSet()); //ResultSetExtractor方法的lambda表達式 return jdbcTemplate.query(sql,(ResultSet rs)->{ List<UserInfo> list = new ArrayList<>(); while(rs.next()){ UserInfo userInfo = new UserInfo(); userInfo.setId(rs.getInt("id")); userInfo.setUserName(rs.getString("user_name")); userInfo.setPassword(rs.getString("password")); list.add(userInfo); } return list; }); }