第一周------部分笔记

GIT部分:

有了名字才方便操作:

git config --global user.name "yabushan"

git config --global user.email "[email protected]"

①git的初始化:

git clone:这是较为简单的一种初始化方式,当你已经有一个远程的Git版本库,只需要在本地克隆一份
例如:git clone git://github.com/someone/some_project.git  some_project
上面的命令就是将‘git://github.com/someone/some_project.git '这个URL地址的远程版本库完全克隆到本地的some_project目录下面


git init 和git remote:这种方式稍微复杂一些,当你本地创建了一个工作目录,你可要进入这个目录,
使用git init命令进行初始化,
git以后就会对该目录下的文件进行版本控制,这时候如果你需要将它放到远程服务器上,可以在远程服务器上创建一个目录,
并把可访问的url记录下来,
此时你就可以利用git remote add 命令来增加一个远程服务器端
例如:git remote add origin
上面的命令就会增加URL地址为‘git://github.com/someone/some_project.git ',名称为origin的远程服务器,
以后提交代码的时候只需要使用origin别名即可。






git的基本命令:

1:git pull:从其他的版本库(即可以是远程的也可以是本地的)将代码更新到本地;
例如:git pull origin master
就是将origin这个版本库的代码更新到本地的master主枝,该功能类似于SVN的update。


2:git add:是将当前更改或者新增的文件加入到git的索引中,加入到git的索引中就表示记入了版本历史中,这也是提交之前所需要执行的一步
例如:git add app/mode/user.rb  就会增加app/model/user.rb文件到git的索引中,该功能类似于svn的add。


3:git rm:从当前的工作空间中和索引中删除文件,
例如:’git rm app/model/user.rb' 该功能类似于svn的rm、del
git rm --ached fl;删除f1文件和index中此文件的记录,而不删除本地目录


4:git commit:提交当前的工作空间的修改内容,类似于svn的commit命令,
例如:‘git commit -m "story #3,add user model"
提交的时候必须用-m来输入一条提交信息,该功能类似于svn的commit


5:git push:将本地commit的代码更新到远程版本库中,
例如:git push origin,就会将本地的代码更新到名为origin的远程版本库中


6:git log:查看历史日志,该功能类似于svn的log
git log -1;只显示一个commit命令


7:git revert:还原一个版本的修改,必须提供一个具体的git版本号,
例如:’git revert bbaf6fgasjglgjlksjffsdfjlwelfjl'
git 的版本号都是生成的一个哈希值。



git独有的一些命令:

1:git branch:对分支的增、删、改、查等操作
例如:‘git branch new_branch' 会从当前的工作版本创建一个叫做new_branch的新分支,
‘git branch -D new_branch'就会强制删除叫做new_branch的分支
‘git branch’就会列出本地所有的分支


2:git checkout:git的checkout有两个作用:
其一是在不同的branch之间进行切换,例如:‘git checkout new_branch'就会切换到new_branch的分支上去;
另一个功能是还原代码的作用,例如:‘git checkout app/model/user.rb'就会将user.rb文件从上一个已提交的版本更新回来,
未提交的内容会全部回滚 。


3:git rebase :将分支节点从c移动到另一个节点g。。。


4:git reset:将当前的工作目录完全回滚到指定的版本号,
例如:有A-G五次提交,其中C的版本号是sdlfkjljw244546lkjlj,我们执行了‘git reset sdlfkjljw244546lkjlj’那么结果就只剩下了A-C三个提交的版本


5:git stash:将当前未提交的工作存入git工作栈中,时机成熟的时候再应用回来。后面讲解


6:git config:利用这个命令可以新增、更改Git的各种设置,
例如:‘git config branch.master.remote origin'就将master的远程版本库设置为别名叫做origin版本库


7:git tag:可以将某个具体的版本打上一个标签,这样你就不需要记忆复杂的版本哈希值了,

例如:可以使用‘git tag revert_version sdfsdfljfoiwjgjl323lk'来标记这个被你还原的版本

