JdbcTemplate の一般的なメソッドの分析

1. JdbcTemplate の紹介

JdbcTemplate は Spring JDBC のコア クラスで、このクラスが提供するメソッドの助けを借りて、データの追加、削除、変更、クエリを行うのに非常に便利です。

データベースに対するSpringの操作はjdbcに深くカプセル化されており、Springのインジェクション機能を利用して、DataSourceをJdbcTemplateに登録することができます。

JdbcTemplate はspring-jdbc-4.3.0.RELEASE.jarにありますその完全修飾名は org.springframework.jdbc.core.JdbcTemplate です。JdbcTemlate を使用するには、spring-tx-4.3.0.RELEASE.jarも必要です。このパッケージには、トランザクションと例外制御が含まれています。

2. JdbcTemplate の主なメソッド:

JdbcTemplate は、主に次の 5 種類のメソッドを提供します。

  • execute メソッド: SQL ステートメントの実行に使用でき、通常は DDL ステートメントの実行に使用されます。
  • update メソッドと batchUpdate メソッド: update メソッドは追加、変更、削除などのステートメントを実行するために使用され、batchUpdate メソッドはバッチ関連のステートメントを実行するために使用されます。
  • query メソッドと queryForXXX メソッド: クエリ関連のステートメントを実行するために使用されます。
  • メソッドの呼び出し: ストアド プロシージャおよび関数関連のステートメントを実行するために使用されます。

xml での構成:

<!-- 扫描 -->
<context:component-scan base-package="com.xxx.*"></context:component-scan>

<!-- 不属于自己工程的对象用bean来配置 -->
<!-- 配置数据库连接池 -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close" p:username="root" p:password="123456">
    <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>

3. 一般的な方法の紹介

データベース user_info テーブル:
ここに画像の説明を挿入
データベース テーブルの情報に対応するエンティティ オブジェクトを最初に作成し、その後のクエリ操作を容易にします。

package com.xxx.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() メソッドは、追加、削除、および変更します

変更(追加、削除、変更含む):update()メソッド、一括挿入メソッドbatchUpdate()

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

試験結果:ここに画像の説明を挿入

query() クエリメソッド

クエリ: 単一の値のクエリ、オブジェクトのクエリ、複数のオブジェクトのクエリ

単一値のクエリ

//查询单个值
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;
    });
    
}

おすすめ

転載: blog.csdn.net/mfysss/article/details/129131075