你好,歡迎進入江蘇優(yōu)軟數(shù)字科技有限公司官網!
發(fā)布時間:2023-05-28
瀏覽次數(shù):0
下面幾篇文章已經講解了Boot的一些基本概念和基本用法intellij idea 數(shù)據(jù)庫關系圖,
收到后,我們就可以拿到數(shù)據(jù)了。 更便于初學者掌握。 這里直接進入正題,原理就不多說了。
首先,創(chuàng)建一個項目。 用來描述Boot的一些原理。 這里為了快速方便的使用,直接使用IDEA開發(fā)工具。
1.使用IDEA創(chuàng)建Boot工程
雖然IDEA還是直接創(chuàng)建工程,直接導出到IDEA的工程環(huán)境
1.選擇初始化項目網站
2.創(chuàng)建項目的基本信息
3.選擇POM.xml的包依賴
雖然這里還需要添加一些其他的依賴,但是我們還是可以直接通過修改前面的POM.xml文件來添加
4.確認項目名稱已經投射
這樣一個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ù)庫來做實驗
五、項目的基本結構
為了不讓實踐過于簡單,這里給出一個基本的三層結構
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 Listlist(); 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層需要使用@聲明使用@注入對象使用基本的增刪改查方式
前兩點非常簡單。 如果你以前沒有使用過它們,你可以查詢相關文檔。 簡單來說,你會經常用到幾個方法,查詢,,,其實每個方法都有相當多的重載
當我在這里使用查詢時,我使用兩種典型的不同方式
publicT 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 ListgetAllUsers(); 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 ListgetAllUsers() { 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 ListgetAll(){ 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)系刪除!
Copyright ? 2023 江蘇優(yōu)軟數(shù)字科技有限公司 All Rights Reserved.正版sublime text、Codejock、IntelliJ IDEA、sketch、Mestrenova、DNAstar服務提供商
13262879759
微信二維碼