1、插入主键自增长:前提是要设置自增长的字段:alter table HU_SERVER modify id int(10) auto_increment;

想取的主键的值,需要加 selectKey这段,而且前面sql语句里面不需要插入主键字段。对于不同的数据库,selectKey语句的写法是不同的。 针对不同数据库的写法如下:
Cloudscape  VALUES IDENTITY_VAL_LOCAL()
DB2         VALUES IDENTITY_VAL_LOCAL()
Derby       VALUES IDENTITY_VAL_LOCAL()
HSQLDB      CALL IDENTITY()
MySql       SELECT LAST_INSERT_ID()
SqlServer   SELECT SCOPE_IDENTITY()
SYBASE      SELECT @@IDENTITY
ORACLE      
SELECT CUSTOM_SQL.NEXTVAL AS ID FROM DUAL

 
  
  1. <insertid="insertOneUser4"parameterClass="com.air.Account">

  2.        INSERT INTO USER_ACCOUNT  

  3.        (  

  4.            USERID,USERNAME, PASSWORD, GROUPNAME

  5.        )VALUES(

  6.            #userid#,

  7.            #username#,

  8.            #password#,

  9.            #groupname#  

  10.        )

  11. <selectKey

  12. keyProperty="userid"

  13. resultClass="int">

  14.            SELECT LAST_INSERT_ID()          

  15. selectKey>

  16. insert>

实例:

 
  
  1. <insertid="insertHServer"parameterClass="com.alibaba.h.console.domain.HServer">

  2.        INSERT INTO

  3.        H_SERVER(ID,NAME,IP,PORT,GMT_CREATED,GMT_MODIFIED)

  4.        VALUES(#id#,#name#,#ip#,#port#,#gmtCreated#,#gmtModified#)

  5. <selectKeykeyProperty="id"resultClass="int"type="pre">

  6.           SELECT LAST_INSERT_ID()

  7. selectKey>

  8. insert>

插入时:不需要再setId,让自动生成

2、com.ibatis.common.beans.ProbeException: There is no READABLE property named 'ID' in class 'com.alibaba.h.console.domain.HServer'

原因:中的hServerClass被传入resultClass或者parameterClass

解决方法:直接使用原生的类:parameterClass="com.alibaba.h.console.domain.HServer"

3、传递多参数

方法1:使用对象构造查询参数

 
  
  1. <selectid="selectStudentByIdAndName"resultClass="Student"parameterClass="Student">

  2.    select * from student where  sid=#sid# and sname=#sname#  

  3. select>

方法2:使用map封装查询参数

map 的定义一定要在sql的前面,第一次我做连写的时候就吧map的定义放在了后面,结果老是报错,说找不到map的定义;

【注意】limit #begin#,#increment# 的位置,否则dynamic为空的时候,会报sql语法错误

 
  
  1. <parameterMapclass="java.util.HashMap"id="parameterMap">

  2. <parameterproperty="listType"/>

  3. <parameterproperty="listKey"/>

  4. <parameterproperty="listValue"/>

  5. <parameterproperty="availableBegin"/>

  6. <parameterproperty="availableEnd"/>

  7. <parameterproperty="begin"/>

  8. <parameterproperty="increment"/>

  9. parameterMap>

  10. <selectid="getBlackList"resultMap="HBlackListResult"

  11. parameterMap="parameterMap">

  12.        SELECT

  13. <includerefid="columns"/>

  14.            FROM black_list

  15.        ]]>

  16. <dynamicprepend="where">

  17. <isNotEmptyprepend="and"property="listType">

  18. list_type = #listType#

  19. isNotEmpty>

  20. <isNotEmptyprepend="and"property="listKey">

  21. list_key = #listKey#

  22. isNotEmpty>

  23. <isNotEmptyprepend="and"property="listValue">

  24. list_value = #listValue#

  25. isNotEmpty>

  26. <isNotEmptyprepend="AND"property="availableBegin">

  27.                available_begin >= #availableBegin#

  28. isNotEmpty>

  29. <isNotEmptyprepend="AND"property="availableEnd">

  30.                available_end <= #availableEnd#

  31. isNotEmpty>

  32. dynamic>

  33.          limit #begin#,#increment#

  34. select>

代码:

 
  
  1. Map parameterMap = new HashMap();

  2.       parameterMap.put("listType", 1);

  3.       parameterMap.put("listKey", "list_key1");

  4.       parameterMap.put("listValue", "list_value1");

  5. try {

  6.           parameterMap.put("availableBegin", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parseObject("2011-11-01 00:00:00"));

  7.           parameterMap.put("availableEnd", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parseObject("2011-11-10 00:00:00"));

  8.       } catch (ParseException e) {

  9. // TODO Auto-generated catch block

  10.           e.printStackTrace();

  11.       }

  12.       parameterMap.put("begin",5);

  13.       parameterMap.put("increment", 10);

  14. return getSqlMapClientTemplate().queryForList("HBlackList.getBlackList", parameterMap);



4、动态查询

 
  
  1. <selectid="getBlackListCount"resultClass="java.lang.Long">

  2.        select count(*) from black_list

  3. <dynamicprepend="where">

  4. <isNotEmptyprepend="and"property="listType">

  5. list_type = #listType#

  6. isNotEmpty>

  7. <isNotEmptyprepend="and"property="listKey">

  8. list_key = #listKey#

  9. isNotEmpty>

  10. <isNotEmptyprepend="and"property="listValue">

  11. list_value = #listValue#

  12. isNotEmpty>

  13. <isNotEmptyprepend="AND"property="availableBeginBegin">

  14.                available_begin >= #availableBeginBegin#

  15. isNotEmpty>

  16. <isNotEmptyprepend="AND"property="availableEndBegin">

  17.                available_end <= #availableEndBegin#

  18. isNotEmpty>

  19. dynamic>

  20. select>

注意点:

(1)resultClass类型:具体的类型

(2) '>'需要使用转义符号:‘<

(3) timestamp支持查询时比较大小,可用>,< =等,已确认;datetime似乎不行,待确认?测试后为:支持,用法一样

5、输出完整的sql,只需要配置如下日志

 
  
  1. log4j.appender.stdout=org.apache.log4j.ConsoleAppender

  2. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

  3. log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

  4. log4j.logger.com.ibatis=debug

  5. log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug

  6. log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug

  7. log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug

  8. log4j.logger.java.sql.Connection=debug

  9. log4j.logger.java.sql.Statement=debug

  10. log4j.logger.java.sql.PreparedStatement=debug,stdout

或者:

 
  
  1. xmlversion="1.0"encoding="UTF-8"?>

  2. >

  3. <log4j:configurationxmlns:log4j="http://jakarta.apache.org/log4j/">

  4. <appendername="STDOUT"class="org.apache.log4j.ConsoleAppender">

  5. <layoutclass="org.apache.log4j.PatternLayout">

  6. <paramname="ConversionPattern"value="%d [%-5p] %c\:%x%L - %m%n"/>

  7. layout>

  8. appender>

  9. <loggername="log4j.logger.com.ibatis.*"additivity="true">

  10. <priorityvalue="debug"/>

  11. <appender-refref="STDOUT"/>

  12. logger>

  13. <loggername="log4j.logger.java.sql.*"additivity="true">

  14. <priorityvalue="debug"/>

  15. <appender-refref="STDOUT"/>

  16. logger>

  17. <root>

  18. <levelvalue="debug"/>

  19. <appender-refref="STDOUT"/>

  20. root>

  21. log4j:configuration>