iBatis 操作数据库【设置查询条件】,简单例子之三

 <select id="getOrder" parameterClass="java.util.Map" resultMap="orderMap">
  <![CDATA[
   select id,order_number,customer_id from t_order
  ]]>
  <dynamic prepend="where">
   <isNotEmpty prepend="and" property="p1">
    (id = #p1#)
   </isNotEmpty>
  <!--
   <isNotEqual prepend="and" property="p1" compareProperty="p1" compareValue="0">
    (id = #p1#)
   </isNotEqual>
   -->
   <isNotEmpty prepend="and" property="p2">
    (order_number like #p2#)
   </isNotEmpty>
  </dynamic>  

注意:这里是通过动态的方法加载查询条件,我这里验证了,动态加载支持map基本类型,如上面设置一个map,然后可以在动态配置文件中,得到map中各个键值所对应的值。

 

当然也可以用类类型,如parameterClass=“bean.order”等也是可以的。 </select>

 

 

测试例子:

package servlet;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Reader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import bean.Order;

import bean.User;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.engine.builder.xml.XmlSqlMapClientBuilder;

public class OperateIBatis extends HttpServlet {

 private Logger logger = Logger.getLogger(OperateOrder.class);
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doPost(request, response);
 }

 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setCharacterEncoding("UTF-8");
  request.setCharacterEncoding("UTF-8");
  response.setContentType("text/html;charset=UTF-8");
  PrintWriter out = response.getWriter();
  
  XmlSqlMapClientBuilder xsmcb = new XmlSqlMapClientBuilder();
  try {
   Reader reader = Resources.getResourceAsReader("sql-map-config.xml");
   SqlMapClient smc = xsmcb.buildSqlMap(reader);
   smc.startTransaction();


   Map<String,Object> map = new HashMap<String,Object>();
   map.put("p2", "Insert123455789");

 

 


   Order to = new Order();
   to.setId(0);
   to.setOrderNumber("%Insert123455789%");

 

 


   Iterator<Order> i = (Iterator<Order>) smc.queryForList("bean.getOrder", map).iterator();
   while(i.hasNext()){
    out.println("<br>===========================================<br>");
    Order o = i.next();
    out.println(o.getOrderNumber() + ">>" + o.getCustomer().getName() + ">>" + o.getCustomer().getSex() + ">>" + o.getCustomer().getHomeAddress().getName());
   }
   smc.commitTransaction();
  } catch (Exception e) {
   logger.debug("读取IBatis配置文件失败",e);
  }
 }
}

 

 

运行结果:

2010-06-22 10:00:37,437 [http-8080-1] DEBUG [com.ibatis.common.jdbc.SimpleDataSource] - Created connection 6209433.
2010-06-22 10:00:37,437 [http-8080-1] DEBUG [java.sql.Connection] - {conn-100009} Connection
2010-06-22 10:00:37,437 [http-8080-1] DEBUG [java.sql.PreparedStatement] - {pstm-100010} PreparedStatement:        select id,order_number,customer_id from t_order      where                (order_number like ?)           注意这一句。
2010-06-22 10:00:37,453 [http-8080-1] DEBUG [java.sql.PreparedStatement] - {pstm-100010} Parameters: [Insert123455789]
2010-06-22 10:00:37,453 [http-8080-1] DEBUG [java.sql.PreparedStatement] - {pstm-100010} Types: [java.lang.String]
2010-06-22 10:00:37,453 [http-8080-1] DEBUG [java.sql.ResultSet] - {rset-100011} ResultSet

动态加载的属性,可以查找dtd文档:


<!ELEMENT dynamic (#PCDATA | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*>
<!ATTLIST dynamic
prepend CDATA #IMPLIED
>

<!ELEMENT isNotNull (#PCDATA | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*>
<!ATTLIST isNotNull
prepend CDATA #IMPLIED
property CDATA #IMPLIED
>

<!ELEMENT isNull (#PCDATA | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*>
<!ATTLIST isNull
prepend CDATA #IMPLIED
property CDATA #IMPLIED
>

<!ELEMENT isNotPropertyAvailable (#PCDATA | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*>
<!ATTLIST isNotPropertyAvailable
prepend CDATA #IMPLIED
property CDATA #REQUIRED
>

<!ELEMENT isPropertyAvailable (#PCDATA | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*>
<!ATTLIST isPropertyAvailable
prepend CDATA #IMPLIED
property CDATA #REQUIRED
>

<!ELEMENT isEqual (#PCDATA | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*>
<!ATTLIST isEqual
prepend CDATA #IMPLIED
property CDATA #IMPLIED
compareProperty CDATA #IMPLIED
compareValue CDATA #IMPLIED
>

<!ELEMENT isNotEqual (#PCDATA | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*>
<!ATTLIST isNotEqual
prepend CDATA #IMPLIED
property CDATA #IMPLIED
compareProperty CDATA #IMPLIED
compareValue CDATA #IMPLIED
>

<!ELEMENT isGreaterThan (#PCDATA | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*>
<!ATTLIST isGreaterThan
prepend CDATA #IMPLIED
property CDATA #IMPLIED
compareProperty CDATA #IMPLIED
compareValue CDATA #IMPLIED
>

<!ELEMENT isGreaterEqual (#PCDATA | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*>
<!ATTLIST isGreaterEqual
prepend CDATA #IMPLIED
property CDATA #IMPLIED
compareProperty CDATA #IMPLIED
compareValue CDATA #IMPLIED
>

<!ELEMENT isLessThan (#PCDATA | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*>
<!ATTLIST isLessThan
prepend CDATA #IMPLIED
property CDATA #IMPLIED
compareProperty CDATA #IMPLIED
compareValue CDATA #IMPLIED
>

<!ELEMENT isLessEqual (#PCDATA | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*>
<!ATTLIST isLessEqual
prepend CDATA #IMPLIED
property CDATA #IMPLIED
compareProperty CDATA #IMPLIED
compareValue CDATA #IMPLIED
>

<!ELEMENT isEmpty (#PCDATA | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*>
<!ATTLIST isEmpty
prepend CDATA #IMPLIED
property CDATA #IMPLIED
>

<!ELEMENT isNotEmpty (#PCDATA | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*>
<!ATTLIST isNotEmpty
prepend CDATA #IMPLIED
property CDATA #IMPLIED
>

<!ELEMENT isParameterPresent (#PCDATA | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*>
<!ATTLIST isParameterPresent
prepend CDATA #IMPLIED
>

<!ELEMENT isNotParameterPresent (#PCDATA | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*>
<!ATTLIST isNotParameterPresent
prepend CDATA #IMPLIED
>

<!ELEMENT iterate (#PCDATA | iterate | isParameterPresent | isNotParameterPresent | isEmpty | isNotEmpty | isNotNull | isNull | isNotEqual | isEqual | isGreaterThan | isGreaterEqual | isLessThan | isLessEqual | isPropertyAvailable | isNotPropertyAvailable)*>
<!ATTLIST iterate
prepend CDATA #IMPLIED
property CDATA #IMPLIED
open CDATA #IMPLIED
close CDATA #IMPLIED
conjunction CDATA #IMPLIED
>

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值