,以后想查看该版本时就可以使用revert_version标签名,而不是哈希值了。




其实网上的指导非常清晰了已经,所以只需要注意几个问题
1.creat repository的时候只能选Public了,因为Private它。。。它居然收钱阿擦。。。
2.这次尝试的是Create a new repository on the command line,在本地新建一个项目目录,进去执行以下命令,这些都是网站上写好的,照抄即可。需要注意的是,一定是新建一个空的目录,不然会报错。如果想用以前的项目,在我找到正确的方法之前,还是后期copy了擦。。。
 象征性,还是把命令刷一遍吧
touch README.md




git init




git add README.md




git commit -m "first commit"




git remote add origin https://github.com/Jinwh/n.git  //给URL取别名origin。




git push -u origin master


3.后期copy 或者写好代码


4.上交代码的命令


git commit


git add xxxxxx


git commit -a


git push


push过程中需要用户名和密码


基本上就是github上我那两对都可以用


5.此前曾经设置过关于git的username和useremail,这两个货直接关系到push到git上的用户是谁。跟push过程中输入的Username和Password没半毛钱关系,害我还研究了好一会阿擦。。。


关于设置git的username和useremail的方法:


单独设置的话:git config user.name "YOUR NAME"


                         git config user.email "YOUR EMAIL"


这些信息会存在 项目目录/.git/config当中






全局设置的话:git config --global user.name "YOUR NAME"
                          git config --global user.email "YOUR EMAIL"
就是这个全局设置,一开始不明白照着乱抄,结果后面花了好久研究清楚阿。。。


6.协同作业的话,可以建立多个brunch,比如,建立一个brunch叫development,所有开发阶段协同开发的代码递交到此处,后期再合并到主brunch上,这个,具体还要在学习。


恩,暂时就这样


 再就是关于在github上fork工程,直接有按钮,真是方便又智能~~~
 牵代码的话,依旧git clone






总结:

git之所以能够提供方便的本地分支等特性,是与它的文件存储机制有关。git存储版本控制信息是使用它自己定义的一套文件系统存储机制,在代码根目录下有一个.git文件夹。




GSTL部分


一. 配置 JSTL


包括两个 JAR 文件, jstl.jar 和 standard.jar 。是什么没有必要管,重在应用( 1+1 ? =2 ,我们没有必要深究,只需要知道这么用就行。)。




原文引入:


<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>


<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>


                                                                


二. Core 标签库


 


Core 标签库主要包括了一般用途的标签、条件标签、迭代标签和 URL 相关的标签。在 JSP 页面使用 Core 标签,要使用 taglig 指令,指定引用的标签库,如下:


<%@ taglib rui=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>


 


一般用途的标签有 <c:out> 、 <c:set> 、 <c:remove> 、 <c:cath>


1.<c:out>


用于计算一个表达式并将结果输出。类似于 JSP 中 <%=%> 表达式,或者是 EL 中 $ ${el-expression} 。


 


2.<c:set>


用于设置范围变量的值或者 javabean 对象的属性。


看个实际例子:


<c:set var=”username” value=”lisi” scope=”session”/>


这样就相当于设置了 session 。


 


3.<c:remove>


相对 <c:set> 其作用是移除范围变量。比如: <c:remove var=”nusername” scope=”session”/>


 


4.<c:catch>


 


用于捕获在其中嵌套的操作所抛出的异常对象,并将异常信息保存到变量中。


我们将有可能抛出异常的代码放置到开始标签 :<c:catch> 和结束标签 :</c:catch> 之间。如果其中代码出现异常,异常对象将被捕获,保存在 var 声明的变量中,该变量总是有 page 范围。如果没有发生异常,而 var 所标识的范围变量将被移除。


如果没有指定 var 属性,异常只是简单的被捕获,异常信息并不会被保存。


Eg :


<c:catch var=”exception”>


