最近刚开始学习后端,直接让上手学习Springboot+Mybatis+MySQL对CRUD的实例,虽然实例不难,但是上面的三个知识我都不懂,就有点为难我了

所以经常遇到一个点卡自己很久的情况,这里列举一些自己遇到的坑或者有用的建议,望后来者谨记

1.关于application.properties:配置文件,Spring项目启动自动加载,用application.yml来写更加简便

例如:application.properties中需要这样写

  1. spring.datasource.url=jdbc:mysql://localhost:3306/springdb
  2. spring.datasource.username=root
  3. spring.datasource.password=root
  4. spring.datasource.driver-class-name=com.mysql.jdbc.Driver

而application.yml只需要

  1. spring:
  2. datasource:
  3. driver-class-name: com.mysql.cj.jdbc.Driver
  4. url: jdbc:mysql://localhost:3306/springdb
  5. username: root
  6. password: root

2.项目结构采用分层思想化

DAO层:
DAO层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个DAO一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作,建议DAO只做原子操作,增删改查。

Service层:
Service层叫服务层,被称为服务,粗略的理解就是对一个或多个DAO进行的再次封装,封装成一个服务,所以这里也就不会是一个原子操作了,需要事物控制。

Controler层:
Controler负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面

3.常用注释

@Mapper注解是标识,能够自动加载被扫描。

@RestController注解,所有返回都为json

  相当于@ResponseBody + @Controller合在一起的作用

@RequestMapping 配置url映射

  @RequestMapping中的method参数有很多中选择,一般使用get/post.

@Autowired 自动装配

  理解上参照https://zhidao.baidu.com/question/1887592919685460068.html?qbl=relate_question_3&word=autowired%D7%A2%BD%E2%D4%AD%C0%ED

4.对于刚接触的来说,各种配置是真的多啊,你需要自己去找配置方法,这里由于之前没有对配置安装的记录,暂时留着,以后有时间再整理把

5.用Lombok的**@Data**注解功能,可以省去getter和setter的代码,可以减少不少的代码量,加快开发速度。lombok需要另外引入依赖。(我也是后面才发现小伙伴是这样用的,所以下面的代码没有使用)

6.上手做才能发现很多问题,下面是我学习时的代码

pom.xml(主要依赖)

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.mybatis.spring.boot</groupId>
  7. <artifactId>mybatis-spring-boot-starter</artifactId>
  8. <version>2.0.</version>
  9. </dependency>
  10. <!-- MYSQL包 -->
  11. <dependency>
  12. <groupId>mysql</groupId>
  13. <artifactId>mysql-connector-java</artifactId>
  14. <scope>runtime</scope>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.springframework.boot</groupId>
  18. <artifactId>spring-boot-starter-test</artifactId>
  19. <scope>test</scope>
  20. </dependency>
  21.  
  22. <dependency>
  23. <groupId>org.projectlombok</groupId>
  24. <artifactId>lombok</artifactId>
  25. </dependency>

applicattion.yml数据库配置

  1. spring:
  2. application:
  3. name: mysql-service
  4. datasource:
  5. driver-class-name: com.mysql.cj.jdbc.Driver
  6. url: jdbc:mysql://localhost:3306/test?useSSL=true&serverTimezone=Asia/Shanghai
  7. username: root
  8. password: root

