电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Springboot集成jdbcTemplate過程解析

瀏覽:3日期:2023-05-22 13:35:19

一 說明

實際工作中其實很少會用到jdbcTemplate去操作數據庫,因為其使用方式不是很靈活,sql的拼接能力不強;實際上jdbcTemplate是屬于spring自帶的數據層模板,在spring中可以說是比較失敗的一個案例,原因是當代流行mybatis當做持久層訪問數據庫,其優越的sql拼接能力、動態sql、半自動化映射、和易于sql優化的特性,深受廣大互聯網公司的喜愛,并且mybatis的市場占有率不斷的上升,hibernate的市場不斷縮水,可以說hibernate已經這種強映射關系的持久層模型已經走到互聯網時代的盡頭了。

本文寫jdbcTemplate只是當作大家的一個入門學習,可以說以后你很難用到這門技術,所以不會深入研究,有興趣的朋友可以專欄我其他關于springboot的集成系列。本次演示使用jdk1.8,mysql5.6,springboot2.1。​

二數據庫建表和實體

user表,里面有三個屬性 用戶id、 用戶名和電話號碼。

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表對應的實體:

/** * @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層

對于使用jdbcTemplate,我們的dao層需要接口定義crud操作方法,其實現類則進行具體的sql操作,很多開發人員沒有這種解耦的思想,往往就直接在servic層操作sql,可以說沒有完整的一個知識體系,往往會造成后期維護困難,項目無法進行下去;

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); // 通過id查詢 User findUserbyId(Long id);}

3.2 dao層實現類

dao層的實現類才是具體操作sql的地方。

/** * @Author lsc * @Description <p> user 持久層 </p> * @Date 2019/11/2 10:22 */@Repositorypublic 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層接口定義業務的方法,提供給控制層調用。

