日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

对比Spring Boot中的JdbcClient与JdbcTemplate

發(fā)布時間:2024/1/11 javascript 25 coder
生活随笔 收集整理的這篇文章主要介紹了 对比Spring Boot中的JdbcClient与JdbcTemplate 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文我們一起看看Spring Boot中 JdbcClientJdbcTemplate 之間的差異。

以下內(nèi)容使用的Java和Spring Boot版本為:

  • Java 21
  • Spring Boot 3.2.1

假設(shè)我們有一個ICustomerService接口:

public interface ICustomerService {
    
    List<Customer> getAllCustomer();

    Optional<Customer> getCustomerById(int id);

    void insert(Customer customer);

    void update(int id, Customer customer);
    
    void delete(int id);
}

其中,涵蓋了我們常見的數(shù)據(jù)CRUD操作。

下面就來一起看看,分別使用 JDBC ClientJDBC Template 的實(shí)現(xiàn)。

初始化對比

JdbcTemplate的初始化:

private final JdbcTemplate jdbcTemplate;

public CustomerJdbcTemplateService(JdbcTemplate jdbcTemplate){
  this.jdbcTemplate = jdbcTemplate;
}

JdbcClient的初始化;

private final JdbcClient jdbcClient;

public CustomerJdbcClientService(JdbcClient jdbcClient){
  this.jdbcClient = jdbcClient;
}

增刪改查的實(shí)現(xiàn)對比

如果您學(xué)習(xí)過程中如遇困難?可以加入我們超高質(zhì)量的Spring技術(shù)交流群,參與交流與討論,更好的學(xué)習(xí)與進(jìn)步!更多Spring Boot教程可以點(diǎn)擊直達(dá)!,歡迎收藏與轉(zhuǎn)發(fā)支持!

查詢的實(shí)現(xiàn)對比

getAllCustomer查詢返回集合數(shù)據(jù)的實(shí)現(xiàn)對比:

// jdbcTemplate實(shí)現(xiàn)
private final RowMapper<Customer> rowMapper = (rs, row)
     -> new Customer(rs.getInt("id"), rs.getString("name"), rs.getString("lastname"), rs.getDate("birthday"));

public List<Customer> getAllCustomer() {
  return jdbcTemplate.query("select id, name, lastname, birthday from customer", rowMapper);
}

// jdbcClient實(shí)現(xiàn)
public List<Customer> getAllCustomer(){
  return jdbcClient.sql("select id, name, lastname, birthday from customer").query(Customer.class).list();
}

getCustomerById查詢返回單條數(shù)據(jù)的實(shí)現(xiàn)對比:

// jdbcTemplate實(shí)現(xiàn)
public Optional<Customer> getCustomerById(int id) {
  Customer customer = null;
  try {
    customer = jdbcTemplate.queryForObject("select id, name, lastname, birthday from customer where id = ?", rowMapper,  id );
  } catch (DataAccessException ex){
    LOG.error("Data not found. Id parameter: " + id, ex);
  }
  return Optional.ofNullable(customer);
}

// jdbcClient實(shí)現(xiàn)
public Optional<Customer> getCustomerById(int id){
  return jdbcClient.sql("select id, name, lastname, birthday from customer where id= :id")
                   .param("id", id)
                   .query(Customer.class)
                   .optional();
}

insert插入數(shù)據(jù)的實(shí)現(xiàn)對比

// jdbcTemplate實(shí)現(xiàn)
public void insert(Customer customer) {
  int inserted = jdbcTemplate.update("insert into customer (id, name, lastname, birthday) values (?,?,?,?)",
                 customer.id(), customer.name(), customer.lastname(),customer.birthday());
  Assert.state(inserted == 1 , "An exception error occurred while inserting customer");
}

// jdbcClient實(shí)現(xiàn)
public void insert(Customer customer){
  int inserted = jdbcClient.sql("insert into customer (id, name, lastname, birthday) values (?,?,?,?)")
                .params(List.of(customer.id(), customer.name(), customer.lastname(), customer.birthday()))
                .update();
  Assert.state(inserted == 1 , "An exception error occurred while inserting customer");
}

update更新數(shù)據(jù)的實(shí)現(xiàn)對比

// jdbcTemplate實(shí)現(xiàn)
public void update(int id, Customer customer) {
  int updated = jdbcTemplate.update("update customer set name = ?, lastname = ?, birthday = ? where id = ? ",
                customer.name(), customer.lastname(),customer.birthday(), id);
  Assert.state(updated == 1 , "An exception error occurred while updating customer");
}

// jdbcClient實(shí)現(xiàn)
public void update(int id, Customer customer){
  int updated = jdbcClient.sql("update customer set name = ?, lastname = ?, birthday = ? where id = ?")
                .params(List.of(customer.name(), customer.lastname(), customer.birthday(), id))
                .update();
  Assert.state(updated == 1, "An exception error occurred while updating customer");
}