UeserController类(controller层)

  1. package com.wcx.springboot_mybatis;
  2.  
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RequestMethod;
  6. import org.springframework.web.bind.annotation.RestController;
  7.  
  8. import java.util.List;
  9.  
  10. @RestController
  11. @RequestMapping("/User")
  12. public class UeserController {
  13.  
  14. @Autowired
  15. public UserMapper userMapper;
  16.  
  17. //通过id查询
  18. @RequestMapping(value = "/selectUserById",method = RequestMethod.GET)
  19. public User selectUserById(String id){
  20. User user = userMapper.selectUserById(Integer.parseInt(id));
  21. return user;
  22. }
  23. //通过姓名查询
  24. @RequestMapping(value = "/selectUserByName",method = RequestMethod.GET)
  25. public List<User> selectUserByName(String userName){
  26. return userMapper.selectUserByName(userName);
  27. }
  28.  
  29. //添加信息
  30. @RequestMapping(value = "/addUser",method = RequestMethod.POST)
  31. public String addUser(User user){
  32. userMapper.addUser(user);
  33. return "成功添加信息>>>姓名:"+user.getUserName()+">>>>年龄:"+user.getUserAge()+">>>>地址:"+user.getUserAddress();
  34. }
  35.  
  36. //修改信息
  37. @RequestMapping(value = "/updateUser",method = RequestMethod.POST)
  38. public String updateUser(User user){
  39. userMapper.addUser(user);
  40. return "成功修改信息>>>姓名:"+user.getUserName()+">>>>年龄:"+user.getUserAge()+">>>>地址:"+user.getUserAddress();
  41. }
  42.  
  43. @RequestMapping(value={"/deleteUser"}, method=RequestMethod.POST)
  44. public String deleteUser(String id){
  45. User user = userMapper.selectUserById(Integer.parseInt(id));
  46. userMapper.deleteUser(Integer.parseInt(id));
  47. return "成功删除信息>>>姓名:"+user.getUserName()+">>>>年龄:"+user.getUserAge()+">>>>地址:"+user.getUserAddress();
  48. }
  49. }

User类(entity层)

  1. package com.wcx.springboot_mybatis;
  2.  
  3. public class User {
  4. private int id;
  5. private String userName;
  6. private int userAge;
  7. private String userAddress;
  8.  
  9. public String getUserAddress() {
  10. return userAddress;
  11. }
  12.  
  13. public void setUserAddress(String userAddress) {
  14. this.userAddress = userAddress;
  15. }
  16.  
  17. public int getUserAge() {
  18. return userAge;
  19. }
  20.  
  21. public void setUserAge(int userAge) {
  22. this.userAge = userAge;
  23. }
  24.  
  25. public String getUserName() {
  26. return userName;
  27. }
  28.  
  29. public void setUserName(String userName) {
  30. this.userName = userName;
  31. }
  32.  
  33. public int getId() {
  34. return id;
  35. }
  36.  
  37. public void setId(int id) {
  38. this.id = id;
  39. }
  40. }

UserMapper接口类(dao层)

  1. package com.wcx.springboot_mybatis;
  2.  
  3. import com.wcx.springboot_mybatis.User;
  4. import org.apache.ibatis.annotations.*;
  5.  
  6. import java.util.List;
  7.  
  8. @Mapper
  9. public interface UserMapper {
  10. //插入数据
  11. @Insert("insert into user(userName,userAge,userAddress) value (#{userName},#{userAge},#{userAddress})")
  12. public void addUser(User user);
  13.  
  14. //修改数据
  15. @Update("update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id = #{id}")
  16. public void updateUser(User user);
  17.  
  18. //查询数据
  19. //通过id查询
  20. @Select("select * from user where id = #{id}")
  21. public User selectUserById(int id);
  22. //通过姓名查询
  23. @Select("select * from user where userName = #{userName}")
  24. public List<User> selectUserByName(String userName);
  25.  
  26. //删除数据
  27. @Delete("delete from user where id = #{id}")
  28. public void deleteUser(int id);
  29. }

数据库配置:

你需要自己在MySQL中的Springdb模式下创建user表,包括4个属性:
id:int ,设置为[主键][6]且[自增][6]
userName:varchar
userAge:int
userAddress:varchar

