你好,欢迎进入江苏优软数字科技有限公司官网!

诚信、勤奋、创新、卓越

友好定价、专业客服支持、正版软件一站式服务提供

13262879759

工作日:9:00-22:00

畅游Spring Boot系列 — JDBC操作数据库

发布时间:2023-05-28

浏览次数:0

intellij idea 数据库关系图_intellij idea er图_intellij idea画uml图

下面几篇文章已经讲解了Boot的一些基本概念和基本用法intellij idea 数据库关系图

收到后,我们就可以拿到数据了。 更便于初学者掌握。 这里直接进入正题,原理就不多说了。

首先,创建一个项目。 用来描述Boot的一些原理。 这里为了快速方便的使用,直接使用IDEA开发工具。

1.使用IDEA创建Boot工程

虽然IDEA还是直接创建工程,直接导出到IDEA的工程环境

1.选择初始化项目网站

intellij idea画uml图_intellij idea 数据库关系图_intellij idea er图

2.创建项目的基本信息

intellij idea er图_intellij idea画uml图_intellij idea 数据库关系图

3.选择POM.xml的包依赖

intellij idea er图_intellij idea 数据库关系图_intellij idea画uml图

虽然这里还需要添加一些其他的依赖,但是我们还是可以直接通过修改前面的POM.xml文件来添加

4.确认项目名称已经投射

intellij idea 数据库关系图_intellij idea er图_intellij idea画uml图

这样一个IDEA中的基本Boot工程就创建好了。

2.创建数据库

如果你想测试JDBC,你必须有一些现有数据库的内容。 在mysql中创建自己的数据库和表,并做一个简单的测试。 我这里创建的数据库是crm,表名是. 您需要创建一个简单的数据库和表

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添加依赖

在创建项目的时候intellij idea 数据库关系图,我们只是简单的添加了之前对Web的依赖,现在我们要连接数据库,所以肯定需要添加对数据库的依赖

POM.xml:


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

4.配置数据源信息

必须配置数据库 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

注意,我这里的数据库是直接使用容器中的MySql数据库,所以端口映射后,我改了上端的。。。不清楚的可以用自己机器上的MySql数据库来做实验

五、项目的基本结构

为了不让实践过于简单,这里给出一个基本的三层结构

intellij idea画uml图_intellij idea er图_intellij idea 数据库关系图

6.在Dao层使用

在 Dao 中直接注入以执行基本的 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

第一种方法相当于创建了两个内部类,在内部类中可以直接使用对象,虽然和写传统的JDBC没有太大区别

第二种方法直接使用 r 类,它是 的子类。 简单的说,这个类会手动把你写的东西和数据库中的数组进行映射,还是比较方便的。 其实方便的前提是约定。 就是你和数据库数组的一一对应。 事实上,如果涉及多个短语,他会手动将驼峰规则转换为逗号

七。 层

这里的业务很简单,所以该层不需要做任何事情,只是做一个数据传输

.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 "删除失败!";
 }
 }
}

在这个层面上,其实我们还需要注意以下几个问题

@放在类上修饰,说明整个类都支持形式,需要注入对象,需要对相关注解有一定的了解

写完那些,至少我们已经把相关的背景写完了,没有界面,可以先用工具测试一下

如有侵权请联系删除!

13262879759

微信二维码