您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關mybatis 3.5.0/mybatis plus 3.x中dao層與xml參數綁定的案例分析,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
方式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 3.5.0/mybatis plus 3.x中dao層與xml參數綁定的案例分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。