最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot集成jdbcTemplate過(guò)程解析

 更新時(shí)間:2020年04月22日 10:37:05   作者:知識(shí)追尋者  
這篇文章主要介紹了Springboot集成jdbcTemplate過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

一 說(shuō)明

實(shí)際工作中其實(shí)很少會(huì)用到j(luò)dbcTemplate去操作數(shù)據(jù)庫(kù),因?yàn)槠涫褂梅绞讲皇呛莒`活,sql的拼接能力不強(qiáng);實(shí)際上jdbcTemplate是屬于spring自帶的數(shù)據(jù)層模板,在spring中可以說(shuō)是比較失敗的一個(gè)案例,原因是當(dāng)代流行mybatis當(dāng)做持久層訪問(wèn)數(shù)據(jù)庫(kù),其優(yōu)越的sql拼接能力、動(dòng)態(tài)sql、半自動(dòng)化映射、和易于sql優(yōu)化的特性,深受廣大互聯(lián)網(wǎng)公司的喜愛(ài),并且mybatis的市場(chǎng)占有率不斷的上升,hibernate的市場(chǎng)不斷縮水,可以說(shuō)hibernate已經(jīng)這種強(qiáng)映射關(guān)系的持久層模型已經(jīng)走到互聯(lián)網(wǎng)時(shí)代的盡頭了。

本文寫(xiě)jdbcTemplate只是當(dāng)作大家的一個(gè)入門(mén)學(xué)習(xí),可以說(shuō)以后你很難用到這門(mén)技術(shù),所以不會(huì)深入研究,有興趣的朋友可以專(zhuān)欄我其他關(guān)于springboot的集成系列。本次演示使用jdk1.8,mysql5.6,springboot2.1。​

二數(shù)據(jù)庫(kù)建表和實(shí)體

user表,里面有三個(gè)屬性 用戶id、 用戶名和電話號(hào)碼。

CREATE TABLE `user` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用戶id',
 `name` varchar(255) DEFAULT NULL COMMENT '用戶名',
 `telephone` varchar(255) DEFAULT NULL COMMENT '用戶電話',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

user表對(duì)應(yīng)的實(shí)體:

/**
 * @Author lsc
 * @Description <p>pojo </p>
 * @Date 2019/11/2 10:16
 */
public class User {

  // id
  private Long id;
  // 姓名
  private String name;
  // 電話
  private String telephone;
  // 省略 set get
}

三 dao層

對(duì)于使用jdbcTemplate,我們的dao層需要接口定義crud操作方法,其實(shí)現(xiàn)類(lèi)則進(jìn)行具體的sql操作,很多開(kāi)發(fā)人員沒(méi)有這種解耦的思想,往往就直接在servic層操作sql,可以說(shuō)沒(méi)有完整的一個(gè)知識(shí)體系,往往會(huì)造成后期維護(hù)困難,項(xiàng)目無(wú)法進(jìn)行下去;

3.1 dao接口

/**
 * @Author lsc
 * @Description <p> user dao 接口 </p>
 * @Date 2019/11/2 10:19
 */
public interface UserDao {

  // 添加
  int addUser(User user);
  // 改
  int updateUser(User user);
  // 刪
  int deleteUser(Long id);
  // 通過(guò)id查詢(xún)
  User findUserbyId(Long id);
}

3.2 dao層實(shí)現(xiàn)類(lèi)

dao層的實(shí)現(xiàn)類(lèi)才是具體操作sql的地方。

/**
 * @Author lsc
 * @Description <p> user 持久層 </p>
 * @Date 2019/11/2 10:22
 */
@Repository
public class UserDaoImpl implements UserDao {

  // 注入jdbc模板
  @Autowired
  private JdbcTemplate jdbcTemplate;

  @Override
  public int addUser(User user) {
    // sql
    String sql = "insert into user (name,telephone) values (?,?)";
    // jdbc insert
    return jdbcTemplate.update(sql,user.getName(),user.getTelephone());
  }

  @Override
  public int updateUser(User user) {
    // sql
    String sql = "update user set name = ?, telephone = ? where id = ?";
    // jdbc updae
    return jdbcTemplate.update(sql,user.getName(),user.getTelephone(),user.getId());
  }

  @Override
  public int deleteUser(Long id) {
    // sql
    String sql = "delete from user where id = ?";
    // delete
    return jdbcTemplate.update(sql,id);
  }

  @Override
  public User findUserbyId(Long id) {
    // sql
    String sql = "select * from user where id = ?";
    // params
    Object[] params = new Object[]{id};
    // rowMapper
    BeanPropertyRowMapper rowMapper = new BeanPropertyRowMapper(User.class);
    // jdbc query
    List<User> query = jdbcTemplate.query(sql, params, rowMapper);
    // return user
    return query.get(0);
  }
}

四 service層

4.1 service層接口

service層接口定義業(yè)務(wù)的方法,提供給控制層調(diào)用。

public interface UserService {

  // 添加
  int addUser(User user);
  // 改
  int updateUser(User user);
  // 刪
  int deleteUser(Long id);
  // 通過(guò)id查詢(xún)
  User findUserbyId(Long id);
}

4.2 service層實(shí)現(xiàn)類(lèi)

service層的實(shí)現(xiàn)類(lèi)才是具體寫(xiě)業(yè)務(wù)邏輯代碼的地方。

/**
 * @Author lsc
 * @Description <p> user service </p>
 * @Date 2019/11/2 10:37
 */
@Service
public class UserServiceImpl implements UserService {

  @Autowired
  UserDao userDao;

  @Override
  public int addUser(User user) {
    return userDao.addUser(user);
  }

  @Override
  public int updateUser(User user) {
    return userDao.updateUser(user);
  }

  @Override
  public int deleteUser(Long id) {
    return userDao.deleteUser(id);
  }

  @Override
  public User findUserbyId(Long id) {
    return userDao.findUserbyId(id) ;
  }
}

五 controller

這是一個(gè)簡(jiǎn)單的restful層的api,實(shí)現(xiàn)crud功能。

/**
 * @Author lsc
 * @Description <p>user 控制層 </p>
 * @Date 2019/11/2 10:43
 */
@RestController
public class UserController {

  @Autowired
  UserService userService;

  // 查詢(xún)user
  @GetMapping("user/{id}")
  public User getUser(@PathVariable Long id){
    return userService.findUserbyId(id);
  }
  // 添加user
  @PostMapping("user")
  public int addUser(@RequestBody User user){
    return userService.addUser(user);
  }

  //修改 user
  @PutMapping("user/{id}")
  public int updateUser(@PathVariable Long id,@RequestBody User user){
    user.setId(id);
    return userService.updateUser(user);
  }

  // 刪除user
  @DeleteMapping("user/{id}")
  public int deleteUser(@PathVariable Long id){
    return userService.deleteUser(id);
  }
}

六 配置文件

配置文件不使用properties的原因是yml文件的語(yǔ)法格式更加簡(jiǎn)練明了,在配置文件中的注解已經(jīng)很詳細(xì),所以不會(huì)贅述。

spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver #數(shù)據(jù)庫(kù)驅(qū)動(dòng)
url: jdbc:mysql://192.168.0.105:3306/springboot?useUnicode=true&characterEncoding=utf-8 #數(shù)據(jù)庫(kù)地址
username: root #數(shù)據(jù)庫(kù)賬號(hào)
password: 123456 # 數(shù)據(jù)密碼
type: com.alibaba.druid.pool.DruidDataSource # 連接池類(lèi)型
druid:
#初始化連接池的連接數(shù)量
initial-size: 5
# 最小
min-idle: 5
# 最大
max-active: 20
#配置獲取連接等待超時(shí)的時(shí)間
max-wait: 6000
#配置間隔多久才進(jìn)行一次檢測(cè),檢測(cè)需要關(guān)閉的空閑連接,單位是毫秒
time-between-eviction-runs-millis: 6000
# 配置一個(gè)連接在池中最小生存的時(shí)間,單位是毫秒
min-evictable-idle-time-millis: 3000

七 pom.xml

很抱歉我把xml放在最后面了

	 <parent>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-parent</artifactId>
	    <version>2.1.1.RELEASE</version>
	    <relativePath/>
	  </parent>
	 <dependencies>
    <!-- jdbc 啟動(dòng)器-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <!-- mysql 啟動(dòng)器 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <!-- 連接池-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.15</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- -->

  </dependencies>

八 測(cè)試工具說(shuō)明

大家可以通過(guò)postman等開(kāi)發(fā)工具進(jìn)行restful風(fēng)格接口測(cè)試,作為后端開(kāi)發(fā)者,就別去寫(xiě)頁(yè)面了。

九 測(cè)試鏈接池說(shuō)明

如果大家想知道怎么測(cè)試連接池是否連接成功可以實(shí)現(xiàn)ApplicationContextAware接口進(jìn)行測(cè)試,具體的代碼如下:

/**
 * @Author lsc
 * @Description <p> 實(shí)現(xiàn)spring bean 生命周期接口</p>
 * @Date 2019/11/2 10:08
 */
@Component
public class DatabaseVision implements ApplicationContextAware {

  ApplicationContext applicationContext = null;
  // spring ioc 初始化 bean 的時(shí)候調(diào)用
  @Override
  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    // 獲得applicationContext
    this.applicationContext = applicationContext;
    // 獲得dataSource
    DataSource dataSource = applicationContext.getBean(DataSource.class);
    // 啟動(dòng) springboot application print com.alibaba.druid.pool.DruidDataSource
    System.out.println(dataSource.getClass().getName());
  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • HashMap 和 HashSet的區(qū)別

    HashMap 和 HashSet的區(qū)別

    本文主要介紹HashMap 和 HashSet的區(qū)別,這里整理了詳細(xì)的資料來(lái)說(shuō)名兩者的區(qū)別,并說(shuō)明如何使用該方法,有需要的小伙伴可以參考下
    2016-09-09
  • Java常用的數(shù)據(jù)脫敏方法(手機(jī)、郵箱、身份證號(hào))

    Java常用的數(shù)據(jù)脫敏方法(手機(jī)、郵箱、身份證號(hào))

    這篇文章主要給大家介紹了關(guān)于Java常用的數(shù)據(jù)脫敏(手機(jī)、郵箱、身份證號(hào))的相關(guān)資料,信息脫敏對(duì)某些敏感信息通過(guò)脫敏規(guī)則進(jìn)行數(shù)據(jù)的變形,實(shí)現(xiàn)敏感隱私數(shù)據(jù)的可靠保護(hù),需要的朋友可以參考下
    2023-07-07
  • SpringCloud如何實(shí)現(xiàn)Zuul集群(負(fù)載均衡)

    SpringCloud如何實(shí)現(xiàn)Zuul集群(負(fù)載均衡)

    這篇文章主要介紹了SpringCloud如何實(shí)現(xiàn)Zuul集群(負(fù)載均衡)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 淺談SpringBoot項(xiàng)目如何讓前端開(kāi)發(fā)提高效率(小技巧)

    淺談SpringBoot項(xiàng)目如何讓前端開(kāi)發(fā)提高效率(小技巧)

    這篇文章主要介紹了淺談SpringBoot項(xiàng)目如何讓前端開(kāi)發(fā)提高效率(小技巧),主要介紹了Swagger和Nginx提高效率的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Java ScheduledExecutorService定時(shí)任務(wù)案例講解

    Java ScheduledExecutorService定時(shí)任務(wù)案例講解

    這篇文章主要介紹了Java ScheduledExecutorService定時(shí)任務(wù)案例講解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java實(shí)現(xiàn)5種限流算法及7種限流方式

    Java實(shí)現(xiàn)5種限流算法及7種限流方式

    本文主要介紹了Java實(shí)現(xiàn)5種限流算法及7種限流方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 使用IDEA啟動(dòng)項(xiàng)目遇見(jiàn)ClassNotFoundException的解決方案

    使用IDEA啟動(dòng)項(xiàng)目遇見(jiàn)ClassNotFoundException的解決方案

    這篇文章主要介紹了使用IDEA啟動(dòng)項(xiàng)目遇見(jiàn)ClassNotFoundException的正確解決方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Spring Boot 基于注解的 Redis 緩存使用詳解

    Spring Boot 基于注解的 Redis 緩存使用詳解

    本篇文章主要介紹了Spring Boot 基于注解的 Redis 緩存使用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • 淺談標(biāo)簽和JLabel類(lèi)構(gòu)造方法

    淺談標(biāo)簽和JLabel類(lèi)構(gòu)造方法

    這篇文章主要介紹了標(biāo)簽和JLabel類(lèi)構(gòu)造方法,具有一定參考價(jià)值,需要的朋友可以參考下。
    2017-09-09
  • Java集合和數(shù)組的區(qū)別

    Java集合和數(shù)組的區(qū)別

    本文主要介紹了Java集合和數(shù)組的區(qū)別。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02

最新評(píng)論

安平县| 通辽市| 旬阳县| 安图县| 金平| 永定县| 镇康县| 大荔县| 广安市| 白水县| 武夷山市| 成武县| 普格县| 马关县| 大竹县| 镇平县| 凉山| 汾阳市| 黄骅市| 湟中县| 邵阳县| 修水县| 姚安县| 资阳市| 新沂市| 贺州市| 大丰市| 石河子市| 鲁甸县| 时尚| 民县| 凉山| 疏勒县| 荃湾区| 唐海县| 沁源县| 耒阳市| 康乐县| 哈尔滨市| 昆明市| 巴中市|