用apt-get 安装 make提示“无法打开锁文件 /var/lib/dpkg/lock ”
# apt-get install vim
E: 无法对状态列表目录加锁(/var/lib/dpkg/),请查看您是否正以 root 用户运行?
出现这样的问题往往是因为无删除了这写文件!!
解决方法:
建一个空文件并复制到相应的地方:
touch lock copy lock /var/lib/dpkg
再次apt-get install vim
又提示:E: 无法打开文件 /var/lib/dpkg/status - open
在touch一个status文件,再复制到相应的文件中即可。
前些时候一直在用ibatis做项目觉得用起来还是很舒服的至少来说用起来灵活不想hibernate那么死还经常出一些搞得人恶心的问题而且开发包还很多,hibernate我觉得还垃圾一点不好用。心血来潮在网上看了一下其实自己早就out了,人家ibatis都到3点几了而且还改了名字叫做mybatis。这个版本和之前的ibatis已经出现了很多的差别。下面是我自己学习的时候总结的。
1.以前用的parameterClass在mybatis中已经永不了了,mybatis里应该使用parameterType。另外resultMap里面也不能继续使用了改成了type
2.dynamic标签不能使用了,下面的配置在mybatis里是错的
<sql id="sqlwhere"> <dynamic> <isGreaterThan prepend="and" property="FPARENTID" compareValue="-1"> A.FPARENTID = #FPARENTID# </isGreaterThan> <isNotEmpty prepend="and" property="LOGINTOPIMAGE"> A.LOGINTOPIMAGE like #LOGINTOPIMAGE# </isNotEmpty> <isGreaterThan prepend="and" property="FID" compareValue="-1"> A.FID = #FID# </isGreaterThan> <isNotEmpty prepend="and" property="FNAME"> A.FNAME like #FNAME# </isNotEmpty> <isNotEmpty prepend="and" property="LOGINMIDDLEIMAGE"> A.LOGINMIDDLEIMAGE like #LOGINMIDDLEIMAGE# </isNotEmpty> <isNotEmpty prepend="and" property="VERSIONNUMBER"> A.VERSIONNUMBER like #VERSIONNUMBER# </isNotEmpty> <isNotEmpty prepend="and" property="MAJORTITLE"> A.MAJORTITLE like #MAJORTITLE# </isNotEmpty> <isNotEmpty prepend="and" property="LOGINTITLE"> A.LOGINTITLE like #LOGINTITLE# </isNotEmpty> <isNotEmpty prepend="and" property="MAJORMIDDLEIMAGE"> A.MAJORMIDDLEIMAGE like #MAJORMIDDLEIMAGE# </isNotEmpty> <isNotEmpty prepend="and" property="LOGINBOTTOMIMAGE"> A.LOGINBOTTOMIMAGE like #LOGINBOTTOMIMAGE# </isNotEmpty> <isNotEmpty prepend="and" property="MAJORTOPIMAGE"> A.MAJORTOPIMAGE like #MAJORTOPIMAGE# </isNotEmpty> <isNotEmpty prepend="and" property="LOGO"> A.LOGO like #LOGO# </isNotEmpty> <isNotEmpty prepend="and" property="LOGO"> A.ADDRESS like #ADDRESS# </isNotEmpty> <isNotEmpty prepend="and" property="LOGO"> A.FAX like #FAX# </isNotEmpty> <isNotEmpty prepend="and" property="LOGO"> A.PHONE like #PHONE# </isNotEmpty> <isNotEmpty prepend="and" property="LOGO"> A.ZIP like #ZIP# </isNotEmpty> <isNotEmpty prepend="and" property="LOGO"> A.EMAIL like #EMAIL# </isNotEmpty> <isNotEmpty prepend="and" property="containIds"> A.FID NOT IN ($containIds$) </isNotEmpty> </dynamic> </sql>
3.数据类型的声明和ibatis有了很大的差别,ibatis可以像下面这样写
insert into M_HEALTHSPECIALYTYPE(FCODE,FCHARGE,FTYPECONTENT,FID,FMARK) values (#FCODE:VARCHAR2#,#FCHARGE:VARCHAR2#,#FTYPECONTENT:VARCHAR2#,#FID#,#FMARK:VARCHAR2#)
在mybatis的话一般是这样弄的
insert into M_HEALTHSPECIALYTYPE(FCODE,FCHARGE,FTYPECONTENT,FID,FMARK) values (#{FCODE,jdbcType=VARCHAR},#{FCHARGE,jdbcType=VARCHAR},#{FTYPECONTENT,jdbcType=VARCHAR},#{FID},#{FMARK,jdbcType=VARCHAR})
4.mybatis现在已经没有SqlMapClient了,使用的则是SqlSession.在原来的基础上加了像selectMap,selectList,selectOne这样的方法,使用更方便了
5.加了一个叫映射器的新东西,只需要写出接口而不需要实现类就能够操作数据如
import java.util.List; import org.lxh.vo.HealthspecialytypeInfo; public interface HealthMapper { public List<HealthspecialytypeInfo> getRecordByList(HealthspecialytypeInfo info); }
在映射文件里要记得namespace写成接口的类全名,sql语句的id写成接口里的方法名就可以了
<select id="getRecordByList" parameterType="org.lxh.vo.HealthspecialytypeInfo" resultMap="resultMap"> select * from M_HEALTHSPECIALYTYPE where FCODE in <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach> </select>
调用的时候就像下面
HealthMapper m=ses.getMapper(HealthMapper.class); List<HealthspecialytypeInfo> record=m.getRecordByList(h);
就这样就可以直接进行数据的操作了,的确智能了很多
5.需要注意的是spring3.0一下的版本并不支持mybatis,下面是官方文档的描述
从spring3之后mybatis已经可以和spring整合了,最值得高兴的是mybatis网站也提供了整合的用户指导,写的很具体直接就可以拿来用。还有一些特色的功能如直接批量插入数据,hibernate还是那死样子,在这里力挺mybatis。更多的东西大家去看开发文档,我就不多说了。
我自己也写了个整合的小例子,大家去我的资源里下载就好了。
TopCoder使用包括 C#、Java、C++、Ruby、Flex、JavaScript 在内的多种语言,尽管这语言有较大差别,但开发过程都差不多。本指南将由始至终涵盖整个开发过程。在不同语言差别较大的地方,会分别给出相应的说明。
1.2 开发流程总体上说,TopCoder组件的开发流程比较简单。你的任务就是按照组件设计文档开发组件并交由评审团(DesignReview Board)进行审查。通过审查称为优胜者之后,你还需要根据审查团提出的整改要求对组件进行修正,最后通过终审(Final Review)就行了。
TopCoder 提供了很多关于设计和开发流程的文档(对于某些简单直接的组件,设计这一步骤会被省略,此时你获得的会是需求说明书而不是设计文档。),你需要仔细阅读软件开发文档。包括成员指南(Member Guide)、开发设计(DevelopmentDesign)、审查记分表(Review Scorecard),这些文档告诉你到底要提交些什么。
1.3 所需软件你可以在任何环境下编写你的代码,但是我们依靠特定的技术构建组件并对其打包;另外,我们还需要每种语言的公共库,具体包的列表如下,除此之外还有一个UML公用工具。
1、C#:
(1) Microsoft .NETFramework v3.5:如果你喜欢用C#进行开发, 你可能已经安装了此工具。
(2) NUnit:这个框架可以让你简单快速的测试你的代码,有关测试的内容后面会详细描述。
(3) MSBuild:微软和VS的构建工具,有关构建的内容后面会详细描述。
(4) TC CodeDocumenter:一个编写API文档命令行工具,类似 JavaDoc。
(5) NCover:代码覆盖工具。
2、Java:
(1) SunJAVA SE 5.0+:Java开发要注意使用最新的JDK。
(2) Ant:一种执行可定制、可扩展构建脚本的工具,你需要用它编译工程和向 TopCoder 提交代码,后面会细说构建脚本的内容。
(3) JUnit:用于单元测试,具体内容后面说。
(4) SunJAVA EE:只有少数组件需要用到这个包,具体看需求文档。
(5) Checkstyle:一种格式检查工具,提交之前最好用他来检查一下你的代码。
(6) Cobertura:Java代码覆盖分析工具,用来检查你的代码被单元测试覆盖的百分比。
确保系统环境符合MSBuild/Ant 的需求,注意xUnit的安装位置,随后的构建脚本配置里面会说明。
1.4 注册参加开发竞赛之前,你必须在 TopCoder公司网站上注册。注册之后,你不仅可以提交你的设计和开发作品, 而且可以参加其他 TopCoder 竞赛,包括算法(algorithms),概念模型(conceptualization),规格说明书(specification),架构(architecture),应用装配(application assembly)以及测试(testing)还有马拉松赛(marathon),点击这里注册。
2 挑选项目(Picking A Project)项目选题是竞赛取胜的第一步,你可以在这里找到所有开放的程序开发竞赛。该页面中,你可以看到项目的开放情况、注册、提交的截止日期。这些日期非常重要,你必须在注册截止日期(Registration End)前确定你对哪个组件感兴趣,并在提交截止日期(Submitby)前提交你的作品,包括测试文件和文档。
作品第一名获得奖金,第二名获得一半奖金,评分标准分值名为“DR point”,有关他的更多内容看这里。
2.1 项目细节点开你感兴趣的项目,你会看到有关这个项目的更多细节。包括项目信息、文档链接、论坛链接、报酬信息以及综合时间点。
2.2 决定是否参加找到感兴趣的项目之后,第一步你要详细查看项目设计文档,最简明的文档就是需求规格说明书(Requirements Specification),它包含这个项目会用到的各种技术的信息(如SSL,LDAP,ODBC 等)。如果你依然兴趣不减,可以继续阅读组件说明书(Component Specification),它包含了实现这个组件的更多细节信息。当然,还有其它一些文档,但是这两个文档对决定一个项目是否适合你是最重要的。
选择一个项目之前,请确保你有足够的时间完成它。项目期间,你是否有其他的安排和工作要做?另外,项目可能会用到一些你并不熟悉的技术。你知道在C#中怎样使用数据库连接吗?你知道怎样使用java.lang.ref 类库吗?你充分了解完成这个组件所需要的网络协议吗?最好重新阅读一下组件说明书的1.2、1.3 节和第二节,确保你对所用到的技术比较了解。
2.3 项目注册现在,你发现你可以胜任并有时间去完成某个项目,就可以注册了。点击项目细节页面的注册链接进行注册。