发布时间:2023-05-28
浏览次数:0
下面几篇文章已经讲解了Boot的一些基本概念和基本用法intellij idea 数据库关系图,
收到后,我们就可以拿到数据了。 更便于初学者掌握。 这里直接进入正题,原理就不多说了。
首先,创建一个项目。 用来描述Boot的一些原理。 这里为了快速方便的使用,直接使用IDEA开发工具。
1.使用IDEA创建Boot工程
虽然IDEA还是直接创建工程,直接导出到IDEA的工程环境
1.选择初始化项目网站
2.创建项目的基本信息
3.选择POM.xml的包依赖
虽然这里还需要添加一些其他的依赖,但是我们还是可以直接通过修改前面的POM.xml文件来添加
4.确认项目名称已经投射
这样一个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数据库来做实验
五、项目的基本结构
为了不让实践过于简单,这里给出一个基本的三层结构
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 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
第一种方法相当于创建了两个内部类,在内部类中可以直接使用对象,虽然和写传统的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 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 "删除失败!"; } } }
在这个层面上,其实我们还需要注意以下几个问题
@放在类上修饰,说明整个类都支持形式,需要注入对象,需要对相关注解有一定的了解
写完那些,至少我们已经把相关的背景写完了,没有界面,可以先用工具测试一下
如有侵权请联系删除!
Copyright © 2023 江苏优软数字科技有限公司 All Rights Reserved.正版sublime text、Codejock、IntelliJ IDEA、sketch、Mestrenova、DNAstar服务提供商
13262879759
微信二维码