??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
略D一例,qx我们工作中要删除某条数据Q一般不是真?/span>delete掉,而是用一?/span>status标识Q?/span>status?/span>-1表示删除Q你写删除接口时完全可以q么写:
Class UserService{
private UserDao userDao;
public void deleteUser(User user){
user.setStatus(-1);
userDao.update(user);
}
}
q个逻辑其实执行的是更新操作Q但接口名仍?/span>deleteUserQ因为它提供的确实是删除“服务”Q调用接口时我只需要知道我调用q个接口时会删除对象Q至于它怎么实现Q我不着?/span>
Java中到处是指针引用Q习惯了使用c语言指针的程序员往往会ؕ用指针,而破坏了面向对象的思想Q比如,我要查询某个用户的密码,有h可能会这么写Q?/span>
Class UserService{
private UserDao userDao;
public void queryUserPasswd(int id,User user){
String passwd=userdao.getUserPasswd(id)
User.setPasswd(passwd);
}
}
q种写法在语法上没什么问题,也能得到正确的|但传?/span>user对象q来有些不妥了Q我要得到密码,传个用户的密码,只要l个id可以把密码q回l调用者了Q干嘛要让h再传个对象进来?
作ؓ一个项目经理,在工作过E中Q确实会遇到令h哭笑不得的接口,像上面那个删除接口吧,有h会这么写Q?/span>
Class UserService{
public void deleteUser(UserDao userDao ,User user){
user.setStatus(-1);
userDao.update(user);
}
}
q接口写得,让h怸着头脑了,我删除一?/span>user对象Q还要传?/span>userDaol你Q意思是你ؓ我提供服务,我还要给个工L你,q说不通吧Q?/span>
Java是纯_的面向对象语言Q写JavaE序时要时刻CQ你在ؓ别h提供服务Qؓ别h提供服务׃应该提出q多的附加要求。这个问题在使用MVC模式分层思想的时候体现得更加严重。在使用MVC模式开发的时候,往往整个项目分成几层:action层?/span>service层、数据库处理层(dao层){等Q每一层往往׃同的E序员编写,q时候要格外提醒自己在ؓ别h提供服务。在一个新目开始的时候往往会出C个问题:在增加某条数据时Q要对这条数据的字段q行验证Q不能ؓI或者长度过长等{,如果没有验证Ҏ抛错Q在分层~写接口Ӟ开发h员经常想q个验证应该在上层或者下层做吧,我这边得到的数据是正的Q最后导致谁都没做验证。只要你C了提?#8220;服务”的思想Q就不应该要求别人给你的数据是正的Q而是应该处理各种非正帔R题,保证用户l你的Q何数据你都能l出相应的返回,当然Q在实际的项目中目l理可能规定数据验证?/span>service层做?/span>
Android Adapter 是将数据l定?/span>UI 界面上的桥接cR?/span> Adapter负责创徏和显C每个项目的?/span>View和提供对下层数据的访问。支?/span>Adapterl定?/span>UI控g必须扩展Adapter View抽象cR创ql承?/span>AdapterView的控件和创徏新的AdaptercLl定它们是可能的?/span>
Android pȝ本n提供了两U现成的Adapter 供我们用?/span>
1.ArrayAdapterQ它是一个绑?/span>ViewCl对象的通用cR默认情况下Q?/span>ArrayAdapterl定每个对象?/span>toString值到layout中预先定义的TextViewI间上。构造函数允许用户用更加复杂的Layout或者通过重写getViewҎ来扩展类从而?/span>TextView的替代物
2.SimpleCursorAdapterQ它l定View?/span>Content Provider 查询q回的游标上。指定一?/span>XML layout定义Q然后将数据集的每一列的值绑定到layout中的一?/span>View
写自qAdaptercd现更多复杂的UI界面和数据绑?/span>
主要重蝲getCount ҎQ?/span>getViewҎ getItemҎ getItemIdҎQ?/span> 参数解析Q?/span>contextQ传入的上下?/span>Activity, items l定数据的列?/span>, resource layout布局ID, tags l定数据?/span>key, ids Item 中对?/span>key的资?/span>ID?/span> ?/span>getView中自定义Item里面的事件监听,自定义新的重载后的显C界面返?/span> convertView?/span> 如果需要用到父类SimpleAdapter 昄效果需要调?/span>super.getViewҎ?/span> convertView 赋倹{?/span>
再来看看equals()的?nbsp;
在java中有q两U情况存在:
1、用objectcM的equals()ҎQ这个是java中最初的equals()Ҏ
如果你自定义一个类AQƈ且没有去l承其他的类Q这时A中的equals()
的功能就是比较两者储存值的地址是否相同。因为所有的c都l承object
c,而objectcM有equals()q样的方?/span>
objectcM的equals()Ҏ的源代码如下Q?/span>
public boolean equals(object obj)
{
return this == obj;
}
从这D代码中Q我们可以再ơ确定,q种情况下的equals()Ҏ的功能是
比较两者储存值的地址?/span>
2、自定义一个类BQ但Bcȝ承了cc,而ccM的equals()Ҏ已经被重写过
了,q种情Ş需要具体情况具体分析了Q但大部分被重写的equals()?/span>
法所拥有的功能就是比较两者储存值的内容是否相同Q而不再是比较地址
了。比如:创徏一个String对象 String str1 = new String("1");
String str2 = new String("1");
q时str1.equals(str2)比较的就是str1和str2中储存值的内容是否相同
了,因ؓStringcM的equals()p重写了,但这q不意味着所有被重写
q的equals()Ҏ都是用来比较内容?因ؓ目前我所遇到的只有这U情
况,如果大家有兴可以去多研I研I?/span>
ȝ:"=="只有一U用法,而equals()有两U用法,只是所使用的环境不一栯已?/span>
ognl.OgnlException: target is null for setProperty(null, "x", [Ljava.lang.String;@28d320d6)
ognl.OgnlException: target is null for setProperty(null, "y", [Ljava.lang.String;@32a88bc2)
的解军_?/span>
Struts2
q个异常是在提交表单的时候发生的Q乍一看以为是Struts2cd转换的错误,但是E序中又压根儿没有用到Struts2的类型{换,而且前台面
index.jsp中也没有讄x,yq些参数Q且q个错误q不会媄响程序的正常q行Q找了很久,最后发现是提交按钮的缘故,提交按钮引用的是一个图片,
如下Q?/span>
<input id="submit" type="image" name="ssc" src="asserts/images/5.jpg"/>
׃表单提交中设|了name属性,所以struts2会进行接收相应的|查找它的set ?nbsp;getҎQ而action里面没有q个name值的Q所以才出现了如上错误。可以这样写Q?/span>
<input id="submit" type="image" src="asserts/images/5.jpg" />
name属性去掉即可?/span>
其实Q在struts.xml文g里可以配|?struts.devMode"属性?/span>
?br />struts.devMode = trueӞ使用struts在默认配|下对Q何提交到action的参数强刉要setterҎQhtml表单?br />据中有和action属性匹配不上的参数名时׃提示q样的信息。所以,在开发过E中这个属性设为trueq是很好的,它可以帮我们发现一些可能出C
又被我们忽视的问题,犯的“错误”多Q才能积累很多的l验?br />
转自癑ֺI间Q?/p>http://hi.baidu.com/gpsdreamer/item/544050ed0e00e4d0e1a5d4cd
1Q?nbsp;<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close">
W一个bean作ؓ配置q接数据库,讄DriverManager以及用户名密?/span>
2Q?nbsp;<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
W二个bean是选择SqlMapClientQƈ且填写该xml的\径:
XmlSqlMapClientBuilder xmlBuilder =new XmlSqlMapClientBuilder();
SqlMapClient sqlMap = xmlBuilder.buildSqlMap(reader);
3Q?nbsp;<bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
<property name="sqlMapClient">
<ref bean="sqlMapClient" />
</property>
</bean>
W三个beanQ?/span>SqlMapClientTemplate是SqlMapClient的封装类.
SqlMapClient中包含着session的管?
SqlMapClientTemplate用于session的封?以及异常的捕?
所以按照以上的推断来说.应该量使用SqlMapClientTemplate.
保证session以及Exception的正总及统一.
2. 然后是SqlMapClient的配|:
<sqlMap resource="sql/gpsData_sqlmap_mapping.xml"/>
配置gpsDatacM数据库的对应关系
3. q两个xml文g配置好以后就可以在自qDAOcM写相应的增删ҎҎ了?/span>
public class IbatisGpsDataDao extends BaseDao implements GpsDataDao{
…
}
该类集成了BaseDaoc,BaseDao提供?/span>SqlMapClientTemplate的对象操作,该对象正是在Spring beans中配|的。通过获得q个SqlMapClientTemplateQ进行增删改查的操作?/span>
例如下面的insertҎQ?/span>
public long insertGpsDataDo(GpsDataDo gpsdata) {
if(gpsdata == null){
throw new IllegalArgumentException();
}
return (Long) getSqlMapClientTemplate().insert("GpsData.insertGpsData",gpsdata);
}