国产精品高清一区二区三区不卡-国产精品一区二区三区免费视频-日韩免费高清一级毛片-亚洲欧美一区二区三区国产精品-日韩欧美一区二区三区不卡视频-亚欧免费视频一区二区三区-亚洲欧美日韩一区成人-欧美日韩视频综合一区无弹窗-精品日韩在线视频一区二区三区-国内精品视频一区二区三区

你好,歡迎進入江蘇優(yōu)軟數(shù)字科技有限公司官網!

誠信、勤奮、創(chuàng)新、卓越

友好定價、專業(yè)客服支持、正版軟件一站式服務提供

13262879759

工作日:9:00-22:00

暢游Spring Boot系列 — JDBC操作數(shù)據(jù)庫

發(fā)布時間:2023-05-28

瀏覽次數(shù):0

intellij idea 數(shù)據(jù)庫關系圖_intellij idea er圖_intellij idea畫uml圖

下面幾篇文章已經講解了Boot的一些基本概念和基本用法intellij idea 數(shù)據(jù)庫關系圖,

收到后,我們就可以拿到數(shù)據(jù)了。 更便于初學者掌握。 這里直接進入正題,原理就不多說了。

首先,創(chuàng)建一個項目。 用來描述Boot的一些原理。 這里為了快速方便的使用,直接使用IDEA開發(fā)工具。

1.使用IDEA創(chuàng)建Boot工程

雖然IDEA還是直接創(chuàng)建工程,直接導出到IDEA的工程環(huán)境

1.選擇初始化項目網站

intellij idea畫uml圖_intellij idea 數(shù)據(jù)庫關系圖_intellij idea er圖

2.創(chuàng)建項目的基本信息

intellij idea er圖_intellij idea畫uml圖_intellij idea 數(shù)據(jù)庫關系圖

3.選擇POM.xml的包依賴

intellij idea er圖_intellij idea 數(shù)據(jù)庫關系圖_intellij idea畫uml圖

雖然這里還需要添加一些其他的依賴,但是我們還是可以直接通過修改前面的POM.xml文件來添加

4.確認項目名稱已經投射

intellij idea 數(shù)據(jù)庫關系圖_intellij idea er圖_intellij idea畫uml圖

這樣一個IDEA中的基本Boot工程就創(chuàng)建好了。

2.創(chuàng)建數(shù)據(jù)庫

如果你想測試JDBC,你必須有一些現(xiàn)有數(shù)據(jù)庫的內容。 在mysql中創(chuàng)建自己的數(shù)據(jù)庫和表,并做一個簡單的測試。 我這里創(chuàng)建的數(shù)據(jù)庫是crm,表名是. 您需要創(chuàng)建一個簡單的數(shù)據(jù)庫和表