<%


       int i = 5;


       int j = 0;


       int k=i/j;


%>


</c:catch>


<c:out value=”${exception}” /><br>


<c:out value=”${exception.massage}”/>


后一句相当于: exception.getMessage()


 


条件标签包括 <c:if><c:choose><c:when><c:otherwise>


1.<c:if>


用于实现 java 中的 if 语句功能。


 


<c:if test=”${user.visitCount==1}”>


       This is your first visit .


</c:if>


 


若为 true ,会打印中间部分。也可以声明 var ,方便下一步判断。


<c:if test=”${param.name==’admin’}” value=”result”/>


<c:out value=”${result}” />


 


2.<c:choose>


<c:choose> 和 <c:when> 、 <c:otherwise> 一起实现互斥条件执行,类似于 java 中的 if else.


<c:choose> 一般作为 <c:when> 、 <c:otherwise> 的父标签。


eg :


<c:choose>


       <c:when test="${row.v_money<10000}">


              初学下海


       </c:when>


       <c:when test="${row.v_money>=10000&&row.v_money<20000}">


              身手小试


       </c:when>


       <c:otherwise>


              商业能手


       </c:otherwise>


</c:choose>


 


迭代标签


迭代标签有 <c:forEach> 和 </c:forEach>


 


// 遍历记录集


<c:forEach items="${finalResult.rows}" var="row">       


<tr class="<%=tdClass[(rank+1)%2]%>">


<td align="center"><span><%=rank%> </span></td>


<td align="center"><span ><c:out value="${row.player_name}"/></span> </td>


<td align="center"><span > ¥ <c:out value="${row.money}"/></span></td>


</tr>


<%rank++;%>     


</c:forEach>


 


也可以设定固定次数。


<c:forEach var =”i” begin=”100 “ end= “110”>


       ${i}


</c:forEach>


如果再加个 step= “ 2 ”那么每次增长为 2 。


 


三. sql 标签


 


设置数据源:


<sql:setDataSource dataSource="proxool.breadTycoon" />


// 将数据库某查询的结果声明为一个变量


<sql:query var="finalResult" >


    select player_name,money from tb_player order by money DESC LIMIT 10   


</sql:query>


       然后可以:


<c:forEach items="${ finalResult.rows}" var="row" varStatus="s">


        advCosts[${s.index}]=${row.adv_cost};


   </c:forEach>


       数据更新标签:


<sql:update>  


                call proc_set_role_salespro(?,?,?,?,?);


                <sql:param value="30"/>


                <sql:param value="39"/>


                <sql:param value="<%=spID%>"/>


                <sql:param value="<%=productID%>"/>


                <sql:param value="1"/>               


            </sql:update>


 


<sql:query var="queryAllChannelCount">


SELECT COUNT(*) as total FROM tb_channel WHERE game_id=? AND begin_round<func_cur_round(?) AND player_id=? AND channel_flag=0


<sql:param value="${gameID}"/>


<sql:param value="${gameID}"/>


<sql:param value="${playerID}"/>


</sql:query>


<c:forEach items="${queryAllChannelCount.rowsByIndex}" var="channelCN">


       <c:set value="${channelCN[0]}" var="channelTotal"/>


</c:forEach>


 


调用存储过程更新数据库:


 


<c:if test="${param.changsubmit!=null}" >


<c:forEach items="${paramValues.pro_id}" var="getpro_id" varStatus="getparamsta">


<sql:update>


 


call proc_set_role_product(?,?,?,?,?,?,?,?);


 


<sql:param value="${gameID}"/>


<sql:param value="${playerID}"/>


<sql:param value="${getpro_id}"/>


<sql:param value="${getpro_id}"/>


<sql:param value="${paramValues.pro_sort[getparamsta.index]}"/>


<sql:param value="${paramValues.price[getparamsta.index]}"/>


<sql:param value="${paramValues.output[getparamsta.index]}"/>


<sql:param value="0"/>


</sql:update>


</c:forEach>


