`
这些年
  • 浏览: 399752 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mybatis 映射xml的一些问题

 
阅读更多

1:xml中的查询语句有to_date()时传入的时间不用单引号

to_date(#{startTime},'yyyy-mm-dd hh24:mi:ss')

 2:一些特殊符号的处理:<![CDATA[]]>

and t.alarm_time<![CDATA[<]]>=to_date(#{endTime},'yyyy-mm-dd hh24:mi:ss')

 3:使用if判断时,空值可以这样判断

<if test="endTime !=null and endTime !='' ">

 4:传递多个参数据 (一种是用map ,一种是用bean(略))

 

<!--
	 使用HashMap传递多个参数 
	parameterType 可以是别名或完全限定名 ,map->java.util.Map,这两个都是可以的
	-->
	<select id="selectBlogByMap" parameterType="map" resultType="Blog">
		SELECT t.ID, t.title, t.content
		  FROM blog t
		 WHERE t.title = #{h_title}
		   AND t.content =#{h_content}
	</select>
	<!-- 使用JavaBean传递多个参数 -->
	<select id="selectBlogByBean" parameterType="Blog" resultType="Blog">
		SELECT t.ID, t.title, t.content
		  FROM blog t
		 WHERE t.title = #{title} <!--名字要与bean中的一致,大小写也要一致-->
		   AND t.content =#{content}
	</select>

 

/**
	 * 通过Map传递多个参数
	 */
	@Test
	public void testSelectByMap() {
		SqlSession session = sqlSessionFactory.openSession();
		Map<String, Object> param=new HashMap<String, Object>();
		param.put("h_title", "oracle");
		param.put("h_content", "使用序列!");
		Blog blog = (Blog)session.selectOne("cn.enjoylife.BlogMapper.selectBlogByMap",param);
		session.close();
		System.out.println("blog title:"+blog.getTitle());
	}
	/**
	 * 通过JavaBean传递多个参数
	 */
	@Test
	public void testSelectByBean() {
		SqlSession session = sqlSessionFactory.openSession();
		Blog blog=new Blog();
		blog.setTitle("oracle");
		blog.setContent("使用序列!");
	    Blog newBlog = (Blog)session.selectOne("cn.enjoylife.BlogMapper.selectBlogByBean",blog);
		session.close();
		System.out.println("new Blog ID:"+newBlog.getId());
	}

 使用注解

Mapper
public List<BigCustomerSumBandwidth> getBigCustomerSumByBigCustomerId(@Param("id") String id,
@Param("startTime") Date startTime);

xml

 

<select id="getBigCustomerSumByBigCustomerId" 
		resultType="com.chinacache.entity.BigCustomerSumBandwidth">
		select * from big_customer_sumbandwidth where
		big_customer_id=#{id} and day>=#{startTime,jdbcType=DATE}
		</select>

 

5:使用缓存(二级缓存)

在spring的配置文件中加入mybatis的配置文件

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation" value="classpath:mybatis-config.xml" />
	</bean>

 

mybatis的配置文件
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE configuration  
PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"  
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
	<settings>
		<setting name="cacheEnabled" value="true" />
	</settings>
</configuration>
 map.xml的缓存设配
<?xml version="1.0" encoding="UTF-8" ?> 
    <!DOCTYPE mapper 
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.chinacache.mapper.util.ChannelConfig">

<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true" />
 6:映射时间类型(转)
在字段中有Date和DateTime类型,在插入数据时只要将实体的属性设置成Timestamp就会对应mysql的DateTime类型,Date会对应mysql的Date类型。
在MyBatis映射文件中要表明映射类型
<result column="modified_date" jdbcType="TIMESTAMP" property="modified_date" javaType="java.sql.Timestamp" />
<result column="date" jdbcType="DATE" property="date" javaType="java.util.Date" />
在使用字段的时候也要标明类型#{modified_date,jdbcType=TIMESTAMP}、#{date,jdbcType=DATE}。
别外在处理char类型时会出错,尽量用varchar2

保存完整时间

在用mybatis时,对mysql数据库是datatime字段添加值是,发现添加成功后查看数据库字段值是,只有年月日有值,时分秒则为0来表示的,更改为java.sql.date,time等也不行,如果将mybatis的映射xml的jdbcType="DATE"改为="TIME",会报异常: 
Java代码   收藏代码
  1. com.mysql.jdbc.MysqlDataTruncation: Data truncation:xxxxx  
给截断了,经过一翻google后,发现以下这代话: 
Java代码   收藏代码
  1. 对于Ibatis操作Date/Time/DateTime,总结如下:  
  2. 将pojo的属性类型设置为java.sql.Date(或java.sql.Time, java.sql.Timestamp),此时会严格遵循这三种类型的语义。但此方法因存在前文中提到的性能问题,在JDK1.6以前的JDK版本中能少使用就少使用。  
  3. 如果你想在pojo中使用java.util.Date, 则要注意:  
  4. 完整的日期时间,要确保jdbcType为空,或为DATE,TIME以外的值  
  5. 只需要时间,要指定jdbcType=”TIME”  
  6. 只需要日期,要指定jdbcType=”DATE”  
于是将映射的XML文件里的,jdbcType="DATE"这段代码清了就可以了。特此记录 
 7:There is no getter for property named '**' in 'class java.lang.String (参数用_parameter代替,sql中用${_parameter } )
<select id="getBigCustomerLimitByBu" resultType="com.chinacache.entity.BigCustomer"
		parameterType="java.lang.String">
		<if test="_parameter == 'SOC' ">
		<![CDATA[
        select t.* from (select * from big_user_config
		where rownum<=15 order by order_band) t where rownum<=15
		]]>
		</if>
		<if test="_parameter != 'SOC'">
		<![CDATA[
		select t.* from (select * from big_user_config
		where		
		bu=#{_parameter} and rownum<=15 order by order_band) t where rownum<=15
		]]>
		</if>
	</select>
 8:MyBatis中出现Mapped Statements collection does not contain value异常解决方案
1、mapper.xml中没有加入namespace
2、mapper.xml中的方法和接口mapper的方法不对应
3、mapper.xml没有加入到mybatis-config.xml中(即总的配置文件),例外:配置了mapper文件的包路径的除外
4、mapper.xml文件名和所写的mapper名称不相同。
 9:attempted to return null from a method with a primitive return type (long).
我xml中映射 resultType="java.lang.Long" ,但接收这个方法使用了long,这样就会报这个错误。别外还要注意mapper的方法返回值类型也要是Long
10:模糊查询
<select id="selectByName" parameterType="String" resultType="Student">
select * from Student s where s.name like "%"#{name}"%";
</select>
 11:复用
定意sql(名字:CHOSEN_CARS_WHERE_CONDITION)
<sql id="CHOSEN_CARS_WHERE_CONDITION">
<where>
<if test="bindHw != -1">AND c.hardware=#{bindHw}</if>
</where>
</sql>
 使用它(<include refid=""/>
<select id="getCarAndHwCount" parameterType="com.autoyolConsole.vo.CarSearchCondition"
resultType="int">
SELECT COUNT(c.id) FROM car c JOIN member m ON c.mem_no=m.reg_no
<include refid="CHOSEN_CARS_WHERE_CONDITION" />
</select>
 12:Document root element "mapper", must match DOCTYPE root "configuration"
mybatis.xml和mapper.xml都用了一个doctype
改回来即可

mybatis.xml:

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">

mapper.xml

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
分享到:
评论

相关推荐

    mybatis映射文件xml+bean+dao自动构建

    本文将深入探讨“mybatis映射文件xml+bean+dao自动构建”的主题,以及如何利用代码生成工具来提高开发效率。 首先,让我们理解一下标题中的各个组成部分: 1. **MyBatis映射文件(XML)**:MyBatis的核心之一是XML...

    mybatis映射生成工具

    MyBatis映射生成工具是一种高效实用的开发辅助软件,主要功能是帮助开发者自动生成MyBatis框架下的DAO层、Bean类以及对应的XML映射文件。这个工具极大地提高了开发效率,减少了手动编写这些重复性代码的工作量。接...

    mybatis_xml插件

    同时,为了更好地利用插件,开发者还需要熟悉MyBatis的配置和Mapper接口的使用方式,以及XML映射文件中的各种元素和属性。 总之,MyBatis_XML插件是Java开发中针对MyBatis框架的一个强大辅助工具,它简化了XML文件...

    关于MyBatis找不到映射文件的问题

    一、MyBatis映射文件的配置 在MyBatis中,映射文件是用于定义SQL语句和Java对象之间的映射关系的配置文件。通常情况下,映射文件会被放在资源目录(resources)下的某个子目录(如mapper)下。在MyBatis的核心配置...

    mybatis映射文件.xml

    mybatis映射文件.xml

    mybatis映射文件自动生成工具

    MyBatis映射文件自动生成工具是一款高效实用的开发辅助软件,主要针对MyBatis框架下的XML映射文件编写工作。这款工具极大地提高了开发效率,减少了手动编写XML映射文件的繁琐过程。通过在`generator.xml`配置文件中...

    mybatis xml文件自动生成

    "mybatis xml文件自动生成"是开发过程中的一个重要环节,它可以帮助开发者提高效率,减少手动编写XML映射文件和对应的POJO(Plain Old Java Object)类的工作量。 MyBatis的Mapper文件是其核心组成部分之一,它包含...

    mybatis_xml关联插件

    Mybatis 是一个流行的Java持久层框架,它简化了数据库操作,允许开发者将SQL语句直接写在XML映射文件中,提供了动态SQL的功能。在Eclipse这样的集成开发环境中,为了提高开发效率,我们可以配置Mybatis的插件,使得...

    maven生成mybatis映射文件

    通过以上步骤,我们可以利用Maven与MyBatis Generator的结合,实现自动化生成MyBatis映射文件,提升开发效率,减少手动编写重复代码的工作量。记得在实际应用中根据项目特点进行适当的调整和优化。

    mybatis映射XML文件详解及实例

    本文将深入解析MyBatis映射XML文件的各个组成部分,并通过实例来帮助理解其工作原理。 首先,映射XML文件的根元素是`&lt;mapper&gt;`,它包含了一个`namespace`属性,该属性的值通常与对应的Java接口全限定名一致,用于...

    mybatis导出xml文件(只支持mysql数据库)

    MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 标题"mybatis导出xml文件(只支持mysql数据库)"指的是一个特定的功能,即...

    自动生成mybatis映射文件工具

    自动生成mybatis映射文件工具; 步骤: 1》打开generatorConfig.xml文件,配置自己的数据库连接参数 2》配置实体类、mapper映射文件、mapper接口 3》:回到根目录,按住Shif+鼠标右键(即在当前目录打开命令行),...

    spring和Mybatis的xml配置文件提示约束包

    "spring和Mybatis的xml配置文件提示约束包"这个主题,主要是关于在XML配置文件中使用的DTD(Document Type Definition)文档类型定义,它为XML文件提供了结构约束和语法规范。 DTD是一种元语言,用于定义XML文档的...

    mybatis入门实例(xml)

    MyBatis 是一款深受开发者喜爱的持久层框架,它允许开发者用 SQL 语句来操作数据库,同时提供了 XML 或注解方式来映射 SQL 语句与 Java 对象,简化了开发过程。在这个"mybatis入门实例(xml)"中,我们将探讨如何使用 ...

    mybatis配置xml最新dtd文件

    这些文件定义了MyBatis配置文件(mybatis-3-config.xml)和映射文件(mapper.xml)的元素、属性和它们的顺序。 首先,`mybatis-3-config.dtd`是MyBatis配置文件的DTD。它定义了如下的主要元素: 1. `...

    Mybatis关联映射Demo

    Mybatis关联映射是数据库操作中的一个重要概念,它允许我们在SQL查询中处理一对多、多对一、多对多等复杂关系。在这个"Mybatis关联映射Demo"中,我们将深入探讨如何在Mybatis框架中实现这些关系映射,以便更好地理解...

    MyBatis关联映射代码

    关联映射是MyBatis通过XML配置文件或注解来定义实体类之间的关系。这种映射允许我们在查询时自动处理关联对象,而无需手动编写复杂的SQL语句。关联映射分为嵌套查询(Nested Select)和嵌套结果(Nested ResultMap)...

    springboot多数据源、整合mybatis的映射xml例子.zip

    总之,`springboot多数据源、整合mybatis的映射xml例子.zip`提供的示例涵盖了Spring Boot项目中多数据源管理和MyBatis集成的关键技术点,对于理解如何在Spring Boot应用中灵活处理多个数据库具有很好的参考价值。...

Global site tag (gtag.js) - Google Analytics