`
阅读更多

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/

4
6
分享到:
评论

相关推荐

    mybatis 父子级树形结构查询

    在MyBatis的映射XML文件中,`&lt;collection&gt;`标签用于表示一对多的关系,它允许我们在一次查询中获取到一个对象的所有子对象,从而构建出树形结构。例如,如果我们有一个`Department`实体类,其中包含一个`List...

    mybatis入门实例(xml)

    这个 `&lt;select&gt;` 标签定义了一个名为 "selectAllUsers" 的方法,运行时 MyBatis 会根据这个 ID 找到对应的 SQL 语句并执行。 为了调用这些 SQL 语句,我们需要创建一个与映射文件中的 `namespace` 匹配的 Java 接口...

    mybatis自关联查询

    &lt;result column="name" property="name"/&gt; &lt;!-- 自关联 --&gt; &lt;association property="newsList" javaType="java.util.List"&gt; &lt;id column="news_id" property="id"/&gt; &lt;result column="title" property="title"/&gt; ...

    asp.net搭建mybatis开发环境

    在需要使用MyBatis的地方,例如控制器或服务中,通过`SqlMapper.Instance`获取映射器实例,并调用之前定义的方法。例如,在ASP.NET MVC的控制器中: ```csharp public class UserController : Controller { private...

    MyBatis关联映射代码

    2. 嵌套结果:当主表和子表的数据在同一查询结果集中时,MyBatis会根据ResultMap来解析并关联这些数据。这种方式适用于主表和子表数据在同一个SELECT语句中返回的情况。 以下是一个简单的例子,展示了如何在MyBatis...

    springmybatis

    &lt;result column="userAddress" property="userAddress" /&gt; 查询列表的语句在 User.xml 中 程序代码 程序代码 &lt;!-- 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 --&gt; select * from user ...

    在IDEA中通过MyBatis框架访问达梦数据库

    &lt;collection property="roles" ofType="Role" column="customer_id" select="getRolesByCustomerId" /&gt; SELECT * FROM t_customer SELECT r.* FROM t_role r INNER JOIN t_customer_role cr ON r.id = cr...

    MyBatis Generator

    -- &lt;generatedKey column="ID" sqlStatement="oracle" identity="true" /&gt; --&gt; &lt;/table&gt; &lt;/context&gt; &lt;/generatorConfiguration&gt; 4、右击generatorConfig.xml 点击Generate MyBatis/iBATIS Artifacts 生成...

    MyBatis3.2.4完全自学手册

    6. **事务管理**:MyBatis支持多种事务管理方式,可以根据不同的应用场景选择合适的方式。 #### 四、MyBatis开发中的两种方式 在使用MyBatis进行开发时,有两种主要方式: 1. **基于XML映射文件**:这是传统的...

    mybatis生成中文注释

    例如,你可以创建一个`JavaModelGenerator.ftl`模板,然后在其中添加中文注释的占位符,MyBatis Generator会根据这些占位符生成相应的注释。 通过以上步骤,你可以在MyBatis项目中轻松地生成包含中文注释的代码,...

    mybatis 多层级collection嵌套.docx

    这样,MyBatis将根据配置自动执行相关联的查询,将多层级的数据结构填充到对应的Java对象中。 总结来说,MyBatis通过`&lt;collection&gt;`标签实现了对多层级数据结构的映射,使得我们可以方便地处理复杂的关联查询,避免...

    MyBatis的resultMap详解

    &lt;result column="content" property="content" /&gt; &lt;result column="owner" property="owner" /&gt; &lt;collection property="comments" ofType="com.tiantian.mybatis.model.Comment"&gt; &lt;result column="comment_id" ...

    MyBatis 简单样例

    &lt;result column="content" property="content"/&gt; &lt;!-- 映射关联的对象 --&gt; &lt;association property="author" javaType="Author"&gt; &lt;id column="id" property="blog_author_id"/&gt; &lt;result column="userName" ...

    MyBatis练习

    MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 在这个...

    mybatis一对一,一对多

    当执行 `selectUser` 查询时,MyBatis 会根据 `UserResult` 映射规则,自动处理一对一和一对多的关联数据,填充对应的 `User` 实例。 了解了 `association` 和 `collection` 的基本用法后,你可以在实践中根据需求...

    MyBatis3DTD约束

    它可以包含id、constructor、property、association、collection等子元素,分别对应Java对象的属性、构造器参数、一对一关系、一对多关系。 4. **select**、**insert**、**update**、**delete**:这些元素定义了SQL...

    MyBatis3.2.6

    &lt;result property="author" column="blog_author"/&gt; ``` #### 四、高级特性 ##### 4.1 缓存机制 MyBatis 提供了两种级别的缓存机制:一级缓存(本地会话缓存)和二级缓存(全局会话缓存)。合理利用缓存可以...

    传智播客mybatis笔记

    3. **动态SQL**:MyBatis支持动态SQL功能,这意味着可以根据不同的条件动态生成SQL语句,大大减少了代码的冗余和重复性工作。 ```xml WHERE column = #{value} ``` 4. **对象映射**:MyBatis支持自动将...

    Mybatis入门JavaSE案例

    在XML配置文件中,你可以看到如何定义resultMap元素,包括id、property、column等子元素,以完成这种映射。 最后,不要忘记Mybatis的事务管理。Mybatis可以与Spring等框架集成,实现声明式事务管理,或者在Java代码...

Global site tag (gtag.js) - Google Analytics