Spring完全学习文档(ssh框架)

IOC和AOP
1.搭建spring:(1)添加jar包(2)设置配置文件(3)
2.获取配置文件:
  AplicationContext apct=new ClassPathXmlApplicationContext("bean.xml");
  service=apct.getBean("获取一个bean");

IOC配置和应用
一,xml配置
1.注入方式
  (1)setter   @Resource
  (2)构造方法注入
  (3)结构注入
  Xml:<bean id="需要注入的名称(name)" class="">
     </bean>
     <bean id="" class="">
         <property name="名称" ref="引用名称"/>
         <constructor-arg>//构造方法的注入
             <ref bean="引用注入的名称(name)"/>
         </constructor-arg>
     </bean>
2.bean的scope:singleton(单例,一直都是一个对象),prototype(每声明一次将获取不同的对象),request,session,global session
3.集合注入:
  参考相关文档//set,list,map 的注入
  <property name="set">
     <set>
       <value></value>
       <value></value>
      </set>
  </property>
4.简单属性注入:<property name="属性名" value="值"/> 
5.自动装配:
  (1)在<bean标签上 autowire="(byName,byType….)"  默认按byName(按名字装配) byType(按类型来装配,如果同一类型有两个时将报错)
  (2)在beans标签上 default-autowire="byName"  指定全局的默认装配方式
6.生命周期
  <bean  lizy-init="true"  表示在用到时才会初始化该bean,而在启动服务器时并不进行初始化()
  <bean init-method="初始化加载的方法" destroy-method="结束的方法"

二,Annotation配置
1.修改bean.xml配置文件加入xmlns命名空间和<context:annotation-config/>
2.自动装配: 在相应的属性上注解 @Autowired  @Qualifier(name="指定bean.xml中的bean的id")
  example:
 (1) @Autowried
  public void setName(@Qualifier("name")String name){
  }
  @Required  //表示必须要写的方法,在初始化时将检查该项
  (2) @Resource(name="注入名") //重要
      在配置文件中设置:
      <context:component-scan base-package="指定需要查询的包"/> //使用该项将自动在包下面去查找
      在需要注入的类中注解:@Component(value="注入名")
      (还存在其他的注解:@Repostory,@Service,@Cntroller)
3.生命周期
  @Scope("prototype/singleton")  //生存范围
  构造完成之后:@PostConstruct  相当于xml中的init-method,指加载该类时执行的方法
  @PreDestroy 容器销毁之前执行的方法,相当于xml中的destroy-method.

面向切面编程(AOP)
一,Annotation配置AOP
1.添加日志逻辑

2.添加xmlns命名空间,在添加配置<aop:aspectj-autoproxy/>  //使用aspectj注解
  (aspectj是一个专门用来产生代理(面向AOP)的框架)
 
  在切面类上配置注解 @Aspect @Component, 在方法上配置 @Before(植入点语法)
  植入点语法:
  例子:execution(public void cn.bywei.dao.impl.UserDaoImpl.save(cn.bywei.model.User))
       execution(* cn.bywei.dao.impl.*.*(*))
  JoinPoint  连接点
  PointCut  
  Aspect   切面
  Advice   切面上的逻辑(@before,@after),加在切入点上的建议
  Target  被代理的对象,把我们的逻辑植入的对象
  Weave   植入
   (1)@Pointcut("execution(* cn.bywei.dao.impl.*.*(*))")
      public void myMethod(){};
      @Before("myMethod()")
   (2)@After    //
   (3)@AfterThrowing  //当抛异常时
   (4)@Around("myMethod()")
      public void around(ProceedingJoinPoint pjp){
        pjp.proceed();
      }
二,xml配置AOP

 

数据源配置
1.dpcp 
  (1)直接在文件中配置数据库连接信息dbcp.BasicDataSource
  (2)配置一个
      <bean class="***.PropertyPlaceholderConfigurer">//通过占位符配置
        <property name="locations">
              <value>classpath:jdbc.properties</value>
       </property>
      </bean>
   dataSource中通过占位符来配置读取 jdbc.properties文件中的信息.
2.c3p0
3.proxool

Spring和Hibernate整合
1.建立SessionFactory
  在 LocalSessionFactoryBean中不支持Annotation
  而 可以使用 AnnotationSessionFactoryBean 来支持Annotation
  <property name="dataSource" ref="dataSource"/> //注入属性
 
  //配置需要注解的实体类
  (1)<property name="annotatedClasses">
       <list>
         <value>cn.bywei.model.User</value>
       </list>
   </property>

  (2)自动扫描包下面的实体类
    <property name="packageToScan">
       <list>
         <value>cn.bywei.model</value>
       </list>
    </property>
 
  //指定Hibernate的配置信息
  <property name="hibernateProperties">
     <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
        <prop key="hibernate.show_sql">true</prop>
     </props
  </property>
2.aop主要使用在声明式事务管理
  Annotation:
  (1)在xml配置文件中添加命名空间
     添加事务管理 <tx:annotation-driven transaction-manager="txManager"/>
     添加<bean id="txManager" class="*****.HibernateTransactionManager">
                 <property name="sessionFactory" ref="sessionFactory"/>
         </bean>
     在一个方法上加事务:@Transactional
   Xml:
   

3.HibernateTemplate
  <bean id=
"hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
     <property name="sessionFactory" ref="sessionFactory"/>
  </bean>
  使用:
   hibernateTemplate.save(User);
   hibernateTemplate封装了一系列的方法.
   callback() –回调
4.
  @Component
  public class SuerDao extends HibernateDaoSupport {
     @Resource("sessionFactory")
     public void setSuperSessionFactory(SessionFactory sessionFactory){
       super.setSessionFactory(sessionFactory);
     }
  }
  this.getHibernateTemplate().save(实体类);

5.初始化bean
  配置
  <listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  引入配置文件:
   <contenxt-param>
      <param-name>contextconfig</param-name>
      <param-value>claspah:beans.xml</param-value>
  </context-param>