DROP DATABASE IF EXISTS `crm`;
CREATE DATABASE `crm`;
use `crm`;
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `user_tel` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL,
 `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
 `password` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
 `registration_time` datetime DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB CHARSET=utf8;
INSERT INTO `t_user` VALUES ('1', '13880000001', 'jack', '0b4e7a0e5fe84ad35fb5f95b9ceeac79', '2018-12-15 06:54:16'), ('2', '13880000002', 'rose', '875f26fdb1cecf20ceb4ca028263dec6', '2018-12-15 06:54:16'), ('3', '13880000003', 'lily', 'c1f68ec06b490b3ecb4066b1b13a9ee9', '2018-12-15 06:54:16'), ('4', '13880000004', 'jones', '980ac217c6b51e7dc41040bec1edfec8', '2018-12-15 06:54:16'), ('5', '13880000005', 'baby', 'cd87cd5ef753a06ee79fc75dc7cfe66c', '2018-12-15 06:54:16'), ('6', '13880000006', 'anta', 'eed8cdc400dfd4ec85dff70a170066b7', '2018-12-15 06:54:16');

3.POM添加依賴

在創(chuàng)建項目的時候intellij idea 數(shù)據(jù)庫關系圖,我們只是簡單的添加了之前對Web的依賴,現(xiàn)在我們要連接數(shù)據(jù)庫,所以肯定需要添加對數(shù)據(jù)庫的依賴

POM.xml:


 org.springframework.boot
 spring-boot-starter-jdbc
 mysql
 mysql-connector-java
 com.alibaba
 druid
 1.0.5

4.配置數(shù)據(jù)源信息

必須配置數(shù)據(jù)庫 URL、用戶名和密碼。 我們可以在.xml配置文件中完成配置。 這里我使用.yml文件

spring:
 datasource:
 url: jdbc:mysql://127.0.0.1:3307/crm
 username: root
 password: 123456
 driver-class-name: com.mysql.jdbc.Driver
 type: com.alibaba.druid.pool.DruidDataSource
server:
 servlet-path: /
 port: 8081

注意,我這里的數(shù)據(jù)庫是直接使用容器中的MySql數(shù)據(jù)庫,所以端口映射后,我改了上端的。。。不清楚的可以用自己機器上的MySql數(shù)據(jù)庫來做實驗

五、項目的基本結構

為了不讓實踐過于簡單,這里給出一個基本的三層結構

intellij idea畫uml圖_intellij idea er圖_intellij idea 數(shù)據(jù)庫關系圖

6.在Dao層使用

在 Dao 中直接注入以執(zhí)行基本的 CRUD 操作

.java

package com.yingside.demo.dao;import com.yingside.demo.bean.User;import java.util.List;public interface IUserDao { public int add(String tel, String username, String password); public User get(int id); public List list(); public int delete(int id); public int update(User user);
}

.java

package com.yingside.demo.dao.impl;import com.yingside.demo.bean.User;import com.yingside.demo.dao.IUserDao;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.dao.DataAccessException;import org.springframework.jdbc.core.*;import org.springframework.stereotype.Repository;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.List;@Repositorypublic class UserDaoImpl implements IUserDao { @Autowired
 JdbcTemplate jdbcTemplate; public int add(String tel, String username, String password) { return jdbcTemplate.update("INSERT INTO t_user(user_tel,username,password) VALUES (?,?,md5(?))",
 tel,username,password);
 } @Override
 public User get(int id) {
 String sql = "select * from t_user where id=?"; return jdbcTemplate.query(sql, new PreparedStatementSetter() { @Override
 public void setValues(PreparedStatement preparedStatement) throws SQLException {
 preparedStatement.setInt(1,id);
 }
 }, new ResultSetExtractor() { @Override
 public User extractData(ResultSet rs) throws SQLException, DataAccessException {
 User u = null; if(rs.next()){
 u = new User();
 u.setId(rs.getInt("id"));
 u.setUserTel(rs.getString("user_tel"));
 u.setUsername(rs.getString("username"));
 u.setPassword(rs.getString("password"));
 u.setRegistrationTime(rs.getString("registration_time"));
 } return u;
 }
 });
 } @Override
 public List list() {
 String sql = "select * from t_user";
 BeanPropertyRowMapper rowMapper = new BeanPropertyRowMapper(User.class); return jdbcTemplate.query(sql,rowMapper);
 } @Override
 public int delete(int id) {
 String sql = "delete from t_user where id=?"; return jdbcTemplate.update(sql,id);
 } @Override
 public int update(User user) {
 String sql = "update t_user set user_tel=?,username=?,password=md5(?) where id=?"; int n = jdbcTemplate.update(sql,user.getUserTel(),user.getUsername(),user.getPassword(),user.getId()); return n;
 }
}

這里只有三點需要注意:

Dao層需要使用@聲明使用@注入對象使用基本的增刪改查方式

前兩點非常簡單。 如果你以前沒有使用過它們,你可以查詢相關文檔。 簡單來說,你會經常用到幾個方法,查詢,,,其實每個方法都有相當多的重載

當我在這里使用查詢時,我使用兩種典型的不同方式

public  T query(String sql, PreparedStatementSetter pss, ResultSetExtractor rse) throws DataAccessExceptionpublic  List query(String sql, RowMapper rowMapper) throws DataAccessException

第一種方法相當于創(chuàng)建了兩個內部類,在內部類中可以直接使用對象,雖然和寫傳統(tǒng)的JDBC沒有太大區(qū)別

第二種方法直接使用 r 類,它是 的子類。 簡單的說,這個類會手動把你寫的東西和數(shù)據(jù)庫中的數(shù)組進行映射,還是比較方便的。 其實方便的前提是約定。 就是你和數(shù)據(jù)庫數(shù)組的一一對應。 事實上,如果涉及多個短語,他會手動將駝峰規(guī)則轉換為逗號

七。 層

這里的業(yè)務很簡單,所以該層不需要做任何事情,只是做一個數(shù)據(jù)傳輸

.java

package com.yingside.demo.service;import com.yingside.demo.bean.User;import java.util.List;public interface IUserService { public boolean addUser(String tel, String username, String password); public User getUserById(int id); public List getAllUsers(); public boolean updateUser(User user); public boolean deleteUser(int id);
}

.java

package com.yingside.demo.service.impl;import com.yingside.demo.bean.User;import com.yingside.demo.dao.IUserDao;import com.yingside.demo.service.IUserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;@Servicepublic class UserServiceImpl implements IUserService { @Autowired
 private IUserDao userDao; public boolean addUser(String tel, String username, String password) { return userDao.add(tel,username,password) >= 1 ? true : false;
 } @Override
 public User getUserById(int id) { return userDao.get(id);
 } @Override
 public List getAllUsers() { return userDao.list();
 } @Override
 public boolean updateUser(User user) { return userDao.update(user) >= 1?true:false;
 } @Override
 public boolean deleteUser(int id) { return userDao.delete(id) >= 1? true : false;
 }
}

這里還有兩點需要注意:

該層需要使用@聲明并使用@注釋注入到對象中

八。

package com.yingside.demo.controller;import com.yingside.demo.bean.User;import com.yingside.demo.service.IUserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;import java.util.List;@RestControllerpublic class UserController { @Autowired
 private IUserService userService; @PostMapping("/addUser") public String add(@RequestParam("tel")String tel,@RequestParam("username")String username, @RequestParam("password")String password){ boolean flag = userService.addUser(tel,username,password); if(flag){ return "成功!";
 } else{ return "失敗";
 }
 } @GetMapping("/getUser/{id}") public User getUser(@PathVariable("id") Integer id){ return userService.getUserById(id);
 } @GetMapping("/allUser") public List getAll(){ return userService.getAllUsers();
 } @PutMapping("/update/{id}") public String update(@PathVariable("id")Integer id,@RequestParam("tel")String tel,String username,String password){
 User user = new User();
 user.setId(id);
 user.setUserTel(tel);
 user.setUsername(username);
 user.setPassword(password); boolean flag = userService.updateUser(user); if(flag){ return "更新成功!";
 }else{ return "更新失敗!";
 }
 } @DeleteMapping("/delete/{id}") public String delete(@PathVariable("id")Integer id){ boolean flag = userService.deleteUser(id); if(flag){ return "刪除成功!";
 } else{ return "刪除失敗!";
 }
 }
}

在這個層面上,其實我們還需要注意以下幾個問題

@放在類上修飾,說明整個類都支持形式,需要注入對象,需要對相關注解有一定的了解

寫完那些,至少我們已經把相關的背景寫完了,沒有界面,可以先用工具測試一下

如有侵權請聯(lián)系刪除!

13262879759

微信二維碼