</c:if>


四. 格式化标签


 


<fmt: formatNumber value =”12.3” pattern=”.000”/>


将输出 12.300. 应用样式 ”.000”, 将使格式化后的小数部分有 3 位。不足 3 位将以 0 补齐。


 


       <fmt:formatDate value=”<%=new java.util.Date() %>” type=”date” />


       格式化的结果是: 2014-12-3


<fmt:formatDate value=”<%=new java.util.Date() %>” type=”time” />


格式化的结果是: 11:30:12


<fmt:formatDate value=”<%=new java.util.Date() %>” type=”both” />


格式化的结果是: 2014-12-3 10:25:11


 
 


扩展知识点:


 


1. 替换 request.getParameter("test"):


<c:if test="${param.test!=null}" >


<c:out value="${param.test}" />


</c:if>


 


2. <c:redirect url="a.jsp">


 


3.<c:redirect url="/max.jsp" context="/ch16">


<c:param name="name1" value="665"/>


<c:param name="name3" value=" 斯蒂芬 "/>


</c:redirect>


 


4.<c:forTokens items="zhangsan:lisi:as" delims=":" var="name">


${name}


</c:forTokens>





Spring部分



配置bean:
class:bean的全类名,通过反射的方式在IOC容器中创建bean
所以要求bean中必须要有无参的构造器


使用属性注入的方式:属性值在<property name="setXXX中XXX的名字" value="要注入的值">


使用构造器注入属性可以指定参数的位置和参数的类型,以区分重载的构造器:方式:<constructor-arg value="要注入的值" index="顺序" type="该注入值的类型:如:int"  />
不同的构造函数有不同的类型。


如果字面值包含特殊字符可以使用<![CDATA[]]>包括起来
属性值也可以使用value子节点注入


可以使用property的ref属性建立bean之间的引用关系


属性需要先初始化后才可以为级联属性赋值,否则会有异常




使用map节点及entry子节点配置map类型的成员变量
<map>
<entry key="aa" value-ref="car"></entry>
</map>


使用props和prop子节点来为properties属性赋值
<props>
<prop key="user">root</prop>
<prop key="password">123</prop>
<prop key="jdbcurl">jdbc:mysql.jdbc.Driver</prop>
</props>






配置单例的集合bean,以供多个bean进行引用。需要导入util命令空间


<util:list id="cars">
<ref bean="car1/>
<ref bean="car2"/>
</util:list>


<bean id="person" class ="com.person">
<property name="name" value="jack"></property>
<property name="age" value="29"></property>
<property name="cars" ref="cars"></property>
</bean>








通过p命名空间为bean的属性赋值,需要 先导入p命名空间
<bean id="person" class="com.person" p:name="querssd" p:age="20" 
p:car-ref="cars"></bean>






自动装配bean


通过autowire属性指定自动装配的方式
byName 根据bean的名字和当前bean的setter风格属性名进行自动装配,若有匹配的,则进行自动装配,若没有则不进行装配


byType 根据bean的类型和当前bean的属性的类型进行自动装配。若IOC容器中有一个以上的类型匹配的bean,则抛异常。






bean的继承


使用bean的parent属性指定继承哪个bean的配置


<bean id="address" class="com.spring.Address" p:city="beijing" p:street="wudaokou"></bean>


<bean id="address2" p:street="tiantan" parent="address"></bean>




bean的抽象


通过设置abstract为true来把一个bean设置为抽象bean。那么这个bean就不能被实例化


<bean id="address" class="com.spring.Address" p:city="beijing" p:street="wudaokou" abstract="true"></bean>






bean的依赖
通过设置dependon="依赖的bean名"
<bean id="address" class="com.spring.Address" p:city="beijing" p:street="wudaokou"  depend-on="person"></bean>




bean的作用域
使用bean的scope属性来配置bean的作用域。scope的取值可以是request,session,prototype,singleton