6.使用load时,配置把session打开到视图层
  <filter>
     <filter-name>openSessionInView</filter-name>
     <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInView</filter-class>
  </filter>
  <filter-mapping>
************</*****

7.中文问题
  <filter>
        <filter-name>encoding</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter>
        <init-param>
              <param-name>encoding</param-name>
              <param-value>GBK</param-value>
        </init-param>
  </filter>
  <filter-mapping**************
********</***********

本文由 程序员百味 http://www.bywei.cn/blog 编写

 

Hibernate完全学习文档(ssh框架)

1.Hibernate引用jar文件,建立hibernate.cfg.xml,并配置好改文件.
2.方言:<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
3.使用xml建立Hello world!
(1)xml配置映射实体类:(Class.hbm.xml)
  <class name="Class">
    <id name="id"></id>  <!–主键–>
    <property name="age"></property> <!–属性–>
  </class>
(2)在hibernate.cfg.xml中配置:<mapping resource="cn/bywei/model/Class.hbm.xml"/>
(3)使用Session
   Configuration cfg=new Configuration();
   SessionFactory cf=cfg.configure().buildSessionFactory();
   Session session=sf.openSession();
   session.beginTransaction();  
   session.save(model);
   session.getTransaction().commit();
   session.close();
   sf.close();

4.使用Annotation建立HelloWorld!
jpa:javax.persistence.Entity;(JPA是一套非常好的标准)
(1)建立一个Model类,使用注解 @Entity标识实体类   @Id 标识主键 @GenertedValue 标识自动增长列
(2)在hibernate.cfg.xml中配置:<mapping resource="cn.bywei.model.Class"/>
(3)使用Session:
  Configuration cfg=new AnnotationConfiguration();
  SessionFactory sf=cfg.configure().buildSessionFactory();
  Session session=sf.openSession();
  session.beginTransaction();
  session.save(Model);
  session.getTransaction().commit();
  session.close();
  sf.close();
———小技巧———-
1.使用注解@提示:设置 content Assist

————————-
5.O/R Mapping 面对对象的操作

Hibernate.cfg.xml基础配置
1.<property name="hbm2ddl.auto" >create/update/create-drop/validate</property>自动创建表
2.显示sql语句<property name="show_sql">true</property>
3.格式化sql语句<property name="format_sql">true</property>
———小技巧———-
1.搭建日志环境slfj logfj
2.搭建测试环境 @Test 标识测试方法 @BeforeClass执行前调用的方法@AfterClass
————————-
4.Annotation:在Model中指定实体类所对应的数据库Table:@Table(name="tableName")
  Xml:<class name="table" table=""…….
5.字段名和属性名不同时:Annotation:@Column(name="columnName")
6.指定不可存储到数据库中的属性:Aannotation:@Transient
7.格式化日期精度 @Temporal(TemporalType.DATE) 可以把日期或者日期和时间存储到数据库中
8.映射枚举类型:
  public enum Title{
     A,B,C
  }
  private Title title;

  @Enumerated(EnumType,STRING)    //枚举
  public Title getTitle(){
     ******
  }
9.ID的生成策略
  xml:<id name="id">
          <generator class="uuid"></generator>  //class=uuid 标识 字符 native 设置(sqlserver)自动增长列,squence (Oracle中标识列),auto_increamt(mysql)

      </id>
  Annotation:@generatedValue auto(相当于xml中的active)
             当不使用Oracle时,可以设置@GeneratedValue(startegy=GenerationType.IDENTITY)  设置id的生成策略(sqlerver,mysql)
  @sequenceGenerator(name="标识名字",sequenceName="数据库中的sequence名字") 指定Oracle生成的sequence名字
  @TableGenerator 生成主键策略
  @TableGenerator(
   name="",
   table="GENERATOR_TABLE",
   pkColumnName="key",
   valueColumnNamne="",
   pkClumnValue="",
   allocationSize=1
  )
10.联合主键(id,name)作为联合主键
   在类中:
   public class pk implements Serializable{
     private int id;
     private String name;
   }
   //@Override equals 和hashcode
   //关系到虚拟内存所以需要序列化
   //为了判断id 和name和传递过来的是相等的,所以需要@Override equals
   public class lianhe{
     private pk pk;
   }
(1)xml中配置:
   <composite-id name="pk" class="****">
       <key-property name=""/>
       <key-property name=""/>
   </composite-id>
(2)Annotation的配置:
  -把主键类(pk)注解为@Embeddable,并且把主键的属性注解为@Id
    -把主键的属性注解为@EmbeddedId  表示嵌入的主键id
    -直接在Entity上注解@IdClass(PK.class) 并在主键id,name上注解@Id

核心开发接口
1.读取配置:
  SessionFactory sf=new AnnotationConfiguration().configure("hibernate.cfg.xml").buildSessionFactory();
  Session session=sf.getCurrentSession(); //从上下文(在配置文件中设置current_session_context_class–取值:jta,thread,managed,custom.Class)查找,如果有就获取Session,没有就创建新的Session.
  //-用于事务的边界  -事务提交时自动Close
  //Session session=sf.openSession();//永远是创建一个新Session
  session.beginTransaction();
  session.save(Entity);
  session.getTransaction().commit();
2.对象的三种状态
  (1)Transient  刚刚new出来,内存中有对象,但无id
  (2)Persistent  内存中有id,在于Session中,数据库中也存在id
  (3)Detached   Session已经Close没有了Id,数据库中存在id
3.Hibernate的CRUD
  (1)save()  对象的三种状态
  (2)delete()
  (3)load() 和 get() 
     -load() 生成一个对象代理,需要用到的时候才会调用,
     -get() 直接读取数据
  (4)update()  //设置部分字段不更新@Column(updatable=false)
  (5)saveOrUpdate()
  (6)clear() 清除Session
  (7)flush() 让缓存与数据同步  session.setFlushMode(FlushMode.COMMIT)设置flush的同步时间
4.自动建表
  (1)使用hibernate.cfg.xml中的配置自动建表
  (2)使用程序控制:new SchemaExport(new AnnotationConfiguration().configure()).create(显示sql-true/false,是否执行到数据库-true/false);

关系映射:
1.一对一
  a)单向 一对一单向外键关联:在一方设置另一方的引用(数据库表中设置为外键关联)
         Annotation: 在引用上注解:@OneToOne  @JoinColumn(name="pk_id")设置引用的外键id名称
         xml:<many-to-one name=""  column="" unique="true"/>
         一对一单向主键关联:
         Annotation:在引用上设置@PramaryKeyJoinColumn(hibernate3.2好像有点小bug)
         xml:****
  b)双向 一对一双向外键关联:在两方都有对方的引用,双方都设置:@OneToOn
e,其中一方还需设置@OneToOne(mappedBy="另一方的引用名称")
         一对一双向主键关联:@OneToOne @PrimaryKeyJoinColumn
         xml:****
  c)联合主键:@JoinColumns
  d)组件映射:在数据库中配置为一张表,把一方设置为另一方的一部分,在引用上设置:@Embedded (表示作为这张表的一部分嵌入到)
2.一对多 多对一
  a)多对一的单向:
    Annotation:多指向一(@ManyToOne)
    xml:<many-to-one name="属性名" column="生成的外键关系名"/>
  b)多对一的双向:
    Annotation:在多指向一设置@ManyToOne,在一指向多设置@OneToMany(mappedBy="多的一方的关系名称")
    xml:一<one-to-many class="" column="和多的一致"/> 多<many-to-one name="" column="和一的一致"/>
3.多对多
  a)多对多的单向关联
    private Set<**> **=new HashSet<**>();//设置对方的引用
    Annotation:一方@ManyToMany  @JoinTable(name="中间表名",joinColumns={@JoinColumn(name="对应自己的表的关系名称")}inverseJoinColumns={,@JoinColumn(name="另外一张表的关系名称")}) 
    xml:一方
        <set name="属性名" table="数据库中间表名" >
            <key column="指向自己的表的关系名"/>
        <many-to-many class="" column="指向另外一张表的关系名"/>
        </set>
  b)多对多的双向关联
    private Set<**> **=new HashSet<**>();
    //做好单向关联后
    Annotation:使用注解@ManyToMany(mapedBy="另外一类(多)中的引用名称")
    xml:在另一方设置<many-to-many class="" column=""/>

4.关联关系中的CRUD
(1)保存时注意关联
   使用Annotation设置级联操作:在指向另一类的@关系上设置(cascade={casadeType.ALL})//表示对所有的CRUD都进行级联操作
   在双向关系中需要设置好双向关联
(2)加载数据  fetch主要影响get/load
   (cascade={casadeType.ALL},fetch=FetchType.EAGER) //FetchType取值(EAGER,LAZY)
(3)更新数据时 先做load,再设值
(4)删除数据时 注意casade的设置问题,建议使EJB QL,HQL

5.集合映射(了解)
  Set  参考多对多关系映射中(常用)
  List 雷同Set(指定排序时@OrderBy("默认Id 或者 属性 asc/desc"))
  Map  在设置Set的基础上设置@MapKey(name="map中使用哪个字段作为key") 
  //里面不能装载基础类型

6.继承映射(了解)
  (1)设计为一张表(父类和子类放在一张表中,使用一个标识列标识是哪个对象(type))
  (2)设计为多张表(父类一张,子类设计为分表)
  (3)设计一张共有的属性,子类保存特有属性
  //实现方式可以查找

7.树状映射(重要)
  实体类设计:(parent表示父项)
  id,name,Set<parent>,parent
  在parent上@ManyToOne @JoinColumn(name="parent_id")
  在Set上@OneToMany(mappedBy="parent")
  –树状结构的打印

查询语言: NativeSQL(本地的sql语言)>HQL(hibernate query language)>EJB QL(JP QL 1.0)>QBC(Query By Cretira)>QBE(Query By Example)
HQL和EJB QL
 session.createQuery("查询语句");
 注明:category
1.from 类名
2.select distinct  from 类名
3.from 类名 where id >:min and  id<max
  Query.setInteger("min",2);
  Query.setInteger("max",2);
  Query.setParameter("max",3);
  Query.setMaxResults(4);   //最大结果集
  Query.setFirstResult(1);  //读取的起点
  Query.uniqueResult();
4.导航
  from topic t where t.category.id=1
  join  // 联合查询
      select t.tilte,c.name from topic t join t.category c
  is not null  //不为空
  is empty    //为空
  like ‘%_’   //模糊查询
 
5.函数
 
  lower()
  upper()
  trim()
  concat()
  length()
  (不常用)
  abs()
  sqrt()
  mod()
6.current_date 当前日期 current_time 当前时间 current_timestamp 当前日期和时间
7.查询
  count()
  group by 
  having
  avg()
  all()
  exists() / not exists()  //能用这个时就用这个
  in()  / not in()

8.session.getNameQuery("");

9.NativeQuery
  SQLQuery q=session.createSQLQuery("本地sql语句").addEntity(类名.class);
10.QBE
  Criteria c=session.createCriteria(类名.class).add(Restrictions.约束属性);

Hibernate 性能优化
1.session.clear() 分页时需要注意使用,打开了链接需要关闭
  内存泄露,java语法上没有,而当加载许多的session时就会出现内存泄露
3.1+N问题(当取一张关联了其他表的数据时,将会加载其他的数据引发许多的sql语句)
  取关联对象的值,将引发获取被关联的对象的值,这就是1+N问题
  (1)@ManyToOne(fetch=FetchType.Lazy)  //其他的被关联的对象语句将会在需要时发出
  (2)@BatchSize(size=5)  //只取五条数据,注解添加到被关联的对象上面 
  (3)join fetch: session.createQuery("from Topic t left join fetch t.category c");
             //使用了外连接,只发一条sql语句
4.list和iterator的区别
 (1)iterator 先取id再取对象,重复使用时,先查找缓存,再查找数据库.
 (2)list  获取所有,不会查找seesion,但会先保存到session中去
5.二级缓存和查询缓存(查询的是一样的数据)
 一级缓存:session级别的缓存
 二级缓存:sessionFactory级别的缓存
 
 load默认使用二级缓存,iterator默认使用二级缓存
 list默认往二级缓存加数据,但查询时不先查询二级缓存
 二级缓存需要在配置文件中打开
 缓存算法: lru,lfu,fifo
6.事务并发处理
  a)acid
  b)事务的隔离级别
 

本文由 程序员百味 http://www.bywei.cn/blog 编写

 

struts2完全学习文档

编译问题:
java(jdk)编译设置:window-per**-java-instelled jar
java Compiler 编译设置与jdk的配置一样
Tomcat 使用的jdk与编译设置的jdk也应该是一致的

Acion的配置:
1.Struts的开发模式设置<constant name="struts.devMode" value="true"/>
2.Struts中web.xml的配置文件的设置:<filter>…</filter><filter-mapping>…</filter-mapping>
3.为jar文件建立源文件doc时,按f1可以导航到相关的文档
4.为配置文件设置提示 为 xml catalog 配置相关的dtd文件。
5.运行机制:客户端-tomcat-web.xml-filter-filter class-action-result
6.Namespace:
   (1)’/’->/index.action
   (2)’/**’ ->/**/index.action
   (3)’/**/**’ ->/**/**/index.action
   为对应的模块名。
  namespace 不写,将默认接受所有的action
  result若没有写名字,将默认为’success’.
  extends:
    从另外一个包来继承,声明一个主要配置,然后所有的都继承该包.
