JdbcTemplate常用方法


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;
    });
    
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM