ssh的经验
1.struts值栈分两个区域,root (push object) context (put map )
2.insert 完成后重定向到list
3.upate,先获取对象,再把修改好的值,更新到数据库,如果不获取,那么没有得到修改的值,就会改成0 ,“”等等
4.分页:做两件事,总记录数和当前页的记录
5.EL:总是从栈顶取值,假如page在栈顶,那么取links,只要${links}
6.struts有属性驱动
7.form提交:name value
8.在子父关系的记录中,增加排序号的话,那么在递归删除不会有问题,只要删除时保证叶子在前面
9.一对一级联,用户分两张表:用户表和用户扩展信息表,由用户表级联用户扩展信息表,基于主键的1对1,userinfo_id,既是主键也是外键(貌似不需要设置外键),user.hibernate配置:<one-to-one name="userinfo" class="Userinfo" cascade="all"></one-to-one>
10.hibernate配置文件,如何给属性复杂值:
给出用户表配置:
<hibernate-mapping package="com.oetennis.jk.domain">
<class name="User" table="user_p">
目标是给属性dept一个Dept对象
<many-to-one name="dept" class="Dept" column="DEPT_ID">
alter table USER_P add constraint FK_Reference_24 foreign key (DEPT_ID) references DEPT_P (DEPT_ID)
猜测:<name="dept" class="Dept">说明是给属性dept一个Dept对象,column="DEPT_ID"指的是USER_P.DEPT_ID,根据外键约束拼出select * from DEPT_P where DEPT_ID=xx.
目标是给属性userinfo一个Userinfo对象
<one-to-one name="userinfo" class="Userinfo" cascade="all"></one-to-one>
alter table USER_INFO_P add constraint FK_Reference_23 foreign key (USER_INFO_ID) references USER_P (USER_ID)
猜测:cascade="all" 说明根据主键去找外键,主键为USER_P (USER_ID),class="Userinfo"表示到USER_INFO_P去找外键,foreign key (USER_INFO_ID) references USER_P (USER_ID)表示反向找到外键USER_INFO_ID,拼出sql语句select * from user_info_p where USER_INFO_ID=xx
总结:目的是拼出sql语句,要确定到哪张表根据哪一列去找,如果根据外键去找,那要写上column="外键",如果根据主键去找,那要写上cascade="all"
11.用户表和用户扩展信息表的id要分配的
<class name="User" table="user_p">
<id name="id" column="USER_ID">
<generator class="assigned"></generator>
</id>
<class name="Userinfo" table="USER_INFO_P">
<id name="id" column="USER_INFO_ID">
<generator class="assigned"></generator>
</id>
12.让数据库默认值起作用:在<class name="User" table="user_p">,添加dynamic-insert="true"
dynamic-update="true",mysql也许用不着这样
13.不必建立外键关系也能级联删除:
<class name="User" table="user_p">
<one-to-one name="userinfo" class="Userinfo" cascade="all"></one-to-one>
</class>
当删除user时,会删除userinfo,不必建立外键关系(alter table USER_INFO_P add constraint FK_Reference_23 foreign key (USER_INFO_ID) references USER_P (USER_ID) on delete restrict on update restrict;)
因为user对象中包含userinfo对象,userinfo对象中包含userinfo_id,就能根据主键删除userinfo
14.向oracle插入 更新默认值时,在映射文件中加入
<class name="Contract" table="CONTRACT_C" dynamic-insert="true" dynamic-update="true">,
否则会报sql异常,null之类的
15.如果要累计,像总金额,设置初始值为0,否则插入null.
16.struts2具有同名的一组属性提交,以逗号空格来分隔。
17.Quqrtz实现调度时,比如每10秒输出一次,但tomcat出现两次,修改tomcat的server.xml :
<!--<Context docBase="jk_web" path="/jk_parent" reloadable="true" source="org.eclipse.jst.jee.server:jk_web"/>-->
18.eclipse配置scheme约束:好处是在写该约束的xml标签时能提示相关信息
windows-->preference-->xml-->xml catalog-->
19.eclipse同时复制包名和类名:
20.A类想要使用B 类,在A类中注入B类就行:
private EpService epService;
public void setEpService(EpService epService) {
this.epService = epService;
}
<jaxws:client id="exportClient" address="http://localhost:8080/jk_export/ws/export?wsdl" serviceClass="cn.itcast.export.webservice.EpService"></jaxws:client>
<bean id="exportAction" class="com.oetennis.jk.action.cargo.ExportAction" scope="prototype">
<property name="epService" ref="exportClient"></property>
</bean>
21.解决jar包冲突:例如出现这样的问题
java.lang.NoSuchMethodError: org.apache.ws.commons.schema.XmlSchemaCollection.getExtReg()Lorg/apache/ws/commons/schema/extensions/ExtensionRegistry;
右键xmlschema
22.fastJson:
@JSONField(name="products") 改名字
private Set<ExportProduct> exportProducts; //报运下的货物
@JSONField(serialize=false) 该字段不参与转换
23.freemarker:替换
24.codemachine改变数据库时,改两处:
1.
2.25.mysql 与oracle互转:
1.
2.
3.hql语句会不一样