7.action返回:当struts.xml中没有调用方法时,默认调用execute()方法。
  struts.xml中的action中没有class是默认调用ActionSupport的execute();
  Action中有默认常量:SUCCESS ERROR INPUT等。
  可以继承implements Action / extends ActionSupport
8.Action方法调用:
  (1)struts.xml中的action的属性指定 method="方法名"
  (2)struts.xml中的action不配置属性method,而在url中使用 ‘!方法名’(dmi动态方法调用)来动态调用。
9.通配符的配置:
  使用“*”代表所有字符,使用“{1开始的数字调用第几个*}”
  使用法则:约定优于配置(提前把文件名约定好)
10.action接收参数三种方法:
  (1)(常用)通过Action属性来接收参数,属性必须写getter/setter方法。属性自动转换类型。调用时:url?属性=值&属性=值
  (2)(常用)通过DomainModel(域模型)接收参数,使用Model生成getter/setter,调用时:url?model.属性=值&model.属性=值
     –(上)通过Dto(数据传输对象)接收参数,使用同DomainModel
  (3)通过ModelDriven接收参数,在Action中 implements ModelDriven<Model>,然后又在Action中new 一个Model(必须自己new Model()),最后再继承 getModel()方法。
11.中文问题解决:
  struts.xml中使用i18n配置,<constant name="struts.i18n.encoding" value="字符编码"/>  –i18n internationalization 
  配置文件参考:struts-core.jar/org.apache.struts2/default.properties