Springboot+Mybatis+MySQL实例练习时踩坑记录的更多相关文章

  1. Mysql 8+ 版本完全踩坑记录

    问题是这样 刚霍霍了一台腾讯云服务器需要安装mysql 然后就选择了8+这个版本. 安装步骤网上有的是. 我只写最主要的部分 绝对不出错 外网可访问 .net java都可以调用 其实不指望有人看 就 ...

  2. CentOS7.4安装MySQL踩坑记录

    CentOS7.4安装MySQL踩坑记录 time: 2018.3.19 CentOS7.4安装MySQL时网上的文档虽然多但是不靠谱的也多, 可能因为版本与时间的问题, 所以记录下自己踩坑的过程, ...

  3. SpringBoot + Shiro + shiro.ini 的踩坑记录

    0.写在前面的话 好久没写博客了,诶,好多时候偷懒直接就抓网上的资料丢笔记里了,也就没有自己提炼,偷懒偷懒.然后最近参加了一个网络课程,要交作业的那种,为了能方便看下其他同学的作业,就写了个爬虫把作业 ...

  4. 复杂业务下向Mysql导入30万条数据代码优化的踩坑记录

    从毕业到现在第一次接触到超过30万条数据导入MySQL的场景(有点low),就是在顺丰公司接入我司EMM产品时需要将AD中的员工数据导入MySQL中,因此楼主负责的模块connector就派上了用场. ...

  5. SpringBoot+MyBatis+Mysql 6.X 版本日期型数据获,时间错乱,jason序列化时间相差8小时问题

    新项目是用的springboot+mybatis+mysql 6.0.6版本的驱动包来搭建的,在使用的过程中遇到以下2个问题 从mysql取的的数据日期时间,与真实的时间往后错乱了14个小时. spr ...

  6. SpringBoot+SpringSecurity+Thymeleaf认证失败返回错误信息踩坑记录

    Spring boot +Spring Security + Thymeleaf认证失败返回错误信息踩坑记录 步入8102年,现在企业开发追求快速,Springboot以多种优秀特性引领潮流,在众多使 ...

  7. springboot成神之——springboot+mybatis+mysql搭建项目简明demo

    springboot+mybatis+mysql搭建项目简明demo 项目所需目录结构 pom.xml文件配置 application.properties文件配置 MyApplication.jav ...

  8. 【SpringBoot】SpringBoot/MyBatis/MySql/thymeleaf/Log4j整合工程

    工程下载地址:https://files.cnblogs.com/files/xiandedanteng/MMSpringWeb20191027-1.rar 工程目录结构如图: 1.创建工程 有些网文 ...

  9. 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密

    你真的了解字典(Dictionary)吗?   从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...

随机推荐

  1. 使用Jenkins部署Python项目

    廖大使用Fabric部署的.我使用Jenkins试试部署过程.虽然说是用python项目部署测试的,但其他项目也是同理的. 参考Jenkins+Python部署完整版,不过安装方式不同. 安装tomc ...

  2. ORA-20011 问题处理

    今天巡检发现alert中报如下错: ORA-20011: Approximate NDV failed: ORA-29913: error in executing ODCIEXTTABLEOPEN ...

  3. sqlite--一秒20万数据

    参考博文:https://blog.csdn.net/weixin_35261786/article/details/78222602 #include <iostream> #inclu ...

  4. spring 之 property-placeholder 分析

    不难知道, property-placeholder 的解析是 PropertyPlaceholderBeanDefinitionParser 完成的, 但是 它仅仅是个parser , 它仅仅是读取 ...

  5. orcal - 单行函数

    虚拟表:dual 转大写 select UPPER('hellow') from dual; 转小写 select lower(ename) from emp; cmd 输入数据 select * f ...

  6. css:常见布局问题

    一.单列布局 1. 水平居中 1.1 使用inline-block和text-align .parent{text-align:center;} .child{display:inline-block ...

  7. git 提交丢失Warning, you are leaving 2 commits behind,

    早上在自己的一个版本代码上编辑,提交commint,但是checkout到其他分支再checkout回来发现该的东西不见了, 幸好terminal还没有关掉,回看日志: Warning: you ar ...

  8. iOS app审核被拒申诉

    提交申诉理由之后不需要点击“提交审核”按钮,否则按照重新提交算,需要重新排队,且申诉会不起作用.

  9. cdnbest里站点域名不同步到节点,报400错误的一般原因

    报400错误一般是站点里的域名没有同步到节点上面的原因,产生的原因一般是下面两点原因: 1.检查节点列表如下图所示的状态是否打钩,这是节点和主控的通信状态,打叉表示连接有问题 这里打叉的几种原因(1) ...

  10. 设置同一个域名同一个源通过cdn用不同的端口访问网站设置

    下图例子是设置80和88访问,因为80是默认的访问,所以只要设置88就行 进入站点管理-->应用防火墙-->高级设置 这个设置用到了url和host模块 在站点设置里设置要用到的端口: