Spring-data-jdbcTemplate案例

2020-11-14 碼農向前衝

本節主要學習Spring-data針對jdbc的封裝JdbcTemplate技術。

1.配置坐標

新建maven項目,pom.xml中配置坐標:

<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.2.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.2.7.RELEASE</version> </dependency> <!-- hikaricp --> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.5</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.7.0-M1</version> <scope>test</scope> </dependency> <!--日誌框架--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.30</version> <scope>compile</scope> </dependency> </dependencies>

2.編寫配置文件

jdbc.properties

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306/cms?useUnicode=true&characterEncoding=utf8&useSSL=truejdbc.username=rootjdbc.password=rootreadOnly=falseconnectionTimeout=30000idleTimeout=600000maxLifetime=1800000maximumPoolSize=15

applicationContext.xml

<?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!-- 定義掃描註解所在的包 --> <context:component-scan base-package="raky.train" /> <!--1. 導入資源文件,屬性配置文件 --> <context:property-placeholder location="classpath:jdbc.properties" /> <!--2. 配置數據源,連接池:dbcp/dbcp2/c3p0/druid/HikariCP --> <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="readOnly" value="${readOnly}" /> <property name="connectionTimeout" value="${connectionTimeout}" /> <property name="idleTimeout" value="${idleTimeout}" /> <property name="maxLifetime" value="${maxLifetime}" /> <property name="maximumPoolSize" value="${maximumPoolSize}" /> </bean> <!-- 3.集成jdbcTemplate : spring對jdbc的輕度封裝,相當於apache dbutils --> <!-- jdbcTemplate 相當於Connection[jdbc],QueryRunner[dbutils] --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> </bean></beans>

3.編寫實體類

User.java

package raky.train.entity;import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;@Data@Builder@NoArgsConstructor@AllArgsConstructorpublic class User { private Integer id; private String name; private String pass; private Integer age;}

4.編寫持久化層代碼

UserDao.java

package raky.train.dao;import java.util.List;import raky.train.entity.User;public interface UserDao { int insert(User user); int update(User user); int delete(Integer id); User getOne(Integer id); List<User> getList(User user);}

UserDaoImpl.java

package raky.train.dao.impl;import org.springframework.context.annotation.Primary;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.support.JdbcDaoSupport;import org.springframework.stereotype.Repository;import raky.train.dao.UserDao;import raky.train.entity.User;import java.util.List;@Primary@Repositorypublic class UserDaoImpl extends JdbcDaoSupport implements UserDao{ public UserDaoImpl(JdbcTemplate jdbcTemplate){ super.setJdbcTemplate(jdbcTemplate); } @Override public int insert(User user) { final String sql = "insert into user(name, pass, age)values(?, ?, ?)"; return super.getJdbcTemplate() .update(sql,user.getName(), user.getPass(), user.getAge()); } @Override public int update(User user) { final String sql = "update user set name=?, pass=?, age=? where id= ?"; return super.getJdbcTemplate() .update(sql, user.getName(), user.getPass(), user.getAge(), user.getId()); } @Override public int delete(Integer id) { final String sql = "delete from user where id=?"; return super.getJdbcTemplate().update(sql,id); } @Override public User getOne(Integer id) { final String sql = "select * from user where id = ?"; return super.getJdbcTemplate() .queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), id); } @Override public List<User> getList(User user) { final String sql = "select * from user"; return super.getJdbcTemplate() .query(sql, new BeanPropertyRowMapper<User>(User.class)); }}

3.5編寫服務層代碼

UserService.java

package raky.train.service;import java.util.List;import raky.train.entity.User;public interface UserService { int insert(User user); int update(User user); int delete(Integer id); User getOne(Integer id); List<User> getList(User user);}

UserServiceImpl.java