singleton:默认值,容器初始化时创建bean实例,在整个容器的生命周期内只创建一个bean,单例的
prototype:原型,容器初始化时不创建bean的实例,而在每次请求时都创建一个新的bean实例,并返回








导入外部属性:
当属性文件较多时,可以把一些属性信息写到外部。如数据库的链接:


建立一个db.properties:
user="root"
password="yabushan"
driverclass="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/text


在bean-properties.xml文件中:
①导入属性文件
<context:property-placeholder location="classpath:db.properties"/>


<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!--使用外部化属性-->
<property name="user" value="${user}"></property>
<property name="password" value="${password}"></property>
<property name="driverclass" value="${driverclass}"></property>
<property name="url" value="${url}"></property>
</bean>






spEL的使用:
可以进行字面赋值、运算 用“#{}”表示


<bean id="car" class="Car">
<property name="tyrePerimeter" value="#{T(java.lang.Math).PI*80}"></property>
</bean>
//使用spEL来应用car这个bean
<bean id="person" class="Person">
<property name="car" value="#{car}"></property>
</bean>
//使用spEL来应用addres这个bean的属性city


<bean>
<property name="city" value="#{address.city}"></property>
</bean>






<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";%>
<%=request.getContextPath()%>是解决相对路径的问题,可返回站点的根路径。
<a href="<%=request.getContextPath()%>/XXX.jsp"> //这样获得的是绝对路径


request.getScheme();
返回的协议名称,默认是http


request.getServerName()
返回的是你浏览器中显示的主机名


getServerPort()
获取服务器端口号


如果想得到工程文件的实际物理路径,可通过:<%=request.getRealPath("/")%>,这样页面就会输出:d:/web


destroy-method="close"的作用是当数据库连接不使用的时候,就把该连接重新放到数据池中,方便下次使用调用.




spring3.1中@Repository , @Service , @Controller 和 @Component 有什么区别 ??
基本上没有区别. 
用Spring MVC时@Controller注解的类将变成一个Spring MVC的控制器. 
不用Spring MVC的情况下, 这四个注解没有区别. 
根据注解的语义, 注解在类上面可以提高代码的可读性.
 @Repository代表仓库. 一般注解在DAO实现类上, 别人看代码时, 就知道这个类是一个跟数据存储有关的类. 
@Service代表业务. 一般注解在Service实现类上.
@Controller代表控制器. 一般注解在控制器类上. 
如果你的类不是以上类型(数据存储类, 业务类, 控制器), 可以笼统的使用@Component


在java代码中使用@Autowired或@Resource注解方式进行装配,这两个注解的区别是:@Autowired 默认按类型装配,
@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。


hibernate部分

以前写代码,总免不了编写登陆部分。在获取user的时候,只可能返回一个user实例,或者为null。以前使用以下方法实现。
public User get(String id){
    Session session=HibernateUtil.getSessionFactory().openSession();
    String hql="from User u where u.id = ?";
    List list=session.createQuery(hql).setString(0, id).list();
    if (list.size()==1){
        return (User)list.get(0);
    }else{
        return null;
    }
}
    昨天重读hibernate的参考手册,发现query接口提供了一个更好的方法用来获取实例,当返回的实例明确只有一个或者为null的时候。
