mybatis根据property获取column
mybatis根据类的属性获取xml文件中对应的column
mybatis获取xml文件中property对应的column
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
蕃薯耀 2016年4月29日 15:44:59 星期五
http://fanshuyao.iteye.com/
xml解析采用Dom4j(Dom4j使用详情见:http://fanshuyao.iteye.com/blog/2279679)
可以在附件中下载
package xxx.xxx.common.utils; import java.util.Date; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class XmlUtils { /** * 根据类的属性名找表的列名(取一个的时候可以使用此方法) * @param fileName 类对应的Mapper xml文件 * @param id 唯一的id * <p> * 如:resultMap id="BaseResultMap" type="com.chinagas.org.beans.User" 中的id * </p> * @param property 属性名(对应的Java对象属性名) * @return */ public static String getMapperColumnByProperty(String fileName, String id, String property){ try { SAXReader saxReader = new SAXReader(); Document document = saxReader.read(XmlUtils.class.getClassLoader().getResourceAsStream(fileName)); if(document != null){ Element root = document.getRootElement(); if(root != null){ @SuppressWarnings("unchecked") List<Element> resultMaps = root.elements("resultMap"); for (Element resultMap : resultMaps) { if(resultMap != null && resultMap.attributeValue("id").equals(id)){ @SuppressWarnings("unchecked") List<Element> properties = resultMap.elements(); for (Element prop : properties) { if(prop != null && prop.attributeValue("property").equals(property)){ return prop.attributeValue("column"); } } } } } } } catch (Exception e) { e.printStackTrace(); } return null; } /** * 返回ResultMap对应Element对象(取2次以上的时候,建议先把Element对象找到,再根据此Element对象再去找column,效率高很多) * @param fileName 类对应的Mapper xml文件 * @param id 唯一的id * <p> * 如:resultMap id="BaseResultMap" type="com.chinagas.org.beans.User" 中的id * </p> * @return */ public static Element getResultMapElement(String fileName, String id){ try { SAXReader saxReader = new SAXReader(); Document document = saxReader.read(XmlUtils.class.getClassLoader().getResourceAsStream(fileName)); if(document != null){ Element root = document.getRootElement(); if(root != null){ @SuppressWarnings("unchecked") List<Element> resultMaps = root.elements("resultMap"); for (Element resultMap : resultMaps) { if(resultMap != null && resultMap.attributeValue("id").equals(id)){ return resultMap; } } } } } catch (Exception e) { e.printStackTrace(); } return null; } /** * 在Element根据property找表的列名(和方法getResultMapElement()结合使用,多次取Column时效率高出很多倍) * @param resultMapElement Mapper xml文件解析后得到的Element对象(方法:getResultMapElement()) * @param property 属性名(对应的Java对象属性名) * @return */ public static String getMapperColumnByElement(Element resultMapElement, String property){ try { if(resultMapElement != null){ @SuppressWarnings("unchecked") List<Element> properties = resultMapElement.elements(); for (Element prop : properties) { if(prop != null && prop.attributeValue("property").equals(property)){ return prop.attributeValue("column"); } } } } catch (Exception e) { e.printStackTrace(); } return null; } public static void main(String[] args) { long startTime = new Date().getTime(); /*System.out.println(getMapperColumnByProperty("UserMapper.xml","BaseResultMap", "userName")); System.out.println(getMapperColumnByProperty("UserMapper.xml","BaseResultMap", "loginName")); System.out.println(getMapperColumnByProperty("UserMapper.xml","BaseResultMap", "orgName")); System.out.println(getMapperColumnByProperty("UserMapper.xml","BaseResultMap", "sex"));*/ Element e = getResultMapElement("UserMapper.xml","BaseResultMap"); System.out.println(getMapperColumnByElement(e, "userName")); System.out.println(getMapperColumnByElement(e, "loginName")); System.out.println(getMapperColumnByElement(e, "orgName")); System.out.println(getMapperColumnByElement(e, "sex")); long endTime = new Date().getTime(); System.out.println("所用的时间间隔是:"+ (endTime-startTime)); } }
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
蕃薯耀 2016年4月29日 15:44:59 星期五
http://fanshuyao.iteye.com/
相关推荐
在MyBatis的映射XML文件中,`<collection>`标签用于表示一对多的关系,它允许我们在一次查询中获取到一个对象的所有子对象,从而构建出树形结构。例如,如果我们有一个`Department`实体类,其中包含一个`List...
这个 `<select>` 标签定义了一个名为 "selectAllUsers" 的方法,运行时 MyBatis 会根据这个 ID 找到对应的 SQL 语句并执行。 为了调用这些 SQL 语句,我们需要创建一个与映射文件中的 `namespace` 匹配的 Java 接口...
<result column="name" property="name"/> <!-- 自关联 --> <association property="newsList" javaType="java.util.List"> <id column="news_id" property="id"/> <result column="title" property="title"/> ...
在需要使用MyBatis的地方,例如控制器或服务中,通过`SqlMapper.Instance`获取映射器实例,并调用之前定义的方法。例如,在ASP.NET MVC的控制器中: ```csharp public class UserController : Controller { private...
2. 嵌套结果:当主表和子表的数据在同一查询结果集中时,MyBatis会根据ResultMap来解析并关联这些数据。这种方式适用于主表和子表数据在同一个SELECT语句中返回的情况。 以下是一个简单的例子,展示了如何在MyBatis...
<result column="userAddress" property="userAddress" /> 查询列表的语句在 User.xml 中 程序代码 程序代码 <!-- 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 --> select * from user ...
<collection property="roles" ofType="Role" column="customer_id" select="getRolesByCustomerId" /> SELECT * FROM t_customer SELECT r.* FROM t_role r INNER JOIN t_customer_role cr ON r.id = cr...
-- <generatedKey column="ID" sqlStatement="oracle" identity="true" /> --> </table> </context> </generatorConfiguration> 4、右击generatorConfig.xml 点击Generate MyBatis/iBATIS Artifacts 生成...
6. **事务管理**:MyBatis支持多种事务管理方式,可以根据不同的应用场景选择合适的方式。 #### 四、MyBatis开发中的两种方式 在使用MyBatis进行开发时,有两种主要方式: 1. **基于XML映射文件**:这是传统的...
例如,你可以创建一个`JavaModelGenerator.ftl`模板,然后在其中添加中文注释的占位符,MyBatis Generator会根据这些占位符生成相应的注释。 通过以上步骤,你可以在MyBatis项目中轻松地生成包含中文注释的代码,...
这样,MyBatis将根据配置自动执行相关联的查询,将多层级的数据结构填充到对应的Java对象中。 总结来说,MyBatis通过`<collection>`标签实现了对多层级数据结构的映射,使得我们可以方便地处理复杂的关联查询,避免...
<result column="content" property="content" /> <result column="owner" property="owner" /> <collection property="comments" ofType="com.tiantian.mybatis.model.Comment"> <result column="comment_id" ...
<result column="content" property="content"/> <!-- 映射关联的对象 --> <association property="author" javaType="Author"> <id column="id" property="blog_author_id"/> <result column="userName" ...
MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 在这个...
当执行 `selectUser` 查询时,MyBatis 会根据 `UserResult` 映射规则,自动处理一对一和一对多的关联数据,填充对应的 `User` 实例。 了解了 `association` 和 `collection` 的基本用法后,你可以在实践中根据需求...
它可以包含id、constructor、property、association、collection等子元素,分别对应Java对象的属性、构造器参数、一对一关系、一对多关系。 4. **select**、**insert**、**update**、**delete**:这些元素定义了SQL...
<result property="author" column="blog_author"/> ``` #### 四、高级特性 ##### 4.1 缓存机制 MyBatis 提供了两种级别的缓存机制:一级缓存(本地会话缓存)和二级缓存(全局会话缓存)。合理利用缓存可以...
3. **动态SQL**:MyBatis支持动态SQL功能,这意味着可以根据不同的条件动态生成SQL语句,大大减少了代码的冗余和重复性工作。 ```xml WHERE column = #{value} ``` 4. **对象映射**:MyBatis支持自动将...
在XML配置文件中,你可以看到如何定义resultMap元素,包括id、property、column等子元素,以完成这种映射。 最后,不要忘记Mybatis的事务管理。Mybatis可以与Spring等框架集成,实现声明式事务管理,或者在Java代码...