package raky.train.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import raky.train.dao.UserDao;import raky.train.entity.User;import raky.train.service.UserService;@Servicepublic class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override public int insert(User user) { return userDao.insert(user); } @Override public int update(User user) { return userDao.update(user); } @Override public int delete(Integer id) { return userDao.delete(id); } @Override public User getOne(Integer id) { return userDao.getOne(id); } @Override public List<User> getList(User user) { return userDao.getList(user); }}

3.6編寫控制層代碼

UserController.java

package raky.train.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import raky.train.entity.User;import raky.train.service.UserService;@Controllerpublic class UserController { @Autowired private UserService userService; public int insert(User user) { return userService.insert(user); } public int update(User user) { return userService.update(user); } public int delete(Integer id) { return userService.delete(id); } public User getOne(Integer id) { return userService.getOne(id); } public List<User> getList(User user) { return userService.getList(user); }}

3.7編寫測試代碼

UserControllerTest.java

package raky.train.controller;import lombok.extern.slf4j.Slf4j;import org.junit.jupiter.api.Test;import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;import raky.train.entity.User;import javax.annotation.Resource;import java.util.List;import static org.junit.jupiter.api.Assertions.*;@Slf4j@SpringJUnitConfig(locations = {"classpath:applicationContext.xml"})public class UserControllerTest { @Resource private UserController userController; @Test void insert() { User user = User.builder().name("abc").pass("abc").build(); int result = userController.insert(user); log.info("===>user:{}",user); log.info("===>{}",result); assertEquals(result,1); } @Test void update() { User user = User.builder().id(22).name("cba").pass("cba").age(99).build(); int result = userController.update(user); log.info("===>{}",result); assertEquals(result,1); } @Test void delete() { int result = userController.delete(333); log.info("===>{}",result); assertEquals(result,0); } @Test void getOne() { User user = userController.getOne(1); log.info("===>{}",user); assertNotNull(user); } @Test void getList() { User user = User.builder().build(); List<User> userList = userController.getList(user); userList.forEach(x -> log.debug("===>{}",x)); }}

3.8調試運行

調試運行測試代碼,結果如下:

至此,Spring-data-jdbcTemplate案例學習筆記整理完畢。希望對大家有幫助。越分享越快樂。

