java學習

          java學習

           

          設計模式之狀態模式

          現在寫一個用狀態模式實現的根據上班時間狀態變化而行為變化的小程序,當時間<12上午上班時間,
          <13午休時間,<17下午上班時間,<21加班時間,根據時間不同,條用的類方法不同。
          狀態模式適用于當對象的狀態改變時,行為也改變,就可以使用狀態模式
          狀態接口:
          public interface State {
          void writeProgram(Work work);
          }
          不同的實現類:

          public class AfterNoonState implements State {

           @Override
           public void writeProgram(Work work) {
            if(work.getHour()<17){
             System.out.println("工作");
            }else {
             work.setCurrent(new EveningState());
             work.writeProgram();
            }

           }

          }


          public class EveningState implements State {

           @Override
           public void writeProgram(Work work) {
           if(work.isFinish()){
            work.setCurrent(new RestState());
            work.writeProgram();
           }else {
            if(work.getHour()<21){
             System.out.println("加班");
            }else {
             work.setCurrent(new SleepState());
             work.writeProgram();
            }
           }

           }

          }


          public class ForenoonState implements State {

           @Override
           public void writeProgram(Work work) {
           if(work.getHour()<12){
            System.out.println("工作時間");
           }else {
           work.setCurrent(new NoonState()); 
           work.writeProgram();
           }
            
           }

          }


          public class NoonState implements State {

           @Override
           public void writeProgram(Work work) {
            if(work.getHour()<13){
             System.out.println("午睡");
            }else {
             work.setCurrent(new AfterNoonState());
             work.writeProgram();
            }

           }

          }


          public class RestState implements State {

           @Override
           public void writeProgram(Work work) {
            System.out.println("回家");

           }

          }


          public class SleepState implements State {

           @Override
           public void writeProgram(Work work) {
            System.out.println("睡覺");

           }

          }


          調用狀態的類:

          public class Work {
          private State current;

           public Work(double hour,boolean finish){
           current = new ForenoonState();
           this.hour = hour;
           this.finish = finish;
          }
          private double hour;
          public double getHour() {
           return hour;
          }

          public State getCurrent() {
           return current;
          }
          public void setCurrent(State current) {
           this.current = current;
          }
          private boolean finish;
          public boolean isFinish() {
           return finish;
          }

          public void writeProgram(){
           current.writeProgram(this);
          }
          }


          測試類:
          public class Test {
          public static void main(String[] args) {
           Work work = new Work(20, true);
           work.writeProgram();
          }
          }

          posted @ 2013-05-06 14:24 楊軍威 閱讀(175) | 評論 (0)編輯 收藏

          mysql中查詢值是空,是null的查詢語句


          這是表數據
          SELECT * FROM t_user WHERE username IS NULL;查詢到id=8的數據
          SELECT * FROM t_user WHERE username IS NOT NULL;查詢到id=11,12,13,14的四條數據
          SELECT * FROM t_user WHERE username ='';查詢到id=11,12,13的三條數據
          SELECT * FROM t_user WHERE username ='aa';查詢到id=14的數據

          posted @ 2013-05-05 11:02 楊軍威 閱讀(391) | 評論 (0)編輯 收藏

          hibernate中的get方法和load方法的區別和使用

          get和load方法都是是利用對象的主鍵得到對象,并可以使對象處于持久態。
          load方法獲取對象時不會立即執行查詢操作,而是在第一次使用對象是再去執行查詢操作。如果查詢的對象在數據庫中不存在,load方法返回值不會為null,在第一次使用時拋出org.hibernate.ObjectNotFoundException異常。
          使用get方法獲取對象時會立即執行查詢操作,并且對象在數據庫中不存在時返回null值。
          所以我們在實際使用中多使用get方法,這樣我們可以先判斷得到的對象是否是null,再操作

          posted @ 2013-05-04 18:25 楊軍威 閱讀(281) | 評論 (0)編輯 收藏

          spring對jdbc的支持SimpleJdbcTemplate

          1.在配置文件中的配置:

          <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="com.mysql.jdbc.Driver" />
            <property name="jdbcUrl" value="jdbc:mysql:///struts" />
            <property name="properties">
             <props>
              <prop key="user">root</prop>
              <prop key="password">root</prop>

             </props>
            </property>
           </bean>
           <bean id="simpleJdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">
            <constructor-arg ref="dataSource"></constructor-arg>
           </bean>
           <bean  id="userSimpleJdbcTemplateDao" class="com.yjw.dao.UserSimpleJdbcTemplateDao">
            <property name="simpleJdbcTemplate" ref="simpleJdbcTemplate"></property>
           </bean>

          2.dao中的寫法:

          package com.yjw.dao;

          import java.sql.ResultSet;
          import java.sql.SQLException;
          import java.util.List;
          import org.springframework.jdbc.core.RowMapper;
          import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
          import com.yjw.bean.User;

          public class UserSimpleJdbcTemplateDao {

           private SimpleJdbcTemplate simpleJdbcTemplate;

           public void setSimpleJdbcTemplate(SimpleJdbcTemplate simpleJdbcTemplate) {
            this.simpleJdbcTemplate = simpleJdbcTemplate;
           }
           
           public void save(User user){
            String sql = "INSERT INTO t_user (username,PASSWORD) VALUES (?,?)";
            simpleJdbcTemplate.update(sql, user.getUsername(),user.getPassword());
           }
           public void update(User user){
            String sql = "UPDATE t_user SET username=:username ,PASSWORD=:password WHERE id=:id?";
            
            simpleJdbcTemplate.update(sql, user.getUsername(),user.getPassword(),user.getId());
           }
           public void delete(int id){
            String sql = "delete from t_user where id=?";
            simpleJdbcTemplate.update(sql, id);
           }
           private  class UserRowmapper  implements  RowMapper<User> {

            public User mapRow(ResultSet rs, int rowNum) throws SQLException {
            User u = new  User();
            u.setId(rs.getInt("id"));
            u.setUsername(rs.getString("username"));
            u.setPassword(rs.getString("password"));
             return u;
            }  
           }
           public User getUser(int id) {
            String sql = "select id,username,password from t_user where id=?";
            User user = simpleJdbcTemplate.queryForObject(sql, new UserRowmapper(), id);
            return user;
            
           }
           public List<User> getList(){
            String sql = "select id,username,password from t_user ";
            List<User> list = simpleJdbcTemplate.query(sql, new UserRowmapper() );
            return list;
           }
          }


          posted @ 2013-04-29 16:29 楊軍威 閱讀(663) | 評論 (0)編輯 收藏

          spring中aop 的配置實現

          四種通知的執行地方:前置通知
          try{
          業務代碼
          后置通知
          } catch{
          異常通知
          } finally{
          最終通知
          }
          1.需要的jar包:aspectjrt.jar,aspectjweaver.jar,cglib-nodep-2.1.3.jar
          2.在配置文件中加入

          <?xml version="1.0" encoding="UTF-8"?>
          <beans xmlns="http://www.springframework.org/schema/beans"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns:p="http://www.springframework.org/schema/p"
                   xmlns:aop="http://www.springframework.org/schema/aop"
                   xmlns:tx="http://www.springframework.org/schema/tx"
                 xmlns:context="http://www.springframework.org/schema/context"
                 xsi:schemaLocation="
          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
          http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
          http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd

          ">
          <bean id="myXmlAspect" class="com.yjw.aspect.MyXmlAspect"/>
          <!-- 配置事務切面-->
          <aop:config>
           <aop:aspect ref="myXmlAspect">
            <aop:pointcut expression="execution(* com.yjw.dao..*.*(..))" id="pointcut"/>
            <aop:before method="beforeAdvice" pointcut-ref="pointcut"/>
            <aop:after-returning method="afterReturningAdvice" returning="value" pointcut-ref="pointcut"/>
            <aop:after-throwing method="exceptionAdvice" pointcut-ref="pointcut" throwing="ex"/>
            <aop:after method="afterAdvice" pointcut-ref="pointcut"/>
           </aop:aspect>
          </aop:config>
          </beans>

           

          package com.yjw.aspect;

           

           

          public class MyXmlAspect {


           
           //前置通知

           public void  beforeAdvice(){
            System.out.println("前置通知");
           }
           //異常通知,接收異常信息

           public  void  exceptionAdvice(Exception  ex){
            System.out.println("異常出現"+ex.getMessage());
           }
           //后置通知,可以接收方法的返回值
           
           public  void  afterReturningAdvice(Object  value){
            System.out.println("后置通知"+value);
           }
           //最終通知

           public  void  afterAdvice(){
            System.out.println("after");
           }
          }

           

          posted @ 2013-04-29 11:50 楊軍威 閱讀(250) | 評論 (0)編輯 收藏

          spring中aop的annotation的寫法

          四種通知的執行地方:前置通知
          try{
          業務代碼
          后置通知
          } catch{
          異常通知
          } finally{
          最終通知
          }
          1.需要的jar包:aspectjrt.jar,aspectjweaver.jar,cglib-nodep-2.1.3.jar
          2.在配置文件中加入

          <?xml version="1.0" encoding="UTF-8"?>
          <beans xmlns="       xmlns:xsi="        xmlns:p="         xmlns:aop="         xmlns:tx="       xmlns:context="       xsi:schemaLocation="
          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
          http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
          http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd

          ">
          <!-- 讓spring支持annotation的aop -->
          <aop:aspectj-autoproxy/>
          <!-- 把切面類交給spring -->
          <bean id="myAspece" class="com.yjw.aspect.MyAspect"/>

          </beans>

          package com.yjw.aspect;


          import org.aspectj.lang.annotation.After;
          import org.aspectj.lang.annotation.AfterReturning;
          import org.aspectj.lang.annotation.AfterThrowing;
          import org.aspectj.lang.annotation.Aspect;
          import org.aspectj.lang.annotation.Before;
          import org.aspectj.lang.annotation.Pointcut;
          //定義切面類,存放通知
          @Aspect
          public class MyAspect {

           //切入點
           /**第一個星號代表返回任何類型的數據,bean后的兩個點代表本包及其子包,
            * 第二個星號代表中間的所有的類;
            * 第三個星號代表中間的所有的方法;
            * (..)小括號代表參數列表,兩個點代表參數類型不限
            */
           
           @Pointcut("execution(* com.yjw.dao..*.*(..))")
           public void  pointCut(){}
           //前置通知
           @Before(" pointCut()")
           public void  beforeAdvice(){
            System.out.println("前置通知");
           }
           //異常通知,接收異常信息
           @AfterThrowing( pointcut=" pointCut()",throwing="ex")
           public  void  exceptionAdvice(Exception  ex){
            System.out.println("異常出現"+ex.getMessage());
           }
           //后置通知,可以接收方法的返回值
           @AfterReturning( pointcut=" pointCut()",returning="value")
           public  void  afterReturningAdvice(Object  value){
            System.out.println("后置通知"+value);
           }
           //最終通知
           @After(" pointCut()")
           public  void  afterAdvice(){
            System.out.println("zuizhong");
           }

          }


          posted @ 2013-04-29 11:35 楊軍威 閱讀(244) | 評論 (0)編輯 收藏

          hibernate中使用原生sql語句查詢集合和對象

          查詢集合
           String sql = "select id, address,userid from t_address where userid in(select id from t_user where id in (select id from t_card where cardnum=112))";
           SQLQuery query = session.createSQLQuery(sql).addEntity(Address.class);
           List list = session.createSQLQuery(sql).list();
          for(Object a : list){
           Object[] address = (Object[]) a;
           System.out.println(address[0]+"  "+address[1]+"  "+address[2]);
          }
          查詢一個對象
           String sql = "select id,username,password from t_user where id in (select id from t_card where cardnum=112)";
           SQLQuery query = session.createSQLQuery(sql).addEntity(User.class);
           User user = (User) query.uniqueResult();
          System.out.println(user.getPwd());

          posted @ 2013-04-23 23:28 楊軍威 閱讀(516) | 評論 (0)編輯 收藏

          設計模式之單例模式

          單例就是在系統運行中只有一個實例對象
          public class Factory {

              private  static Factory factory = new Factory();
              private Factory(){
                  System.out.println("--");
              }
              public static Factory getFactory(){
                  return factory;
                  
              }
              public void say(){
                  System.out.println("say");
              }
          }
          第二種
          public class Factory {

              private  static Factory factory =null;
              private Factory(){
                  System.out.println("--");
              }
              public synchronized static Factory getFactory(){
                  if(factory==null){
                      factory = new Factory();
                  }
                  return factory;
                  
              }
              public void say(){
                  System.out.println("say");
              }
          }

          posted @ 2013-04-23 16:21 楊軍威 閱讀(134) | 評論 (0)編輯 收藏

          設計模式之適配器模式

          將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
          例子,讓羊的叫聲和狼一樣,羊就是一個適配器:
          public class Wolf {

              public void run() {
                  System.out.println("wolf run");
              }
              
              public void ho() {
                  System.out.println("wolf ho");
              }
          }
          適配器接口:
          public interface Sheep {

              public void run();
              public void ho();
          }
          實現類:
          public class SheepAdapter implements Sheep{

              private Wolf wolf;
              public SheepAdapter(Wolf wolf) {
                  this.wolf = wolf;
              }
              
              @Override
              public void run() {
                  wolf.run();
              }

              @Override
              public void ho() {
                  wolf.ho();
              }

          }

          測試類:
              public static void main(String[] args) {
                  
                  Wolf w = new Wolf();
                  Sheep sa = new SheepAdapter(w);
                  sa.run();
                  sa.ho();
                  
              }
          }

          posted @ 2013-04-23 15:35 楊軍威 閱讀(144) | 評論 (0)編輯 收藏

          設計模式之裝飾者模式

          動態地給一個對象添加一些額外的職責。就增加功能來說,Decorator模式相比生成子類更為靈活。
          例子:
          被裝飾的接口:
          public interface Cake {

              public float cost();
          }
          接口的實現類:
          public class MilkCake implements Cake{
              @Override
              public float cost() {
                  return 100f;
              }
          }
          裝飾者抽象類:
          public abstract class CakeDecorator implements Cake{

          }
          裝飾者的實現類
          public class Chocolate extends CakeDecorator{

              private Cake cake;
              
              public Chocolate(Cake cake) {
                  this.cake = cake;
              }
              
              @Override
              public float cost() {
                  float chocolatePrice = 25f;
                  return cake.cost() + chocolatePrice;
              }

          }
          public class Berry extends CakeDecorator {

              private Cake cake;
              public Berry(Cake cake) {
                  this.cake = cake;
              }
              
              @Override
              public float cost() {
                  float berryPrice = 5f;
                  return cake.cost() + berryPrice;
              }    
          }
          測試類:
          public class Test {

              public static void main(String[] args)  {
                  
                  MilkCake mc = new MilkCake();//牛奶蛋糕
                  System.out.println(mc.cost());
                  Berry b = new Berry(mc);//牛奶草莓蛋糕
                  System.out.println(b.cost());
                  Chocolate c = new Chocolate(b);//牛奶草莓巧克力蛋糕
                  System.out.println("付款:" + c.cost());
                  
                  
                  
              }
          }

          posted @ 2013-04-23 14:21 楊軍威 閱讀(157) | 評論 (0)編輯 收藏

          僅列出標題
          共43頁: First 上一頁 19 20 21 22 23 24 25 26 27 下一頁 Last 

          導航

          統計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 类乌齐县| 沂南县| 安龙县| 儋州市| 松桃| 伊吾县| 湘潭县| 舒兰市| 巫溪县| 灌南县| 镇康县| 神木县| 逊克县| 彭山县| 瑞昌市| 天门市| 汉源县| 宁乡县| 黄龙县| 福海县| 收藏| 喀什市| 巍山| 荥经县| 远安县| 焦作市| 肥东县| 高雄市| 尉犁县| 河南省| 大宁县| 双江| 肥西县| 皮山县| 获嘉县| 会宁县| 武城县| 阿图什市| 马关县| 务川| 滦平县|