12.简单数据校验
   在action中配置一个逻辑 然后调用 this.addFieldError("属性","错误信息");在Struts配置错误返回页面。
   页面使用struts标签<s:fielderror fieldName="属性名" theme="simple"/>
   打印错误信息:<s:property value="errors.name[0]"/> 错误信息保存在一个数组中。
   <s:debut></s:debug>显示调试信息
13.Action访问web元素 request,session,application,HttpRequest,HttpSession
   (1)request=(Map)ActionContext.getContext().get("request");
   session=ActionContext.getContext().getSession();
   application=ActionContext.getContext().getApplication();
    Action赋值:
   request.put("属性","值");
   session.put("属性","值");
   application.put("属性","值");
   jsp取值:
    <s:property value="#request.属性"/>
   (2)(常用)Action implements RequestAware,SessionAware,ApplicationAware (这也是IOC/DI的实现),定义Map<String,String> request session 和application.
   (3)在Action中定义
      private HttpServletRequest request;
      private HttpSession session;
      private ServletContext;
   Action取值:
      request= ServletActionContext.getRequest();
      session=request.getSession();
      application=session.getServletContext();             
   (4)Action implements ServletRequestAware
      private HttpServletRequest request;
      @override
      setServletRequest(**){request=request;session=request.getSession();}
14.模块包含
   <include file="其他的xml路径"/>
15.默认Action
   <default-action-ref name="默认Action名"/>

Result的配置:
1.类型type:
  (1)dispatcher 服务器端跳转到视图
  (2)redirect 客户端跳转
  (3)chain 服务器端跳转到Action和视图,<result type="chain">Action前面不要加"/",有参数param(actionName,namespace)两个属性(跳转到其他包)</result>;
  (4)RedirectAction跳转到其他Action, 地址栏显示跳转后的Action地址
2.全局结果集
  <global-results>
        <result name="全局返回类型">/other.jsp</result>
  </global-results>
3.向结果集传递参数
  (1)url?type=typeValue
  (2)Action中声名该属性type
  (3)result中取值<result>/url?type=${type}</result>
  (4)jsp页面取值:<s:property value="#parameters.type"/>O

本文由 程序员百味 http://www.bywei.cn/blog 编写

OGNL(对象Graph导航语言)表达式和struts标签(Action中演示变量:name属性,model实体类)
——->OGNL表达式
1.<s:property value="值棧中的属性名(name)"/>
2.<s:property value="model.name"/>
3.<s:property value="model1.model2.name"/>
4.<s:property value="name.length()"/> 调用普通方法
5.<s:property value="model.method()"/>调用普通方法
6.<s:property value="method()"/>调用普通方法
7.struts.xml配置:<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
  <s:property value="@cn.bywei.struts2.ognl.Class@staticMethod()"/> 访问值棧中的静态方法
  <s:property value="@cn.bywei.struts2.ognl.Class@name"/> 访问值棧中的静态属性
8.<s:property value="new cn.bywei.strus2.ognl.Class()"/>调用构造方法
9.访问集合:
  (1)<s:property value="List"/> 访问所有
     <s:property value="List[index]"/> 访问index的属性集合
     <s:property value="List{name}[index]"/> 访问属性集合中的一个
  (2)<s:property value="Set"/>
  (3)<s:property value="Map"/>
     <s:property value="Map[‘key’]"/>  /   <s:property value="Map[\"key\"]"/>
     <s:property value="Map.keys"/>  <s:property value="Map.values"/>
     <s:property value=&quot
;Map.size()"/>
10.过滤(投影)
<s:property value="model.{?#this.age==1}.{age}"/> age=q的model, this指定拿到的当前对象
<s:property value="model.{^#this.age>1}.{age}"/> age>1的开头的那个
<s:property value="model.{$#this.age>1}.{age}"/> age>1的结尾的那个
11.通过盏值访问
<s:property value="[index].name"/> 代表盏值中的index个对象的属性name
——–>struts2标签
12.<s:property value="值" default="默认值" escape="html标签格式化(true/false)"/>
   从request取值:<s:property value="#request.name"/>
   从Action中取值:<s:property value="#name"/>
13.<s:set value="值" var="变量" scope="默认为Action.(application,session,request,page,action)"/>
14.<s:bean name="类路径" var="变量">
        <s:param name="类中的属性" value="’设定新值’"/>
   </s:bean>
15.(少用)<s:include value="被包含的文件"/> 包含静态英文文件
   <s:set var="incpage" value="’/include.html’"/>
   <s:include value="%{#incpage}"/>
16.<s:fielderror fieldName="fielderror.text" theme="simple"/>
   其中的tehme设置:(1)css样式表解决 (2)xhtml解决(->struts-core.jar/template/fielderror.ftl –>struts.xml中配置:<constant name="struts.ui.theme" value="自定义的theme"/>)
17.<s:if test="表达式">
     <s:elseif test="表达式"></s:elseif>
     <s:else></s:else>
   </s:if>
18.<s:iterator value="集合可自定义map:#{1:’value1′,2:’value2′}" var="变量" status="status(count,index,even(偶数),odd(奇数),first,last)"
19.UI标签(操作复杂,与javaScript结合困难,所以不常用)
   theme 主题标签

异常处理
1.try{}catch()finally{}  
2.声明式异常.通过throws()把异常往上抛,交给Struts2来处理
  –>struts.xml中配置:
     <result…../>
       <exception-mapping result="error" exception="java.sql.SQLException(异常类型)"/>
       <result name="error">/error.jsp</result>
3.全局异常映射
  –>struts.xml中配置:
   <global-results>
      <result name="errot" >/error.jsp</result>
   </global-results>
   <global-exceptiong-mappings>
       <exception-mapping result="error" exception="java.lang.Exception(错误类型)"></exception-mapping>
   </global-exception-mappings>

国际化
1.Local 获取本地信息,ResourceBundle 绑定本地properties文件
  建立message_zh_CN.properties
2.struts国际化
  (1)类级别properties文件必须和对应的类名相同(Class_zh_CN.properties)
     包级别properties文件在包下
     全局properties,必须在struts.xml中配置:<constant name="struts.custom.i18n.resources" value="配置文件名"/>
  (2)jsp页面获取:<s:property value="getText(‘配置文件对应的key’)"/>
  (3)传递参数动态显示:
     –在properties文件中配置{0}占位符
     –jsp页面获取:
       <s:text name="配置文件中的key">
           <s:param value="值"/>
       </s:text>
动态语言切换:使用连接<a href=?request_loale=zh_CN >中文</a>

控制重复提交
1.在form表单中设置method="post"
2.在表单中设置<s:token></s:token>  token-令牌
  struts.xml 中配置:
      <interceptor-ref name="defaultStack"/>
      <interceptor-ref name="token"/>
      <result name="invalid.token">/errot.jsp</result>
类型转换
1.Action默认已经做了类型转换
2.日期转换:<s:date name="名字" format="yyy/MM/dd HH:mm:ss"/>
3.其他类型的转换,如:list,set,map以及自定义的类型转换少用

本文由 程序员百味 http://www.bywei.cn/blog 编写

 

Oracle/Mysql/SqlServer函数区别

Oracle/Mysql/SqlServer函数区别
文章分类:数据库
Sql代码 

1.类型转换

–Oracle
select to_number(‘123’) from dual; –123;
select to_char(33) from dual;  –33;
select to_date(‘2004-11-27′,’yyyy/mm/dd’) from dual;–2004-11-27

–Mysql
select cast(‘123’ as signed integer); –123
select cast(33 as char(2));  –33;
select to_days(‘2000-01-01’);  –730485

–SqlServer
select cast(‘123’ as decimal(30,2)); –123.00
select cast(33 as char(2));  –33;
select convert(varchar(12) , getdate(), 120)

2.四舍五入函数区别

–Oracle
select round(12.86*10)/10 from dual;    –12.9

–Mysql
select format(12.89,1);   –12.9

–SqlServer
select round(12.89,1);   –12.9

3.日期时间函数

–Oracle
select sysdate from dual;  –日期时间

–Mysql
select sysdate();   –日期时间
select current_date();   –日期

–SqlServer
select getdate();   –日期时间
select datediff(day,’2010-01-01′,cast(getdate() as varchar(10)));–日期相差天数

4.Decode函数

–Oracle
select decode(sign(12),1,1,0,0,-1) from dual;–1

–Mysql/SqlServer
select case when sign(12)=1 then 1 when sign(12)=0 then 0 else -1 end;–1

5.判空函数

–Oracle
select nvl(1,0) from dual;  –1

–Mysql
select ifnull(1,0);   –1

–SqlServer
select isnull(1,0);   –1

6.字符串连接函数

–Oracle
select ‘1’||’2′ from dual;  –12
select concat(‘1′,’2’);   –12

–Mysql
select concat(‘1′,’2’);   –12

–SqlServer
select ‘1’+’2′;    –12

7.记录限制函数

–Oracle
select 1 from dual where rownum <= 10;

–Mysql
select 1 from dual limit 10;

–SqlServer
select top 10 1

8.字符串截取函数

–Oracle
select substr(‘12345’,1,3) from dual;

