这个例子是我在
http://www.developersbook.com/ibatis/iBatis-tutorials/iBatis-tutorials-2.php看的一个很好例子。
DROP TABLE IF EXISTS `test`.`trade`;
CREATE TABLE `trade` (
`trade_id` decimal(5,0) NOT NULL,
`side` varchar(10) NOT NULL,
`symbol` varchar(6) NOT NULL,
`shares` decimal(4,0) NOT NULL,
`price` decimal(4,0) NOT NULL,
`state` varchar(20) NOT NULL,
PRIMARY KEY (`trade_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
Trade.java
package com.developerbook.iBatis.domain;
public class Trade {
private long tradeId;
private String action;
private String symbol;
private long shares;
private double price;
private String state;
public long getTradeId() {
return tradeId;
}
public void setTradeId(long tradeId) {
this.tradeId = tradeId;
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
public String getSymbol() {
return symbol;
}
public void setSymbol(String symbol) {
this.symbol = symbol;
}
public long getShares() {
return shares;
}
public void setShares(long shares) {
this.shares = shares;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String toString() {
return ("TRADE " + tradeId + ": " + action + ", " + symbol + ", "
+ shares + " shares, $" + price + "/share (" + state + ")");
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName"
value="com.mysql.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://localhost:3306/test"/>
<property name="username"
value="root"/>
<property name="password"
value="billsxm"/>
</bean>
<bean id="sqlMap"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation">
<value>classpath:config/SqlMapConfig.xml</value>
</property>
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="tradingService"
class="com.developerbook.iBatis.service.TradeServiceImpl">
<property name="sqlMapClient" ref="sqlMap"/>
</bean>
</beans>
SqlMapConfig.xml
<?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 useStatementNamespaces="true"/>
<sqlMap resource="config/TradingSQLMap.xml"/>
</sqlMapConfig>
TradingSQLMap.xml
<?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="trading">
<typeAlias alias="trade" type="com.developerbook.iBatis.domain.Trade"/>
<cacheModel id="tradeCache" type="LRU" readOnly="true">
<flushInterval hours="24"/>
<flushOnExecute statement="trading.executeTrade"/>
<property name="cache-size" value="1000"/>
</cacheModel>
<resultMap id="tradeResult" class="trade">
<result property="tradeId" column="TRADE_ID"/>
<result property="action" column="SIDE"/>
<result property="symbol" column="SYMBOL"/>
<result property="shares" column="SHARES"/>
<result property="price" column="PRICE"/>
<result property="state" column="STATE"/>
</resultMap>
<select id="getTrade" parameterClass="long" resultMap="tradeResult" cacheModel="tradeCache">
SELECT
TRADE_ID,
SIDE,
SYMBOL,
SHARES,
PRICE,
STATE
FROM
TRADE
WHERE
TRADE_ID = #id#
</select>
<update id="executeTrade" parameterClass="long">
UPDATE
TRADE
SET
STATE = 'EXECUTED'
WHERE
TRADE_ID = #id#
</update>
<insert id="insertTrade" parameterClass="trade">
INSERT INTO
TRADE
(TRADE_ID,
SIDE,
SYMBOL,
SHARES,
PRICE,
STATE)
VALUES
(#tradeId#,
#action#,
#symbol#,
#shares#,
#price#,
#state#)
</insert>
</sqlMap>
ITrade.java
package com.developerbook.iBatis.service;
import java.sql.SQLException;
import com.developerbook.iBatis.domain.Trade;
public interface ITradeService {
public Trade getTrade(long tradeId)throws SQLException;
public void executeTrade(long tradeId)throws SQLException;
public void insertTrade(Trade trade)throws SQLException;
}
TradeServiceImpl.java
package com.developerbook.iBatis.service;
import java.sql.SQLException;
import com.developerbook.iBatis.domain.Trade;
import com.ibatis.sqlmap.client.SqlMapClient;
public class TradeServiceImpl implements ITradeService {
protected SqlMapClient sqlMap = null;
public void setSqlMapClient(SqlMapClient sqlMap){
this.sqlMap = sqlMap;
}
public void executeTrade(long tradeId) throws SQLException {
sqlMap.update("trading.executeTrade", tradeId);
}
public Trade getTrade(long tradeId) throws SQLException {
return (Trade)sqlMap.queryForObject("trading.getTrade", tradeId);
}
public void insertTrade(Trade trade) throws SQLException {
sqlMap.insert("trading.insertTrade", trade);
}
}
IBatisClient.java
package com.developerbook.iBatis.client;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.developerbook.iBatis.service.ITradeService;
public class IBatisClient {
/**
* @param args
*/
public static void main(String[] args) {
try{
System.out.println("Start IBatisClient...");
System.out.println("=====================");
//load spring beans
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"config/applicationContext.xml");
System.out.println("Classpath loaded...");
System.out.println("====================");
ITradeService service = (ITradeService) ctx.getBean("tradingService");
//get Trade
int tradeId=1;
System.out.println("BEFORE: "+service.getTrade(tradeId));
//update Trade
service.executeTrade(tradeId);
System.out.println("AFTER: "+service.getTrade(tradeId));
System.out.println("=====================");
System.out.println("Hurry , It is done.!");
}catch(Exception ex){
ex.printStackTrace();
}
}
}
分享到:
相关推荐
AppFuse 是一个由 Matt Raible 创建的开源项目,它为初学者提供了一个基础的 J2EE 框架,用于演示如何集成多个流行的技术,如 Spring、Hibernate、iBatis、Struts、xDcolet、JUnit、Taperstry 和 JSF 等。...
3 Android SqliteManager 源码.zip
内容概要:本文详细介绍了基于S7-200 PLC的煤矿排水系统智能控制方案,重点讨论了三台水泵(两台工作水泵和一台备用水泵)的联动与备援策略。系统通过超声波液位传感器实时监测水位,根据不同水位情况自动控制水泵的启停。具体而言,水位低时不启动水泵,水位介于中水位和高水位之间时启动1号水泵,水位超过高水位则启动1号和2号水泵共同工作。若1号或2号水泵出现故障,系统会自动启用3号备用水泵。此外,MCGS6.2组态画面用于实时监控水位和水泵状态,帮助操作员及时应对异常情况,确保矿井安全。 适合人群:从事煤矿自动化控制领域的技术人员、矿业工程管理人员及相关研究人员。 使用场景及目标:适用于需要提高煤矿排水系统自动化水平的场合,旨在提升矿井排水效率和安全性,减少人工干预,确保矿井生产安全。 其他说明:文中提到的技术方案不仅提高了排水系统的可靠性,还为未来的智能化矿山建设提供了有益借鉴。
scratch少儿编程逻辑思维游戏源码-灌篮之王.zip
scratch少儿编程逻辑思维游戏源码-飞翔马里奥(2).zip
scratch少儿编程逻辑思维游戏源码-火柴人大战 中世纪战争.zip
scratch少儿编程逻辑思维游戏源码-几何冲刺(2).zip
南京证券-低轨卫星互联网启动,天地一体通信迈向6G
nginx-1.20.1
sshpass-1.06-8.ky10.aarch
少儿编程scratch项目源代码文件案例素材-我的世界2D(更新北极).zip
通信行业专题研究:车载全息数字人——AI+Agent新场景,全息投影新方向-20231121-国盛证券-13页
内容概要:本文详细介绍了利用西门子S7-200 PLC和组态王软件构建的邮件分拣系统的具体设计方案和技术细节。首先,文中阐述了硬件部分的设计,包括光电传感器、传送带电机以及分拣机械臂的连接方式,特别是旋转编码器用于精确测量包裹位移的技术要点。接着,展示了PLC编程中的关键代码段,如初始化分拣计数器、读取编码器数据并进行位置跟踪等。然后,描述了组态王作为上位机软件的作用,它不仅提供了直观的人机交互界面,还允许通过简单的下拉菜单选择不同的分拣规则(按省份、按重量或加急件)。此外,针对可能出现的通信问题提出了有效的解决方案,比如采用心跳包机制确保稳定的数据传输,并解决了因电磁干扰导致的问题。最后,分享了一些现场调试的经验教训,例如为减少编码器安装误差对分拣精度的影响而引入的位移补偿算法。 适合人群:从事自动化控制领域的工程师或者对此感兴趣的初学者。 使用场景及目标:适用于需要提高邮件或其他物品自动分拣效率的企业或机构,旨在降低人工成本、提升工作效率和准确性。 其他说明:文中提到的实际案例表明,经过优化后的系统能够显著改善分拣性能,将分拣错误率大幅降至0.3%,并且日均处理量可达2万件包裹。
scratch少儿编程逻辑思维游戏源码-机械汽车.zip
内容概要:本文详细探讨了在连续介质中利用束缚态驱动设计并实现具有最大和可调谐手征光学响应的平面手征超表面的方法。文中首先介绍了comsol三次谐波和本征手性BIC(束缚态诱导的透明)两种重要光学现象,随后阐述了具体的手征超表面结构设计,包括远场偏振图、手性透射曲线、二维能带图、Q因子图和电场图的分析。最后,通过大子刊nc复现实验验证了设计方案的有效性,并对未来的研究方向进行了展望。 适合人群:从事光学研究的专业人士、高校物理系师生、对光与物质相互作用感兴趣的科研工作者。 使用场景及目标:适用于希望深入了解手征超表面设计原理及其光学响应机制的研究人员,旨在推动新型光学器件的研发和技术进步。 其他说明:本文不仅展示了理论分析和模拟计算,还通过实验证明了设计方法的可行性,为后续研究奠定了坚实的基础。
少儿编程scratch项目源代码文件案例素材-位图冒险.zip
少儿编程scratch项目源代码文件案例素材-校园困境2.zip
少儿编程scratch项目源代码文件案例素材-兔子吃萝卜.zip
scratch少儿编程逻辑思维游戏源码-海洋战争.zip