使用JdbcTemplate模板时传递的参数Map和Object []数组

// 用户登录检测
public Map findUser(String username, String password) {
//String sql = "select u.* from tbUser u where lower(u.UserName)=:UserName";
String sql = "select u.* from tbUser u where u.UserName=:UserName";

if ("".equals(password)) {
sql += " and (u.PassWord='d41d8cd98f00b204e9800998ecf8427e' or u.PassWord is null)";
} else {
sql += " and u.PassWord=:PassWord";
}

HashMap<String, String> paramMap = new HashMap<String, String>();
paramMap.put("UserName", username);
paramMap.put("PassWord", password);

Map map = null;
try {
map = baseDAO.getNamedParameterJdbcTemplate().queryForMap(sql,paramMap);
} catch (Exception e) {
}

-------------------------------------
UserName 和 Password 是事先定义的 Map中的键,在之后HashMap<String, String> paramMap 才定义的。
然后把map作为queryFormap()方法的参数

---------------------------------------
另一种方法是传递Object[]Object数组
public void modifyCommunity(Object[] args){
String sql = " update tbForumSubject set TITLE=?,USERID=?,CONTENT=?,SN=? where ForumSID=? "; //去掉,CREATOR=?
baseDao.getJdbcTemplate().update(sql, args);
}
### NamedParameterJdbcTemplate使用方法及示例 `NamedParameterJdbcTemplate` 是 Spring JDBC 提供的一个模板类,用于简化数据库操作并支持命名参数功能。相比于 `JdbcTemplate` 中使用的传统问号 (`?`) 占位符方式,`NamedParameterJdbcTemplate` 支持通过名称指定 SQL 参数,使代码更具可读性灵活性。 以下是关于其核心特性的详细介绍以及具体示例: #### 1. **核心特性** - `NamedParameterJdbcTemplate` 封装了 `JdbcTemplate` 并提供了对命名参数的支持[^1]。 - 它的主要方法分为三类:`execute` 方法、`query` 及 `queryForXXX` 方法、`update` `batchUpdate` 方法[^2]。 - 命名参数可以显著减少因位置错误而导致的 bug,并且更易于维护复杂查询语句[^3]。 --- #### 2. **常用方法及其说明** ##### (1) 执行自定义 SQL 操作 `execute` 方法可用于执行任意 SQL 脚本或 DDL/DML 操作。 ```java String sql = "CREATE TABLE IF NOT EXISTS test_table(id INT, name VARCHAR(50))"; namedParameterJdbcTemplate.execute(sql); ``` 此方法不涉及任何输入参数,因此无需传递额外数据。 --- ##### (2) 查询操作 `query` 方法允许执行复杂的 SELECT 查询,并返回结果集作为对象集合。 ###### 示例:获取单条记录 ```java import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.BeanPropertyRowMapper; // 定义 SQL 查询 String querySql = "SELECT * FROM employees WHERE id = :id"; // 创建 SqlParameterSource 对象 MapSqlParameterSource params = new MapSqlParameterSource(); params.addValue("id", 1); // 获取单个实体对象 Employee employee = namedParameterJdbcTemplate.queryForObject( querySql, params, new BeanPropertyRowMapper<>(Employee.class) ); ``` 在此示例中,`:id` 表示名为 `id` 的命名参数,而 `BeanPropertyRowMapper` 自动将查询结果映射到 Java 实体类实例。 ###### 示例:批量查询多条记录 如果需要检索多个记录,则可以调用 `query` 方法来获得完整的列表: ```java List<Employee> employees = namedParameterJdbcTemplate.query( "SELECT * FROM employees WHERE department_id IN (:departmentIds)", new MapSqlParameterSource().addValue("departmentIds", Arrays.asList(1, 2)), new BeanPropertyRowMapper<>(Employee.class) ); ``` 注意这里传入的是一个数组类型的参数 `:departmentIds`,框架会自动处理成合适的占位符形式[^4]。 --- ##### (3) 更新/插入/删除操作 对于修改型的操作(INSERT、UPDATE 或 DELETE),可以直接利用 `update` 方法实现。 ###### 示例:更新一条记录 ```java int rowsAffected = namedParameterJdbcTemplate.update( "UPDATE employees SET salary = :salary WHERE id = :id", new MapSqlParameterSource() .addValue("salary", 80000) .addValue("id", 1) ); System.out.println(rowsAffected + " row(s) updated."); ``` 上述代码片段展示了如何基于特定条件更新表中的字段值。 ###### 示例:批量插入多条记录 当面对大量数据写入需求,推荐采用事务管理配合批处理机制提升性能效率: ```java List<Map<String, Object>> batchValues = List.of( Map.of("name", "Alice", "age", 30), Map.of("name", "Bob", "age", 25) ); int[] updateCounts = namedParameterJdbcTemplate.batchUpdate( "INSERT INTO users(name, age) VALUES(:name, :age)", SqlParameterSourceUtils.createBatch(batchValues.toArray(new Map[0])) ); Arrays.stream(updateCounts).forEach(count -> System.out.println(count + " record inserted")); ``` 此处借助工具类 `SqlParameterSourceUtils` 方便构建大批量的数据源集合。 --- #### §注意事项§ 某些特殊情况下需要注意类型匹配问题。例如,若前端提交数值为 NUMBER 类型但目标列存储为字符串格式(VARCHAR2),则可能引发异常。解决办法是在 SQL 中显式转换为目标类型,如 `TO_CHAR(:staffId)`。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值