–Mysql/SqlServer
select substring(‘12345’,1,3);

8.把多行转换成一合并列

–Oracle
select wm_concat(列名) from dual; –多行记录转换成一列之间用,分割

–Mysql/SqlServer
select group_concat(列名);

 

SQLServer和Oracle的常用函数对比

  1.绝对值
  S:select abs(-1) value
  O:select abs(-1) value from dual

  2.取整(大)
  S:select ceiling(-1.001) value
  O:select ceil(-1.001) value from dual

  3.取整(小)
  S:select floor(-1.001) value
  O:select floor(-1.001) value from dual

  4.取整(截取)
  S:select cast(-1.002 as int) value
  O:select trunc(-1.002) value from dual

  5.四舍五入
  S:select round(1.23456,4) value 1.23460
  O:select round(1.23456,4) value from dual 1.2346

  6.e为底的幂
  S:select Exp(1) value 2.7182818284590451
  O:select Exp(1) value from dual 2.71828182

  7.取e为底的对数
  S:select log(2.7182818284590451) value 1
  O:select ln(2.7182818284590451) value from dual; 1

  8.取10为底对数
  S:select log10(10) value 1
  O:select log(10,10) value from dual; 1

  9.取平方
  S:select SQUARE(4) value 16
  O:select power(4,2) value from dual 16

  10.取平方根
  S:select SQRT(4) value 2
  O:select SQRT(4) value from dual 2

  11.求任意数为底的幂
  S:select power(3,4) value 81
  O:select power(3,4) value from dual 81

  12.取随机数
  S:select rand() value
  O:select sys.dbms_random.value(0,1) value from dual;

  13.取符号
  S:select sign(-8) value -1
  O:select sign(-8) value from dual -1
  ———-数学函数

  14.圆周率
  S:SELECT PI() value 3.1415926535897931
  O:不知道

  15.sin,cos,tan 参数都以弧度为单位
  例如:select sin(PI()/2) value 得到1(SQLServer)

  16.Asin,Acos,Atan,Atan2 返回弧度

  17.弧度角度互换(SQLServer,Oracle不知道)
  DEGREES:弧度-〉角度
  RADIANS:角度-〉弧度

  ———数值间比较

  18. 求集合最大值
  S:select max(value) value from
  (select 1 value
  union
  select -2 value
  union
  select 4 value
  union
  select 3 value)a

  O:select greatest(1,-2,4,3) value from dual

  19. 求集合最小值
  S:select min(value) value from
  (select 1 value
  union
  select -2 value
  union
  select 4 value
  union
  select 3 value)a

  O:select least(1,-2,4,3) value from dual

  20.如何处理null值(F2中的null以10代替)
  S:select F1,IsNull(F2,10) value from Tbl
  O:select F1,nvl(F2,10) value from Tbl
——–数值间比较

  21.求字符序号
  S:select ascii(‘a’) value
  O:select ascii(‘a’) value from dual

  22.从序号求字符
  S:select char(97) value
  O:select chr(97) value from dual

  23.连接
  S:select ’11’+’22’+’33’ value
  O:select CONCAT(’11’,’22’)||33 value from dual

  23.子串位置 –返回3
  S:select CHARINDEX(‘s’,’sdsq’,2) value
  O:select INSTR(‘sdsq’,’s’,2) value from dual

  23.模糊子串的位置 –返回2,参数去掉中间%则返回7
  S:select patindex(‘%d%q%’,’sdsfasdqe’) value
  O:oracle没发现,但是instr可以通过第四霾问刂瞥鱿执问?BR>  select INSTR(‘sdsfasdqe’,’sd’,1,2) value from dual 返回6

  24.求子串
  S:select substring(‘abcd’,2,2) value
  O:select substr(‘abcd’,2,2) value from dual

  25.子串代替 返回aijklmnef
  S:SELECT STUFF(‘abcdef’, 2, 3, ‘ijklmn’) value
  O:SELECT Replace(‘abcdef’, ‘bcd’, ‘ijklmn’) value from dual

  26.子串全部替换
  S:没发现
  O:select Translate(‘fasdbfasegas’,’fa’,’我’ ) value from dual

  27.长度
  S:len,datalength
  O:length

  28.大小写转换 lower,upper

  29.单词首字母大写
  S:没发现
  O:select INITCAP(‘abcd dsaf df’) value from dual

  30.左补空格(LPAD的第一个参数为空格则同space函数)
  S:select space(10)+’abcd’ value
  O:select LPAD(‘abcd’,14) value from dual

  31.右补空格(RPAD的第一个参数为空格则同space函数)
  S:select ‘abcd’+space(10) value
  O:select RPAD(‘abcd’,14) value from dual

  32.删除空格
  S:ltrim,rtrim
  O:ltrim,rtrim,trim

  33. 重复字符串
  S:select REPLICATE(‘abcd’,2) value
  O:没发现

  34.发音相似性比较(这两个单词返回值一样,发音相同)
  S:SELECT SOUNDEX (‘Smith’), SOUNDEX (‘Smythe’)
  O:SELECT SOUNDEX (‘Smith’), SOUNDEX (‘Smythe’) from dual
  SQLServer中用SELECT DIFFERENCE(‘Smithers’, ‘Smythers’) 比较soundex的差
  返回0-4,4为同音,1最高

  ————–日期函数

  35.系统时间
  S:select getdate() value
  O:select sysdate value from dual

  36.前后几日
  直接与整数相加减

  37.求日期
  S:select convert(char(10),getdate(),20) value
  O:select
trunc(sysdate) value from dual
  select to_char(sysdate,’yyyy-mm-dd’) value from dual

  38.求时间
  S:select convert(char(8),getdate(),108) value
  O:select to_char(sysdate,’hh24:mm:ss’) value from dual

  39.取日期时间的其他部分
  S:DATEPART 和 DATENAME 函数 (第一个参数决定)
  O:to_char函数 第二个参数决定