public interface UserService { // 添加 int addUser(User user); // 改 int updateUser(User user); // 刪 int deleteUser(Long id); // 通過id查詢 User findUserbyId(Long id);}

4.2 service層實現類

service層的實現類才是具體寫業務邏輯代碼的地方。

/** * @Author lsc * @Description <p> user service </p> * @Date 2019/11/2 10:37 */@Servicepublic 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

這是一個簡單的restful層的api,實現crud功能。

/** * @Author lsc * @Description <p>user 控制層 </p> * @Date 2019/11/2 10:43 */@RestControllerpublic class UserController { @Autowired UserService userService; // 查詢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文件的語法格式更加簡練明了,在配置文件中的注解已經很詳細,所以不會贅述。

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driver #數據庫驅動url: jdbc:mysql://192.168.0.105:3306/springboot?useUnicode=true&characterEncoding=utf-8 #數據庫地址username: root #數據庫賬號password: 123456 # 數據密碼type: com.alibaba.druid.pool.DruidDataSource # 連接池類型druid:#初始化連接池的連接數量initial-size: 5# 最小min-idle: 5# 最大max-active: 20#配置獲取連接等待超時的時間max-wait: 6000#配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒time-between-eviction-runs-millis: 6000# 配置一個連接在池中最小生存的時間,單位是毫秒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 啟動器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!-- mysql 啟動器 --> <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>

八 測試工具說明

大家可以通過postman等開發工具進行restful風格接口測試,作為后端開發者,就別去寫頁面了。

九 測試鏈接池說明

如果大家想知道怎么測試連接池是否連接成功可以實現ApplicationContextAware接口進行測試,具體的代碼如下:

/** * @Author lsc * @Description <p> 實現spring bean 生命周期接口</p> * @Date 2019/11/2 10:08 */@Componentpublic class DatabaseVision implements ApplicationContextAware { ApplicationContext applicationContext = null; // spring ioc 初始化 bean 的時候調用 @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { // 獲得applicationContext this.applicationContext = applicationContext; // 獲得dataSource DataSource dataSource = applicationContext.getBean(DataSource.class); // 啟動 springboot application print com.alibaba.druid.pool.DruidDataSource System.out.println(dataSource.getClass().getName()); }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: 千淘酒店差旅平台-中国第一家针对TMC行业的酒店资源供应平台 | 水冷式工业冷水机组_风冷式工业冷水机_水冷螺杆冷冻机组-深圳市普威机械设备有限公司 | 直流大电流电源,燃料电池检漏设备-上海政飞 | 无锡网站建设-做网站-建网站-网页设计制作-阿凡达建站公司 | 企典软件一站式企业管理平台,可私有、本地化部署!在线CRM客户关系管理系统|移动办公OA管理系统|HR人事管理系统|人力 | 镀锌方管,无缝方管,伸缩套管,方矩管_山东重鑫致胜金属制品有限公司 | 拉力机-万能试验机-材料拉伸试验机-电子拉力机-拉力试验机厂家-冲击试验机-苏州皖仪实验仪器有限公司 | 517瓜水果特产网|一个专注特产好物的网站 | 专业甜品培训学校_广东糖水培训_奶茶培训_特色小吃培训_广州烘趣甜品培训机构 | 东莞韩创-专业绝缘骨架|马达塑胶零件|塑胶电机配件|塑封电机骨架厂家 | 电动葫芦|环链电动葫芦-北京凌鹰名优起重葫芦 | 防渗土工膜|污水处理防渗膜|垃圾填埋场防渗膜-泰安佳路通工程材料有限公司 | 算命免费_生辰八字_免费在线算命 - 卜算子算命网 | IHDW_TOSOKU_NEMICON_EHDW系列电子手轮,HC1系列电子手轮-上海莆林电子设备有限公司 | PO膜_灌浆膜及地膜供应厂家 - 青州市鲁谊塑料厂 | 压砖机_电动螺旋压力机_粉末成型压力机_郑州华隆机械tel_0371-60121717 | 无刷电机_直流无刷电机_行星减速机-佛山市藤尺机电设备有限公司 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 钢格栅板_钢格板网_格栅板-做专业的热镀锌钢格栅板厂家-安平县迎瑞丝网制造有限公司 | 硫化罐_蒸汽硫化罐_大型硫化罐-山东鑫泰鑫智能装备有限公司 | H型钢切割机,相贯线切割机,数控钻床,数控平面钻,钢结构设备,槽钢切割机,角钢切割机,翻转机,拼焊矫一体机 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 上海软件开发-上海软件公司-软件外包-企业软件定制开发公司-咏熠科技 | POS机办理_个人pos机免费领取-银联pos机申请首页 | 三佳互联一站式网站建设服务|网站开发|网站设计|网站搭建服务商 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 胶水,胶粘剂,AB胶,环氧胶,UV胶水,高温胶,快干胶,密封胶,结构胶,电子胶,厌氧胶,高温胶水,电子胶水-东莞聚力-聚厉胶粘 | 检验科改造施工_DSA手术室净化_导管室装修_成都特殊科室建设厂家_医疗净化工程公司_四川华锐 | 品牌设计_VI设计_电影海报设计_包装设计_LOGO设计-Bacross新越品牌顾问 | 广东恩亿梯电源有限公司【官网】_UPS不间断电源|EPS应急电源|模块化机房|电动汽车充电桩_UPS电源厂家(恩亿梯UPS电源,UPS不间断电源,不间断电源UPS) | 开锐教育-学历提升-职称评定-职业资格培训-积分入户 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 单级/双级旋片式真空泵厂家,2xz旋片真空泵-浙江台州求精真空泵有限公司 | 12cr1mov无缝钢管切割-15crmog无缝钢管切割-40cr无缝钢管切割-42crmo无缝钢管切割-Q345B无缝钢管切割-45#无缝钢管切割 - 聊城宽达钢管有限公司 | 吹田功率计-长创耐压测试仪-深圳市新朗普电子科技有限公司 | 周口市风机厂,周鼓风机,河南省周口市风机厂 | 短信通106短信接口验证码接口群发平台_国际短信接口验证码接口群发平台-速度网络有限公司 | 液压升降平台_剪叉式液压/导轨式升降机_传菜机定做「宁波日腾升降机厂家」 | 无刷电机_直流无刷电机_行星减速机-佛山市藤尺机电设备有限公司 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 德国GMN轴承,GMN角接触球轴承,GMN单向轴承,GMN油封,GMN非接触式密封 | 升降机-高空作业车租赁-蜘蛛车-曲臂式伸缩臂剪叉式液压升降平台-脚手架-【普雷斯特公司厂家】 | 香蕉筛|直线|等厚|弧形|振动筛|香蕉筛厂家-洛阳隆中重工 | 便民信息网_家电维修,家电清洗,开锁换锁,本地家政公司 |