相關焦點

  • Spring-data-mybatis案例
    本節主要學習Spring-data-mybatis案例,即spring集成mybatis框架。" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context
  • SpringBoot整合jdbcTemplate案例
    本節主要學習SpringBoot整合jdbcTemplate的案例。1.jdbcTemplate介紹在java項目或產品實際開發中,對資料庫操作性能要求比較高的情況下,比如金融或銀行類的系統或產品會直接使用jdbc編寫代碼,雖然代碼繁瑣,但是執行效率高。
  • Spring Data 簡介和踩坑心得
    引入spring data,特別是在spring boot之後,最大的好處就是簡化了配置。換句話說,幾個註解,幾行yml配置,一套數據源就整合進來了。省去了查詢官方手冊的時間。data 這套組合實際上成熟度只能說一般般,但是使用起來確實方便。
  • 簡單了解下spring data jpa
    JPA是在吸收現有ORM框架的基礎上發展而來,易於使用,伸縮性強jpa的特點ORM映射元數據: 支持XML和註解兩種元數據的形式,元數據描述對象和表之間的映射關係API: 操作實體對象來執行CRUD操作查詢語言: 通過面向對象而非面向資料庫的查詢語言(JPQL)查詢數據,避免程序的SQL語句緊密耦合spring data jpa 是對jpa的封裝
  • spring框架最後一天,學完啦
    寫了一個轉帳案例,並用xml配置事務。當然上述都是最原始的測試方法,我們現在學了spring框架,看到new這個關鍵字,就要想到spring的使用。3spring的Junit測試測試代碼會自動開啟註解掃描,所以就算我們沒有在spring配置文件中配置也可以使用註解,這個我們昨天就說明過。
  • Spring Boot - 帶有Hibernate和H2 Web控制臺的Spring Data JPA
    為了讓spring自動配置H2 Web控制臺,我們必須確保我們正在開發一個Web應用程式,確保com.h2database:h2依賴項駐留在類路徑上,我們正在使用org.springframework.boot:spring-boot-devtools。您也可以手動配置h2 Web控制臺。
  • spring data redis集成以及session共享
    1.加入maven依賴<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-data-redis
  • SpringDataJPA這麼玩?
    <dependency>            <groupId>org.springframework.boot</groupId>      
  • 用MongoDB和Spring Data創建Java應用
    關於Spring Data For MongoDB  大家對Spring 框架應該是相當熟悉了,而Spring data 則是spring新推出的一套方便開發者對關係資料庫以及NOSQL進行存取開發的基於spring的API框架。
  • Spring Boot 整合 Spring Data JPA
    -- springBoot JPA的起步依賴 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!
  • Spring Boot 中文參考指南(2.1.6)附錄A、data 屬性
    spring.data.cassandra.connect-timeout= # Socket 選項:連接超時。spring.data.cassandra.consistency-level= # 查詢一致性級別。spring.data.cassandra.contact-points=localhost # 集群節點地址。
  • 簡化RESTful開發,Spring Data REST讓你少掉發
    gt;</dependency><dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-data-jpa</artifactId></dependency>
  • Spring Data MongoDB 1.6.4 發布
    下載:https://github.com/spring-projects/spring-data-mongodb/archive/1.6.4.RELEASE.zip。Spring Data MongoDB 可以提供 Java 開發人員在使用 MongoDB 時的效率。
  • JPA、Hibernate、Spring data jpa之間的關係,終於明白了
    如圖:什麼是spring data jpa?spirng data jpa是spring提供的一套簡化JPA開發的框架,按照約定好的【方法命名規則】寫dao層接口,就可以在不寫接口實現的情況下,實現對資料庫的訪問和操作。同時提供了很多除了CRUD之外的功能,如分頁、排序、複雜查詢等等。
  • Spring Data MongoDB 1.8.0 發布
    下載:https://github.com/spring-projects/spring-data-mongodb/archive/1.8.0.RELEASE.zip。Spring Data MongoDB 可以提供 Java 開發人員在使用 MongoDB 時的效率。它使用了熟悉的 Spring 概念,例如用於核心 API 的模塊類,輕量級倉庫風格的數據訪問。
  • 你使用過spring框架的JDBCTemplate嗎?
    今天和大家一起分享一下spring框架的JDBCTemplate,也許可能你沒聽過,確實現在使用JDBCTemplate來做查詢的公司也不是特別多,但是依然否定不了他的重要性,曾經也是蠻熱門的,好了,廢話不多說了,開始今天的分享吧!一、什麼是spring JDBCTemplate呢?其實簡單的來說,就是Spring框架對JDBC的簡單封裝。
  • Spring Data Jpa 入門學習
    本文主要講解 springData Jpa 入門相關知識, 了解JPA規範與Jpa的實現,搭建springboot+dpringdata jpa環境實現基礎增刪改操作,適合新手學習,老鳥繞道~1. ORM 概論ORM(Object-Relational Mapping)顧名思義就是表示對象關係映射。
  • Spring Data發布新版本管理方案後的首個版本
    本次的發布內容中,包含了這些主要亮點:最新的版本命名規則,以及最新的spring-data-bomReactive SpEL上下文擴展和審計的支持Spring Data Neo4j 6.0中加入SDN-RXSpring Data JDBC中加入Oracle方言重構了Spring Data R2DBC
  • mongoHelper 0.2.7 發布,spring-data-mongodb 增強工具包
    mongoHelper 是基於 spring-data-mongodb 的增強工具包,簡化 CRUD 操作,提供類 jpa 的資料庫操作。
  • Spring Cloud Data Flow用Shell來操作,方便建立CICD
    dataflow:>app register --name timestamp-pkslow --type task --uri docker:springcloudtask/timestamp-task:2.1.1.RELEASECommand failed org.springframework.cloud.dataflow.rest.client.DataFlowClientException