uniqueResult
public Object uniqueResult()throws HibernateException返回:单个实例或者null抛出:
当返回的实例大于一个的时候的抛出NonUniqueResultException对应的使用方法如下
public User get(String id){    Session session=HibernateUtil.getSessionFactory().openSession();   
 String hql="from User u where u.id=?";   
 return (User)session.createQuery(hql).setString(0, id).uniqueResult




SessionFactory.getCurrentSession与openSession的区别
    1. 如果使用的是getCurrentSession来创建session的话,在commit后,session就自动被关闭了,
         也就是不用再session.close()了。但是如果使用的是openSession方法创建的session的话,
         那么必须显示的关闭session,也就是调用session.close()方法。这样commit后,session并没有关闭
 2. getCurrentSession的使用可以参见hibernate\hibernate-3.2\doc\tutorial\src项目
 3.  使用SessionFactory.getCurrentSession()需要在hibernate.cfg.xml中如下配置:
  * 如果采用jdbc独立引用程序配置如下:
    <property name="hibernate.current_session_context_class">thread</property>
  * 如果采用了JTA事务配置如下  
    <property name="hibernate.current_session_context_class">jta</property>
 
利于ThreadLocal模式管理Session
   早在Java1.2推出之时,Java平台中就引入了一个新的支持:java.lang.ThreadLocal,给我们在编写多线程程序
   时提供了一种新的选择。ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,
   而是thread local variable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。线程局部变量(ThreadLocal)
   其实的功用非常简单,就是为每一个使用某变量的线程都提供一个该变量值的副本,是每一个线程都可以独立地改变自己的副本,
   而不会和其它线程的副本冲突。从线程的角度看,就好像每一个线程都完全拥有一个该变量。 
   ThreadLocal是如何做到为每一个线程维护变量的副本的呢?其实实现的思路很简单,在ThreadLocal类中有一个Map,
   用于存储每一个线程的变量的副本。比如下面的示例实现(为了简单,没有考虑集合的泛型): 
 public  class  HibernateUtil  {
 
 public static final ThreadLocal session =new ThreadLocal();
 
 public  static  final  SessionFactory  sessionFactory;
  static  {
      try  {
        sessionFactory  =  new  Configuration().configure().buildSessionFactory();
      } catch (Throwable  ex) {
           throw  new  ExceptionInInitializerError(ex);
      }     
 }
 
     public  static  Session  currentSession()  throws  HibernateException  {
        Session  s  =  session.get();
        if(s  ==  null)  {
          s  =  sessionFactory.openSession();
          session.set(s);
           }
         return  s;
       }
    public  static  void  closeSession()  throws  HibernateException  {
           Session  s  =  session.get();
        if(s  !=  null)  {
            s.close();
        }
        session.set(null);
    }
 }








4:
dataSource: 要连接的 datasource (通常我们不会定义在 server.xml)
defaultAutoCommit: 对于事务是否 autoCommit, 默认值为 true
defaultReadOnly: 对于数据库是否只能读取, 默认值为 false
driverClassName:连接数据库所用的 JDBC Driver Class,
maxActive: 可以从对象池中取出的对象最大个数,为0则表示没有限制,默认为8
maxIdle: 最大等待连接中的数量,设 0 为没有限制 (对象池中对象最大个数)
minIdle:对象池中对象最小个数
maxWait: 最大等待秒数, 单位为 ms, 超过时间会丟出错误信息
password: 登陆数据库所用的密码
url: 连接数据库的 URL
username: 登陆数据库所用的帐号
validationQuery: 验证连接是否成功, SQL SELECT 指令至少要返回一行
removeAbandoned: 是否自我中断, 默认是 false
removeAbandonedTimeout: 几秒后会自我中断, removeAbandoned 必须为 true
logAbandoned: 是否记录中断事件, 默认为 false
minEvictableIdleTimeMillis:大于0 ,进行连接空闲时间判断,或为0,对空闲的连接不进行验证;默认30分钟
timeBetweenEvictionRunsMillis:失效检查线程运行时间间隔,如果小于等于0,不会启动检查线程,默认-1
testOnBorrow:取得对象时是否进行验证,检查对象是否有效,默认为false
testOnReturn:返回对象时是否进行验证,检查对象是否有效,默认为false
testWhileIdle:空闲时是否进行验证,检查对象是否有效,默认为false



帮助文档:
a)bootstrap   http://v3.bootcss.com/
b) knockout.js   http://knockoutjs.com/
f). 代码规范 http://www.cnblogs.com/lanxuezaipiao/p/3534447.html  (中文翻译版本)


























猜你喜欢

转载自blog.csdn.net/sxf1997/article/details/41757541