参数———————————下表需要补充
  year yy, yyyy
  quarter qq, q (季度)
  month mm, m (m O无效)
  dayofyear dy, y (O表星期)
  day dd, d (d O无效)
  week wk, ww (wk O无效)
  weekday dw (O不清楚)
  Hour hh,hh12,hh24 (hh12,hh24 S无效)
  minute mi, n (n O无效)
  second ss, s (s O无效)
  millisecond ms (O无效)
  ———————————————-

  40.当月最后一天
  S:不知道
  O:select LAST_DAY(sysdate) value from dual

  41.本星期的某一天(比如星期日)
  S:不知道
  O:SELECT Next_day(sysdate,7) vaule FROM DUAL;

  42.字符串转时间
  S:可以直接转或者select cast(‘2004-09-08’as datetime) value
  O:SELECT To_date(‘2004-01-05 22:09:38′,’yyyy-mm-dd hh24-mi-ss’) vaule FROM DUAL;

  43.求两日期某一部分的差(比如秒)
  S:select datediff(ss,getdate(),getdate()+12.3) value
  O:直接用两个日期相减(比如d1-d2=12.3)
  SELECT (d1-d2)*24*60*60 vaule FROM DUAL;

  44.根据差值求新的日期(比如分钟)
  S:select dateadd(mi,8,getdate()) value
  O:SELECT sysdate+8/60/24 vaule FROM DUAL;

  45.求不同时区时间
  S:不知道
  O:SELECT New_time(sysdate,’ydt’,’gmt’ ) vaule FROM DUAL;

  —–时区参数,北京在东8区应该是Ydt——-
  AST ADT 大西洋标准时间
  BST BDT 白令海标准时间
  CST CDT 中部标准时间
  EST EDT 东部标准时间
  GMT 格林尼治标准时间
  HST HDT 阿拉斯加—夏威夷标准时间
  MST MDT 山区标准时间
  NST 纽芬兰标准时间
  PST PDT 太平洋标准时间
  YST YDT YUKON标准时间

Oracle 11g安装问题解决方法大全

oracle 11g安装先决条件检查全部失败,详细信息如下:
//物理内存
物理内存 – 此先决条件将测试系统物理内存总量是否至少为 922MB (944128.0KB)。
预期值
 : N/A
实际值
 : N/A
 错误列表:
 –
//可用物理内存
PRVF-7531 : 无法在节点 "LENOVO-F4F9938F" 上执行物理内存检查  – Cause:  无法在指示的节点上执行物理内存检查。  – Action:  确保可以访问指定的节点并可以查看内存信息。 
可用物理内存 – 此先决条件将测试系统可用物理内存是否至少为 50MB (51200.0KB)。
预期值
 : N/A
实际值
 : N/A
 错误列表: 
 –
PRVF-7563 : 无法在节点 "LENOVO-F4F9938F" 上执行可用内存检查  – Cause:  无法在指示的节点上执行可用内存检查。  – Action:  确保可以访问指定的节点并可以查看内存信息。
//交换空间大小
交换空间大小 – 此先决条件将测试系统是否具有足够的总交换空间。
预期值
 : N/A
实际值
 : N/A
 错误列表: 
 –
PRVF-7574 : 无法在节点 "LENOVO-F4F9938F" 上执行交换空间大小检查  – Cause:  无法在指示的节点上执行交换空间检查。  – Action:  确保可以访问指定的节点并可以查看交换空间信息。 
 –
PRVF-7531 : 无法在节点 "LENOVO-F4F9938F" 上执行物理内存检查  – Cause:  无法在指示的节点上执行物理内存检查。  – Action:  确保可以访问指定的节点并可以查看内存信息。
……
总之,所有检查都无法执行
电脑内存2G,硬盘250G的,在各个盘装都无法坚持先决条件,换成超级管理员登录,关闭杀毒软件,都不行。实在不解,请高人指点。

回复:oracle11g无法安装

——————————————————————————–

如果是官方下载的 Oracle 11g 肯定是没有问题的!!版本对不对!

——————————————————————————–

//物理内存
物理内存 – 此先决条件将测试系统物理内存总量是否至少为 922MB (944128.0KB)。
内存太小了. 如果不能加内存,就换个Oracle 版本. 比如10g或者9i. 
—————————————————————————— 
Blog:  
网上资源:  
相关视频: 
DBA1 群:62697716(满); DBA2 群:62697977

——————————————————————————–

电脑内存2G,硬盘250G的,在各个盘装都无法检查先决条件,换成超级管理员登录,关闭杀毒软件,都不行。实在不解,请高人指点。

——————————————————————————–

oracle 11g安装先决条件检查全部失败,详细信息如下:
//物理内存
物理内存 – 此先决条件将测试系统物理内存总量是否至少为 922MB (944128.0KB)。
预期值
 : N/A
实际值
 : N/A
 错误列表:
 –
//可用物理内存
PRVF-7531 : 无法在节点 "LENOVO-F4F9938F" 上执行物理内存检查 – Cause: ……
你上面的有几个错误我也有出现过,但只要有2g的内存和足够的交换区,硬盘空间,那些所需的包都有装上的话,那些失败选项可以忽略,照样可以安装成功。
另一个可能是你所选的软件与你系统不搭配。
如:32位的与系统X86是相对应的(个人用的较常见)
   64位的与X86_64

——————————————————————————–

不过如果在windows 下装的呢要注意端口是否与登录上网的有冲突

——————————————————————————–

//物理内存
物理内存 – 此先决条件将测试系统物理内存总量是否至少为 922MB (944128.0KB)。
内存太小了. 如果不能加内存,就换个Oracle 版本. 比如10g或者9i.
内存就是1G的也可以装得了,只是较卡而已。这个问题是可以忽略的。
交换区是可以扩展的,修改一下就行了。总体上还是得看你出了什么样的错误。

能截个图看下吗?
无法检查先决条件,图片如下:
win32_11gR2_database_1of2.zip,win32_11gR2_database_2of2.zip版本

——————————————————————————–

电脑内存2G,硬盘250G的,在各个盘装都无法检查先决条件,换成超级管理员登录,关闭杀毒软件,都不行。实在不解,请高人指点。
先把交换区和temp的空间都搞大些,在试试,我在linux下遇到过这样的情况,不过把其他的错误解决后,这个就消失了。