delete刪除數(shù)據(jù)的實(shí)現(xiàn)對比

// jdbcTemplate實(shí)現(xiàn)
public void delete(int id) {
  int deleted = jdbcTemplate.update("delete from customer where id = ?", id);
  Assert.state(deleted == 1 , "An exception error occurred while deleting customer");
}

// jdbcClient實(shí)現(xiàn)
public void delete(int id) {
  int deleted = jdbcClient.sql("delete from customer where id = :id").param("id",id).update();
  Assert.state(deleted == 1, "An exception error occurred while updating customer");
}

總結(jié)

上面我們分別演示了JdbcClientJdbcTemplate從初始化到真正執(zhí)行增刪改查操作的代碼樣例。總體上來說,JdbcClient的實(shí)現(xiàn)更為簡潔方便。如果不考慮其他ORM框架的情況下,在未來的Spring Boot版本中,我會更偏向于選擇JdbcClient來操作數(shù)據(jù)庫。那么您覺得怎么樣呢?留言區(qū)一起聊聊~

歡迎關(guān)注我的公眾號:程序猿DD。第一時間了解前沿行業(yè)消息、分享深度技術(shù)干貨、獲取優(yōu)質(zhì)學(xué)習(xí)資源

總結(jié)

以上是生活随笔為你收集整理的对比Spring Boot中的JdbcClient与JdbcTemplate的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 好吊色av| 欧美性视频播放 | 国产又粗又猛又爽又 | 精品久久久久久久免费人妻 | 亚洲日本成人在线观看 | 人人爱人人看 | 麻豆视频网站在线观看 | 97se亚洲 | 亚洲精品综合在线 | 日韩最新在线 | 色玖玖综合 | 免费吃奶摸下激烈视频 | 欧美 在线| 欧美自拍视频 | 亚洲狠狠爱 | 狠狠97 | 人妻丰满熟妇av无码久久洗澡 | 人人超碰97 | 国产一区在线视频观看 | 中文字幕精品一二三四五六七八 | 日日爱视频| 国精产品一区一区三区mba下载 | 视频在线观看一区二区 | 姐姐的朋友2在线 | 国产毛片久久 | 日韩 国产 在线 | 日韩精品免费一区二区三区 | 特级西西人体444www高清 | 中文字幕日本一区二区 | 无遮挡裸光屁屁打屁股男男 | 九九热久久免费视频 | 亚洲国产欧美一区二区三区深喉 | 久久精品国产77777蜜臀 | 无码精品在线视频 | 蜜桃av一区二区三区 | 欧美黑人xxxⅹ高潮交 | 佐佐木明希电影 | 男生操男生网站 | 久热久 | 国产精品成人3p一区二区三区 | 黄色小视频免费网站 | 免费色网站 | 麻豆 美女 丝袜 人妻 中文 | 亚洲AV乱码国产精品观看麻豆 | 天堂资源网| 波多野结衣 在线 | 国产又黄又猛视频 | 免费看91视频 | 美女屁股眼视频网站 | 一品道av | 午夜性福利 | 国产又色又爽无遮挡免费动态图 | 精品免费囯产一区二区三区 | 国产精品久久久久久久久久东京 | 成人av福利 | 在线观看亚洲免费视频 | 美日韩一二三区 | 精品人妻一区二区三区四区五区 | 国产婷婷一区二区三区 | 夫妻精品| av老司机在线观看 | 欧美在线性视频 | 久青草视频在线 | 亚洲依依 | 日本午夜激情 | 午夜黄色福利 | 91久久精品一区二区别 | 亚洲国产成人精品久久 | 羞羞在线观看 | 一边摸一边抽搐一进一出视频 | 欧美色频 | 日本久久久久久 | 国产黄色小视频在线观看 | 毛片全黄| 狠狠躁18三区二区一区视频 | 日韩在线观看不卡 | 亚洲伦理在线视频 | 日本少妇喷水视频 | 国产乱淫精品一区二区三区毛片 | 国产精品成人免费精品自在线观看 | 2022av视频 | 五月天男人天堂 | 999毛片 | 黄色免费视频 | 欧美精品一区二区蜜桃 | 亚洲精品乱码久久久久久蜜桃麻豆 | xxx国产 | 日本精品中文字幕 | 国产黄色美女视频 | 欧美日韩一区二区三区不卡 | 麻豆免费观看视频 | h欧美| 麻豆免费在线观看视频 | 免费av网址在线 | 国产丝袜第一页 | 亚洲av无码国产精品久久不卡 | 不卡影院 | 三级不卡视频 | 四虎午夜 |