mybatis 3.5.0/mybatis plus 3.x中dao層與xml引數繫結大全(和老版本的不一樣)
阿新 • • 發佈:2019-08-30
方式1(不推薦) 單個引數方式
@Mapper
public interface UserDao extends BaseMapper<User> {
User selectList1(String username, String phone);
}
<select id="selectList1" resultMap="BaseResultMap">
select * from user where username= #{arg0} and phone=#{arg1}
</select>
注意:與網上所說的select * from user where username= #{0} and phone=#{1}在新版本中是不對的,會報錯誤:
nested exception is org.apache.ibatis.binding.BindingException: Parameter '0' not found. Available parameters are [arg1, arg0, param1, param2]
檢視報錯報錯資訊可以看出還可以這樣做
<select id="selectList1" resultMap="BaseResultMap"> select * from user where username= #{param1} and phone=#{param2} </select>
方式2(推薦) 實體類物件方式
該方法和之前版本是相容的,沒有變化
@Mapper public interface UserDao extends BaseMapper<User> { User selectList1(@Param("username") String username,@Param("phone") String phone); }
<select id="selectList1" resultMap="BaseResultMap"> select * from user where username= #{username} and phone=#{phone} </select>
或者
<select id="selectList1" resultMap="BaseResultMap" parameterType="com.bdkt.course.model.User">
select * from user where username= #{username} and phone=#{phone}
</select>
這兩種方式都可以的
方式3 使用bean工具類轉成map,map型別引數(推薦)
bean工具類
import com.alibaba.fastjson.JSONObject;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class QueryEntityTools {
public static Map<String, Object> objectToMap(Object obj) {
if (obj == null) {
return null;
}
Map<String, Object> map = new HashMap<String, Object>();
try {
Field[] declaredFields = obj.getClass().getDeclaredFields();
for (Field field : declaredFields) {
field.setAccessible(true);
map.put(field.getName(), field.get(obj));
}
} catch (Exception e) {
}
return map;
}
/**
* 將實體轉換成Map
*
* @param bean
* @return
*/
public static Map<String, Object> beanToMap(Object bean) {
Class<?> type = bean.getClass();
Map<String, Object> returnMap = new HashMap<String, Object>();
try {
BeanInfo beanInfo = Introspector.getBeanInfo(type);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (int i = 0; i < propertyDescriptors.length; i++) {
PropertyDescriptor descriptor = propertyDescriptors[i];
String propertyName = descriptor.getName();
if (!propertyName.equals("class")) {
Method readMethod = descriptor.getReadMethod();
if (readMethod != null) {
Object result = readMethod.invoke(bean, new Object[0]);
if (result != null) {
returnMap.put(propertyName, result);
} else {
returnMap.put(propertyName, "");
}
}
}
}
} catch (Exception e) {
returnMap.put("error", e.getMessage());
}
return returnMap;
}
/**
* 將實體轉換成Json
*
* @param bean
* @return
*/
public static JSONObject beanToJson(Object bean) {
Class<?> type = bean.getClass();
JSONObject json = new JSONObject();
try {
BeanInfo beanInfo = Introspector.getBeanInfo(type);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (int i = 0; i < propertyDescriptors.length; i++) {
PropertyDescriptor descriptor = propertyDescriptors[i];
String propertyName = descriptor.getName();
if (!propertyName.equals("class")) {
Method readMethod = descriptor.getReadMethod();
if (readMethod != null) {
Object result = readMethod.invoke(bean, new Object[0]);
if (result != null) {
json.put(propertyName, result);
} else {
json.put(propertyName, "");
}
}
}
}
} catch (Exception e) {
json.put("error", e.getMessage());
}
return json;
}
/**
* 將map轉換成Json
*/
public static JSONObject mapToJson(Map<String, ? extends Object> map) {
JSONObject json = new JSONObject();
for (String key : map.keySet()) {
json.put(key, map.get(key));
}
return json;
}
/**
* 將map轉換成實體
*
* @param map
* @param bean
* @return
*/
public static <T, K, v> T mapToBean(Map<K, v> map, Class<T> bean) {
T t = null;
try {
BeanInfo beanInfo = Introspector.getBeanInfo(bean);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
t = bean.newInstance();
for (PropertyDescriptor property : propertyDescriptors) {
String key = property.getName();
if (map.containsKey(key)) {
Object value = map.get(key);
Method setter = property.getWriteMethod();
if (checkType(value, property.getPropertyType())) {
setter.invoke(t, value);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return t;
}
private static boolean checkType(Object a, Class<?> b) {
Class<? extends Object> oc = a.getClass();
if (oc == b || oc.getSuperclass() == b || checkInterfaces(oc.getInterfaces(), b)) {
return true;
} else {
return false;
}
}
private static boolean checkInterfaces(Class<?>[] cArray, Class<?> b) {
boolean tag = false;
for (Class<?> c : cArray) {
if (c == b) {
tag = true;
break;
}
}
return tag;
}
/**
* Map List To Bean List
* @param bean
* @return
*/
public static <T, k, v> List<T> mapListToBeanList(List<Map<k, v>> listMap, Class<T> bean) {
List<T> beanList = new ArrayList<T>(listMap.size());
for (Map<k, v> map : listMap) {
T t = null;
try {
BeanInfo beanInfo = Introspector.getBeanInfo(bean);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
t = bean.newInstance();
for (PropertyDescriptor property : propertyDescriptors) {
String key = property.getName();
if (map.containsKey(key)) {
Object value = map.get(key);
Method setter = property.getWriteMethod();
setter.invoke(t, value);
}
}
} catch (Exception e) {
e.printStackTrace();
}
beanList.add(t);
}
return beanList;
}
/**
* 將實體轉換成Map
* 將key按駝峰規則轉換成下劃線分隔(字母大寫)
* @param bean
* @return
*/
public static Map<String, Object> beanToColumnMap(Object bean) {
Class<?> type = bean.getClass();
Map<String, Object> returnMap = new HashMap<String, Object>();
try {
BeanInfo beanInfo = Introspector.getBeanInfo(type);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (int i = 0; i < propertyDescriptors.length; i++) {
PropertyDescriptor descriptor = propertyDescriptors[i];
String propertyName = descriptor.getName();
if (!propertyName.equals("class")) {
Method readMethod = descriptor.getReadMethod();
Object result = readMethod.invoke(bean, new Object[0]);
if (result != null && !result.equals("")) {
returnMap.put(camelToUnderline(propertyName), result);
}
}
}
} catch (Exception e) {
e.getMessage();
// returnMap.put("error", e.getMessage());
// returnMap = null;
}
return returnMap;
}
/**
* 將camel Map轉成Column Map
*
* @param bean
* @return
*/
public static Map<String, Object> camelMapToColumnMap(Map<String, Object> beanMap) {
Map<String, Object> returnMap = new HashMap<String, Object>();
try {
for (String key : beanMap.keySet()) {
returnMap.put(camelToUnderline(key), beanMap.get(key));
}
} catch (Exception e) {
e.printStackTrace();
}
return returnMap;
}
/**
* 字串下劃線轉駝峰
*
* @param line
* @return
*/
public static String underlineToCamel(String line) {
if (line == null || "".equals(line)) {
return "";
}
StringBuffer sb = new StringBuffer();
Pattern pattern = Pattern.compile("([A-Za-z\\d]+)(_)?");
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
String word = matcher.group();
Character c = word.charAt(0);
sb.append(matcher.start() == 0 ? Character.toLowerCase(c) : Character.toUpperCase(c));
int index = word.lastIndexOf('_');
if (index > 0) {
sb.append(word.substring(1, index).toLowerCase());
} else {
sb.append(word.substring(1).toLowerCase());
}
}
return sb.toString();
}
/**
* 字串駝峰轉下劃線
*
* @param line
* @return
*/
public static String camelToUnderline(String line) {
if (line == null || "".equals(line)) {
return "";
}
Character c = line.charAt(0);
String f = line.substring(1);
line = String.valueOf(c).toUpperCase().concat(f);
StringBuffer sb = new StringBuffer();
Pattern pattern = Pattern.compile("[A-Z]([a-z\\d]+)?");
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
String word = matcher.group();
sb.append(word.toUpperCase());
sb.append(matcher.end() == line.length() ? "" : "_");
}
return sb.toString();
}
}
impl程式碼
@Override
public User selectList1(User user) {
Map<String, Object> map = QueryEntityTools.beanToMap(user);
return baseMapper.selectList1(map);
}
mappper
@Mapper
public interface UserDao extends BaseMapper<User> {
User selectList1(Map map);
}
xml
<select id="selectList1" resultMap="BaseResultMap">
select * from user where username= #{username} and phone=#{phone}
</select>
或者
<select id="selectList1" resultMap="BaseResultMap" parameterType="java.util.Map">
select * from user where username= #{username} and phone=#{phone}
</select>
謝謝格紋觀看,下次講述mybatis plus+自