——————————————————————————–

引用 4 楼 shizhijie737 的回复:
先把交换区和temp的空间都搞大些,在试试,我在linux下遇到过这样的情况,不过把其他的错误解决后,这个就消失了。
我现在是在windows下安装的,缓存已经设到4G了,现在不是前置条件不满足,而是无法检查

——————————————————————————–

遇到同样的问题,up

——————————————————————————–

我也碰到过,不过可以忽略,也可以安装成功。

——————————————————————————–

我碰到过部分检测没有通过的,但忽略就可以了,不知道你这个行不行

——————————————————————————–

我的虚拟机装oracle 11g r2 时也提示交换空间不足,安装失败
换了oracle 11g r1 安装成功了,建议楼主别装r2。
另外,交换空间大小怎么设置?产生此错误可能是因为使用虚拟光驱引起的吧?

——————————————————————————–

增大虚存。
安装桌面版。不装企业级server。

——————————————————————————–

Oracle要求内存至少为1G,但内存为1G–2G时,交换空间要求为内存的1.5倍;
磁盘空间应该是够的。。。

——————————————————————————–

帮你顶一下 希望有人看到这个 我也遇到这个问题了。现在不知道咋整啊

——————————————————————————–

oracle 11g最终还是没有装上,放弃了
下了个9g的,server端,在administrator帐户下安装成功,需注意一下几点:
1,安装前彻底删除安装失败的痕迹
2,安装文件路径,安装路径均不可出现中文
3,安装客户端,因为报错找不到java运行环境,所以放弃自带客户端,下载了plsql developer,安装后,数据库可用
谢谢各位关注

——————————————————————————–

有可能是我当前系统帐户是中文帐户的原因

——————————————————————————–

我在vista下安装的11.2的数据库,遇到跟楼主相同的问题,最后发现原因是没有以管理员方式运行安装程序setup.exe。
解决的办法是:右键setup.exe,选择"Properties",在弹出的页面中切换到"Compatiblity",然后勾上"Run this program as
an Administrator",确定。
再次运行setup.exe,就可以成功安装oracle database了。

——————————————————————————–

我也遇到和楼主一样的情况,全部检查项都失败,实际值是:N/A。我当前账号已经是administrator了,还是不行

——————————————————————————–

操作系统windows2008r2-cn 问题相同!

——————————————————————————–

问题找到了: 操作系统如果是企业版的,应当选择“服务器型”,其他,应选择“桌面型”。

——————————————————————————–

全部忽略装上了 开始和楼主一样
4g的内存的 笔记本可能检测有问题

——————————————————————————–

打开C盘的默认共享,再重新检查即可!
 

Eclipse安装插件,myeclipse环境配置技术文档

Eclipse+MyEclipse+Tomcat下配置建立Web Project
 
1.环境
登陆下列官方网站下载最新的安装包,官方网站如下:
Eclipse SDK  官方网站:http://www.eclipse.org/
MyEclipse官方网站:http://www.myeclipseide.com/   myeclipse在国内的ip被封锁,需要的下载的可以通过迅雷下载,可以参考 《发布MyEclipse 9.0 / 8.6 / 7.5 / 6.6 / 5.5 等全系列注册码及官方下载地址及高速网盘国内地址》下载myeclipse安装程序 http://java.gzit.org/node/416
Tomcat官方网站:http://tomcat.apache.org/
JDK 官方网站:http://www.oracle.com/technetwork/java/javase/downloads/index.html
2.配置方法(由于已打中文语言包,括号中均为原英文名称)
1)配置MyEclipse
启动Eclipse,菜单栏中选择“帮助(Help)”--“软件更新(Sofware Updates)”--“管理配置(Manage Configuration)” “Eclipse SDK”结点上右键选择“添加(ADD)”--“扩展位置…(Extension Location)”选择MyEclipse的安装路径 重新启动Eclipse后菜单栏里就多了一个MyEclipse的选项 * 若使用MyEclipse安装版并在安装过程中正确选择Eclipse目录,以上步骤可省略,具体表现为“Eclipse SDK”结点下已经存在MyEclipse的安装位置 。
2)配置Tomcat

启动Eclipse,菜单栏中选择“窗口(window)”--“首选项…(preference)” “MyEclipse”--“Application Servers”--“Tomcat 5” 将Tomcat Server设置为“Enable”,并将“Tomcat Home Directory”设置为Tomcat 5.5.9的安装目录,其他目录选项将会自动生成
3)配置默认编码
仍然是菜单栏中的“窗口(window)”--“首选项…(preference)” “常规(General)”--“内容类型(Content Types)”--“文本(text)” 然后在“缺省编码(Default encoding)”中输入“UTF-8”,点击“更新(Update)” 将“Java类文件(Java Properties File)”及其他字符编码均“更新(Update)”为“UTF-8” 。
3.创建并运行Web Project
1)创建工程
“新建(New)”--“项目(Project)”--“MyEclipse”--“J2EE Projects”--“Web Project”…命名等过程省略
2)创建一个Servlet
“新建(New)”--“其他(Other)”--“MyEclipse”--“Web”--“Servlet”…命名等过程省略
3)运行Web Project
点击工具栏的“Deploy MyEclipse J2EE Project to Server…”按钮,“Add”为当前工程配置Server为“Tomcat 5”,点击刚才右侧的另一个按钮“Run…MyEclipse Application Servers”来启动Tomcat 
大功告成,打开浏览器中访问刚才创建的Servlet吧 (Eclipse创建的Servlet时映射默认为"\servlet\name")  。
 

【荐】安装Eclipse技巧,推荐阅读文档:

1.Eclipse中添加MyEclipse插件   http://developer.51cto.com/art/200906/130176.htm

2.详解Eclipse+MyEclipse完全绿色版制作方法  http://developer.51cto.com/art/200906/128062.htm

3.在MyEclipse8.6中搭建android环境  http://hi.baidu.com/albrich/blog/item/c87a932158005a5a925807fd.html