目前日期文章:201901 (15)

瀏覽方式: 標題列表 簡短摘要

spring boot cache 結合 redis 快取機制設定
使用spring boot版本:2.1.6

  1. pom.xml
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

 

  1. application.yml
    增加快取管理設定
    reference:
    Redis Sentinel Support https://docs.spring.io/spring-data/data-redis/docs/current/reference/html/#redis:sentinel
spring:
  cache:
    type: REDIS
  redis:
    jedis:
      pool:
        max-idle: 8
        min-idle: 0
        max-active: 8
        max-wait: -1
    sentinel:
      master: mymaster
      nodes: 127.0.0.1:26379

 

文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()

比對相同資料寫法

有一筆pojo資料,要查出與他相同的其他資料

 POJO 

@Entity
@Table(name = "RECEIVER")
public class ReceiverDTO implements Serializable {

  private static final long serialVersionUID = -5368343800218280407L;

  @Id
  private String id;

  @Column
  private String name;

  @Column
  private String email;

  @Column
  private String mobile;

  @Column
  private String phone;

 @Temporal(TemporalType.TIMESTAMP)
 @Column
 private Date updateTime;

  public MemReceiverDTO() {
    super();
  }

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
      this.name = name;
  }

  public String getEmail() {
    return email;
  }

  public void setEmail(String email) {
    this.email = email;
  }

  public String getMobile() {
    return mobile;
  }

  public void setMobile(String mobile) {
    this.mobile = mobile;
  }

  public String getPhone() {
    return phone;
  }

  public void setPhone(String phone) {
    this.phone = phone;
  }

  public Date getUpdateTime() {
    return updateTime;
  }

  public void setUpdateTime(Date updateTime) {
    this.updateTime = updateTime;
  }

}

 

 hibernate 

  public List<ReceiverDTO> findSameData(ReceiverDTO DTO) {
    //搜尋資料以Map包裝
    Map map = new HashMap();
    map.put("name",DTO.getName());
    map.put("mobile",DTO.getMobile());
    map.put("email",DTO.getEmail());

    Criteria criteria = this.getSession().createCriteria(ReceiverDTO.class);
    criteria.add(Restrictions.allEq(map));  //下條件
    criteria.addOrder(Order.desc("updateTime"));

    return criteria.list();
  }

 

 Spring Data JPA 

文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()

springdata jpa使用Example快速实现动态查询
https://blog.csdn.net/long476964/article/details/79677526

Spring Data JPA ——默认方法使用
https://segmentfault.com/a/1190000011067941


文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()

滿滿三日的行程分享,此為實際旅行的時間:
人數:2人:耐走、愛拍照會定點停留、買東西花比較多時間、不走急急忙忙路線
旅行主要目的:環球影城為主,其他為輔。想去奈良住一晚。

以下供行程參考
(相關的分享文再慢慢補上)

第 1 天  2017/09/01 ( 週五 )
flight_takeoff TAIPEI ~ OSAKA   停留時間: 05:00 ~ 08:40
directions_bus 關西機場交通株式會社 ( 関西空港 ~ 近鐵奈良車站 ) 在機場櫃檯直接買票 停留時間: 09:40 ~ 11:10
location_city 天然温泉 吉野桜の湯 御宿 野乃 奈良 寄放行李  
文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()

  @Test
  public void StringToChar() throws Exception {
    String str = "14239626";
    
    for (int i = 0; i < str.length(); ++i) {
      int tmp = (str.charAt(i) - 48);
      System.out.print(tmp);  //14239626
    }
    
    for (int i = 0; i < str.length(); ++i) {
      int tmp2 = Integer.parseInt(String.valueOf(str.charAt(i)));
      System.out.print(tmp2); //14239626
    }
    
    for (int i = 0; i < str.length(); ++i) {
      int tmp3 = Character.getNumericValue(str.charAt(i));  //char 數字的NumericValue等於自己
      System.out.print(tmp3); //14239626
    }
    

    //Char("48")~Char("57") = 0~9
    //Char(0)~Char(9) = 48~57

    for (int i = 0; i < str.length(); ++i) {
      int tmp4 = (str.charAt(i));
      System.out.print(tmp4); //4952505157545054
    }
  }

文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()

2019年櫻花預測由 日本気象株式会社 起跑

1月的預測基本上當做看看就好,提供給要買機票的人做參考

比較準確的預測需要等到3月,除非天氣忽然劇變,不然估計結果八九不離十

(計算櫻花類型各有不同,各家公司主要依 染井吉野(ソメイヨシノ)做為開花估計 )

清明連假到底幾家歡樂幾家愁?希望今年我能達成看到粉奈良的心願 (合掌)

 

2019 氣象廳公佈標本木開花時間
文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()

大阪有幾個住宿的區域我個人是比較推薦的,難波、天王寺、新大阪。
主要是交通方便,能夠從機場直達,並且到哪邊都不用轉太多次車,特別是我每次都是自由行,拉著大行李在人行群裡穿梭實在是太不方便了。

天王寺在逛街方面,比起難波百貨多且較集中,但是也少了逛小店的樂趣;晚上餐廳也不少,以居酒屋為主。移動到心齋橋、難波不遠,但是居住氛圍我覺得比起難波來說安靜舒服許多。

這次住的是天王寺車站附近的VIA INN 阿倍野天王寺,離車站步行約10分鐘,需要過天橋才可到達(走全平面比較繞路),天橋有電梯。

VIAINN 阿倍野天王寺 ヴィアインあべの天王寺

 

