
描述
在《MyBatis手写框架(三)》中,我们对返回结果进行了处理,但需要对 SQL 参数处理得更灵活一些。
@Test
public void testSelectUser() {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet rs = null;
try {
...
String sql = "select * from user_info where name = ?";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, "tester");
...
}
...
}
- 我们硬编码输入一个参数,实际上,我们需要根据 SQL 语句的查询条件,输入多个参数。
实现
我们这里实现接收一个参数(8种数据类型及String)和多个参数,处理多个参数通过Map进行传递。实现步骤如下:
- 修改配置文件
- 修改代码
- 测试代码
修改配置文件
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/tester?characterEncoding=utf-8
db.username=root
db.password=123456
db.sql.queryUserByParam=select * from user_info where name = ? and gender = ?
db.sql.queryUserByParam.columnName=name,gender
db.sql.queryUserByParam.resultType=com.edugroup.pojo.UserInfo
- columnName用于说明设置的列名,也对应着封装输入参数的 Map
修改代码
private void processParam(String statementId, Object param, PreparedStatement pstat) throws SQLException {
//处理单个参数(8种基本数据类型加String)
if(param instanceof String || param instanceof Integer) {
pstat.setObject(1, param);
} else if(param instanceof Map) {
Map<String,Object> paraInfo = (Map<String,Object>)param;
String[] paraColumns = props.getProperty("db.sql." + statementId +".columnName")
.split(",");
for(int i=0; i < paraColumns.length; i++) {
pstat.setObject(i+1, paraInfo.get(paraColumns[i]));
}
}
}
- 参数是基本数据类型和String时,直接设置即可
- 数据是Map类型,要根据配置中设置列项去设置每个参数值
测试代码
package com.edugroup.test;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import com.edugroup.MyBatisV1;
import com.edugroup.pojo.UserInfo;
public class TestMyBatisV1 {
private MyBatisV1 myBatisV1 = null;
@Before
public void init() throws IOException {
myBatisV1 = new MyBatisV1();
}
@Test
public void testSelectList() {
try {
Map<String,Object> paraMap = new HashMap<String,Object>();
paraMap.put("name", "tester");
paraMap.put("gender", "female");
List<UserInfo> selectList = myBatisV1.selectList("queryUserByParam", paraMap);
for (UserInfo userInfo : selectList) {
System.out.println(userInfo);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END

















- 最新
- 最热
只看作者