
mybatis
描述
在《MyBatis手寫框架(三)》中,我們對返回結(jié)果進行了處理,但需要對 SQL 參數(shù)處理得更靈活一些。
@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");
...
}
...
}
- 我們硬編碼輸入一個參數(shù),實際上,我們需要根據(jù) SQL 語句的查詢條件,輸入多個參數(shù)。
實現(xiàn)
我們這里實現(xiàn)接收一個參數(shù)(8種數(shù)據(jù)類型及String)和多個參數(shù),處理多個參數(shù)通過Map進行傳遞。實現(xiàn)步驟如下:
- 修改配置文件
- 修改代碼
- 測試代碼
修改配置文件
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用于說明設置的列名,也對應著封裝輸入?yún)?shù)的 Map
修改代碼
private void processParam(String statementId, Object param, PreparedStatement pstat) throws SQLException {
//處理單個參數(shù)(8種基本數(shù)據(jù)類型加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]));
}
}
}
- 參數(shù)是基本數(shù)據(jù)類型和String時,直接設置即可
- 數(shù)據(jù)是Map類型,要根據(jù)配置中設置列項去設置每個參數(shù)值
測試代碼
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();
}
}
}

碼字不易,感謝點贊打賞