VIA INN 阿倍野天王寺是和唐吉訶德 ドン・キホーテ共構,樓下就是商店,唐吉訶德店內也有提供專用電梯可以直達飯店。

文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()

錯誤訊息如下,需要先確認DB Version欄位是否是null

我遇到的狀況是 A物件先做update (version is null), 接下來做select 的B物件( version is not null)
報錯報在B物件,

一直埋LOG才發現是前一條指令有問題

java.lang.NullPointerException
        at org.hibernate.type.LongType.next(LongType.java:79)
        at org.hibernate.type.LongType.next(LongType.java:40)
        at org.hibernate.engine.internal.Versioning.increment(Versioning.java:109)

文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()

2019 年 7 月 1 日,GOOGLE發佈會以行動版內容進行優先索引(過往是用電腦版網頁內容)。

在此情況下,GOOGLE建議對於 電腦版、行動版網站有不同獨立網址(非RWD網站)的網站,可進行以下的調整:

  • 行動版網站內容和電腦版網站相同。 (這個一般蠻難的)
  • 行動版和電腦版網站皆應包含結構化資料。 
  • 行動版和電腦版網站皆應包含中繼資料。 (調整一下雙頁面對應的META DATA)
  • Search Console 驗證電腦版和行動版網站。
  • 設定 hrfelang 資料:

行動版網址: m.aaa.com
電腦版網址:www.aaa.com

  • 行動版頁面需設定電腦版網址:
    <link rel="canonical" href="https://www.aaa.com/"> 
  • 電腦版頁面需設定電腦版和行動版網址:
    <link rel="canonical" href="https://www.aaa.com/"> 
    <link rel="alternate" href="https://m.aaa.com/">

REF.  https://developers.google.com/search/mobile-sites/mobile-first-indexing#mobile


文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()

 use JSTL 

model.addAttribute("listData", listData);
<c:forEach items="${listData}" var="listData">
    ${listData.name}
</c:forEach>

 

 use JS 

model.addAttribute("listData", new Gson().toJson(listData));
var listData = JSON.parse('${listData}');
$.each(listData, function(i){
    listData[i].name;
});

文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()

String sql = "...... from Tabal where col in (:colList)";

SQLQuery query = getCurrentSession().createSQLQuery(sql);
query.setParameterList("colList", String[] colValue);
query.list()

文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()

Method visibility and@Cacheable/@CachePut/@CacheEvict

When using proxies, you should apply the @Cache*annotations only to methods with public visibility.

If you do annotate protected, private or package-visible methods with these annotations, no error is raised, but the annotated method does not exhibit the configured caching settings. Consider the use of AspectJ (see below) if you need to annotate non-public methods as it changes the bytecode itself.

 

Ref : https://docs.spring.io/spring/docs/3.2.0.RC1/reference/html/cache.html

 


文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()

service需先進行delect 再select新資料

service:

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
  public List<CreditCardInfoResponse> getCreditCardList(Long fridayUid) {
      //移除資料
      prodDao.deleteByProdId(prodId);
      prodDao.flush();
      
      //撈取資料
      List<prod> prodList = prodDao.findByProdId(ProdId);
  }

Dao

  public interface prodDao{
  
        public List<prod> findByProdId(Long prodId);
        
        @Modifying
        @Transactional
        @Query("delete from Prod where prodId = :prodId")
        public int deleteByIdFridayUidAndIsDefault(Long prodId);
  }

==>

如果表定Query,實際對資料庫操作

1.  delete from PROD  where PRODID=?

2.  select PRODID, PRODNAME from PROD  where PRODID=?

文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()

ajax的return要特別注意寫法,用變數接回再傳

$(function () {
    var console.log(testGetResult());   // 抓不到預期的boolean , show undefined
        var console.log(testGetResult2());  // show true or false
});

function testGetResult() {
        $.ajax({
        url: '/getData.do',
        type: 'get',
                async: false,
                success: function (res) {
            return true;
        },
        error: function (res) {
            return false;
        }
    });
}

function testGetResult2() {
        var rtn;
    $.ajax({
        url: '/getData.do',
        type: 'get',
                async: false,
                success: function (res) {
            rtn = true;
        },
        error: function (res) {
            rtn = false;
        }
    });
        return rtn;
}

文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()

java Data object 用 JSONObject.fromObject 或 JSONArray.fromObject做轉換的時候,
會轉成一個[ object object]的模式,如下:

"itemDateFrom":{"date":18,"hours":0,"seconds":0,"month":8,"nanos":0,"timezoneOffset":-480,"year":119,"minutes":0,"time":1568736000000,"day":3}

因為和預期 ( YYYY/MM/DD ) 不同,可以加入自定義轉換方式

  1. 先自定一個轉換定義
public class DateValue implements JsonValueProcessor{

        private String format ="yyyy/MM/dd";  
        
        public DateValue(){
                super();
        }
        
        public DateValue(String datePattern){
                super();  
        this.format = datePattern;
        }
        
        @Override
        public Object processArrayValue(Object value, JsonConfig config) {
                return process(value);
        }

        @Override
    public Object processObjectValue(String key, Object value, JsonConfig config) {   
        return process(value);   
    }
        
    private Object process(Object value){
        if(value instanceof Date){
                SimpleDateFormat sdf = new SimpleDateFormat(format);    
            return sdf.format(value); 
        }   
        return value == null ? "" : value.toString();   
    }
}
  1. 進行轉換
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class , new DateValue());
//jsonConfig.registerJsonValueProcessor(Date.class , new DateValue("yyyy-MM-dd"));
JSONArray.fromObject(rtnProductUsableVoList,jsonConfig);

 


文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()