最近在做一个项目,本来是零基础的(以前还没正式地做过),碰到一些只听说过但是没用过的技术:比如ibatis。ibatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQLMaps和Data Access Objects(DAO),同时还提供一个利用这个框架开发的JPetStore实例。 相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,ibatis 是一种“半自动化”的ORM实现。iBATIS需要开发人员自己来写sql语句,这可以增加了程序的灵活性,在一定程度上可以作为ORM的一种补充。程序设计人员应该结合自己的项目的实际情况,来选择使用不同的策略。iBATIS和Hibernate都做了映射,但iBATIS是把实体类和sql语句之间建立了映射关系,这种策略可以允许开发人员自己来写合适的sql语句,而Hibernate在实体类和数据库之间建立了映射关系,sql对于开发人员是不可见的,对于那些数据量非常大的应用,无法去优化sql语句。所以在实际应用中,应该根据不同的应用场景,来选择适合自己的框架.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<settings cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
errorTracingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="false" />
<typeHandler javaType="java.lang.String"
callback="..." /> 自己写
<sqlMap resource="config/ibatis/oracle/Fxsc.xml" />
<sqlMap resource="config/ibatis/oracle/Zrzj.xml" />
</sqlMapConfig>
以上是ibatis的配置信息,就是将xml(也就是写sql语句的文件)配置到SqlMapConfig里,类似初始化。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="Fxsc">
<typeAlias alias="fxsc" type="com.model.Fxsc" />
<resultMap id="getFxscResult" class="fxsc">
<result property="fxdlid" column="fxdlid" />
<result property="fxscid" column="fxscid" />
<result property="fxscname" column="fxscname" />
<result property="fxsccontent" column="fxsccontent" />
</resultMap> //resultMap是select语句查询时返回的结果集,而这些结果集均要写入com.model.Fxsc(里面的内容类似javabean,属性,get(),set())
<select id="getFxsc" resultMap="getFxscResult" parameterClass="map">
//"getFxsc"这个是dao.impl里定义的
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<settings cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
errorTracingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="false" />
<typeHandler javaType="java.lang.String"
callback="..." /> 自己写
<sqlMap resource="config/ibatis/oracle/Fxsc.xml" />
<sqlMap resource="config/ibatis/oracle/Zrzj.xml" />
</sqlMapConfig>
以上是ibatis的配置信息,就是将xml(也就是写sql语句的文件)配置到SqlMapConfig里,类似初始化。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="Fxsc">
<typeAlias alias="fxsc" type="com.model.Fxsc" />
<resultMap id="getFxscResult" class="fxsc">
<result property="fxdlid" column="fxdlid" />
<result property="fxscid" column="fxscid" />
<result property="fxscname" column="fxscname" />
<result property="fxsccontent" column="fxsccontent" />
</resultMap> //resultMap是select语句查询时返回的结果集,而这些结果集均要写入com.model.Fxsc(里面的内容类似javabean,属性,get(),set())
<select id="getFxsc" resultMap="getFxscResult" parameterClass="map">
//"getFxsc"这个是dao.impl里定义的
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="Fxsc">
<typeAlias alias="fxsc" type="com.model.Fxsc" />
<resultMap id="getFxscResult" class="fxsc">
<result property="fxdlid" column="fxdlid" />
<result property="fxscid" column="fxscid" />
<result property="fxscname" column="fxscname" />
<result property="fxsccontent" column="fxsccontent" />
</resultMap> //resultMap是select语句查询时返回的结果集,而这些结果集均要写入com.model.Fxsc(里面的内容类似javabean,属性,get(),set())
<select id="getFxsc" resultMap="getFxscResult" parameterClass="map">
//"getFxsc"这个是dao.impl里定义的
/*@Override public List findAll(Map map) { // TODO Auto-generated method stub return queryForList("getFxsc", map); }*/
以下就是自己写的sql语句了。
<![CDATA[ select distinct t.fxscid, t.fxdlid , t.fxscname, t.fxsccontent from xzfxsc t where 1=1 ]]> <dynamic prepend="and"> <isNotEmpty prepend="and" property="fxscid">t.fxscid=#fxscid# </isNotEmpty></dynamic> /*dynamic是动态查询用的,如果fxscid不是空的,后面就会and条件加上,参数是map传入的,也就是条件查询时需要用到 Map<String, Object> aa = new HashMap<String, Object>(); aa.put("fxdlid", id); */ </select> <insert id="insertFxsc" parameterClass="fxsc"> //插入,注意就是不管下面的参数有没有,表中的字段全部都要写上 insert into xzfxsc(fxscid,fxdlid,fxscname,fxsccontent) values(#fxscid#,#fxdlid#,#fxscname#,#fxsccontent#)</insert> <update id="updateFxsc" parameterClass="fxsc">//更新update XZFXSC setfxdlid=#fxdlid#,fxscname=#fxscname#,fxsccontent=#fxsccontent#where fxscid = #fxscid# </update> <delete id="deleteFxsc" parameterClass="fxsc">//删除delete fromXZFXSCwhere FXSCID = #fxscid#</delete> </sqlMap> 再看control public Object open(String id,String gwmc) throws Exception{ Map<String, Object> aa = new HashMap<String, Object>(); aa.put("fxdlid", id); aa.put("fxscname", gwmc); List<Fxsc> fxsc = (List<Fxsc>) fxscService.getFxscList(aa); Grid json = Util.ListToGrid(fxsc,"fxscid,fxscname,fxsccontent");//这是前台jsp页面传来的有几列,这些也都是在model里的,将其//组织成json格式然后输出 System.out.println(fr.zenexity.json.JSON.toJSON(json)); return json; }