目前已经入职公司一周时间了,最近因为京东准备618大促,也没有很多的开发时间,实习生基本也是比较闲的,遂开始学习新的技术。
01 前言
由于我是从事前端开发的,大部分的时间都是与用户这方面打的交道,自己也是比较满足现在的情况。但是最近公司也是比较缺人手,后端人员也是比较繁忙,所以在leader的建议之下,我开始后端的知识学习。
在之前的总结方法学习上,我用三步法来快速入门一门新的技术。现在我是从零开始的,也是逐步摸索这其中的奥秘。
开始HelloWorld之旅
快速刷视频教程
动手实践项目
接下来就围绕着这几个问题谈谈自己是怎么开始出发的。
02 一些想法
这个其实不用多说,基本上程序员都懂怎么开启新世界的大门。
要想实现helloworld其实并不难,网上的教程很多,基本上也是可以满足你的要求的,我们需要的就是找一个靠谱合适的、系统的教程。现在我学习的就是关于java的知识,详细来说就是springboot的知识。
就像我们前端的一样,每一门语言都会在不断的发展中衍生出自己的一个框架,方便我们快速就进行项目的开发。
「我们可以来和前端进行类比一下。我们熟知的前端web框架有哪些?」
- Express
- Koa
其实springboot
这个框架我们可以把它看成是Express或者Koa
,就是为了能够快速进行后台的开发而诞生的。两者同样是也是提供了想路由、数据库操作等的相关技术封装。
那么除了这个之外,还有什么是类似的呢?
首先前端是使用JavaScript语言进行开发的,那么后端是使用Java。道理一样都是一种工具。springboot
是建立在spring
之上的,再进行的一个封装。就如Express
是基于Node.js
进行的封装。
我们还知道Java也有一种是Maven的项目管理器,用于管理项目之间的依赖关系,使得项目能够进行统一的管理。那么前端也是一样的,我们也有NPM包管理器进行项目的管理。
类比不一定准确,可以给大家一个参考。带着前端的思维去学习确实是比较好,因为技术之前都是相同的,原理一样,不变应万变。
03 HelloWorld
首先我们开始开发之前就一样要配置好我们本地的java环境
,maven环境
,以便我们在后面开发顺畅。
至于怎么弄大家可以自行谷歌,网上有很多教程也比较简单。
我们现在选用的工具有:
IDEA
postman
navicat
它们分别用来代码的开发、接口的测试以及数据库的管理。准备好了这些我们就直接开始了。
「新建一个springboot项目」
选择Initializr
选择这个可以快速开发一个springboot项目,不用我们进行手动maven的配置,导入依赖等等繁琐的操作,现在一站式开发。
默认配置就好
选择web
我们新建完之后就可以看到这个目录,我们主要的代码就是在src目录下面进行编写。
接下来我们先来实现HelloWorld的代码。不管我们懂不懂,我们先把事情做出来再说。
我们依照图片这个建立一个controller文件夹,里面实现一个controller,回到DemoApplication之后,右键点击运行。
打开浏览器访问localhost:8080/hello,你就会看到效果了。
04 结合MyBatis做CRUD
mybatis是一个优秀的Java持久层框架,能够自定义SQL、存储过程以及高级映射。
这里我用两种方式进行数据库的访问操作,一种是注解版
的方式,另一种就是使用配置文件版
的方式。
首先我们先做一些准备工作:
配置数据源(mysql)
数据库建表
创建实体类(JavaBean)
既然我们要结合mybatis,那么就要引入相关的依赖包,跟npm下载包原理一样。
「引入依赖」
//这里是引入mybatis的依赖 org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.1//引入mysql驱动 mysql mysql-connector-java runtime//修改数据源 com.alibaba druid 1.1.22
「数据源配置」
spring: datasource: username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/mybatis type: com.alibaba.druid.pool.DruidDataSource # 数据源其他配置 initialSize: 5 minIdle: 5 maxActive: 20 maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 filters: stat,wall,log4j maxPoolPreparedStatementPerConnectionSize: 20 useGlobalDataSourceStat: true connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500 schema: - classpath:sql/department.sql - classpath:sql/employee.sql initialization-mode: always #mapper的方式会用到 mybatis: mapper-locations: classpath:mybatis/mapper/*.xml config-location: classpath:mybatis/mybatis-config.xml
「创建数据库表」
我们准备两个sql文件,放在resource
下面的sql
文件夹,因为上面我们已经配置了scheme,所以我们运行代码之后就会创建两张表。使用navicat查看一下就可以。
注解版实现
我们先创建JavaBean
,在启动类的同级目录下创建bean文件夹,里面对应的就是数据库两张表的结构。
Department
package com.alanwu.springboot.bean;public class Department { private Integer id; private String departmentName; //省略set/get方法}
Employee
package com.wuqingshi.springboot.bean;public class Employee { private Integer id; private String lastName; private Integer gender; private String email; private Integer dId; //省略set/get方法}
然后我们创建一个mapper文件夹(bean同级),下面创建DepartmentMapper.java
使用注解版实现。
package com.alanwu.springboot.mapper;import com.alanwu.springboot.bean.Department;import org.apache.ibatis.annotations.*;@Mapperpublic interface DepartmentMapper { @Select("select * from department where id=#{id}") public Department getDeptById(Integer id); @Delete("delete from department where id=#{id}") public Department deleteDeptById(Integer id); @Options(useGeneratedKeys = true,keyProperty = "id") @Insert("insert into department(departmentName) values(#{departmentName})") public int insertDept(Department department); @Update("update department set departmentName=#{departmentName} where id=#{id}") public int updateDept(Department department);}
最后我们创建一个controller文件夹(bean同级),里面创建DeptController.java
。(注意,有飘红的就导入就好)
@RestControllerpublic class DeptController { @Autowired DepartmentMapper departmentMapper; @GetMapping("/dept/{id}") public Department getDepartment(@PathVariable("id") Integer id){ return departmentMapper.getDeptById(id); } @GetMapping("/dept") public Department insertDept(Department department){ departmentMapper.insertDept(department); return department; }}
启动项目,访问localhost:8080/dept/1
,就可以查询数据库中id为1的部门。前提数据库中有数据。
配置文件版
在resources目录下新建mybatis文件夹,再新建mapper文件夹,里面就写我们的xml文件。
mybatis-config.xml是mybatis的配置文件。
<?xml version="1.0" encoding="UTF-8" ?>/span> PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
- 新建bean/Employee.java
public class Employee { private Integer id; private String lastName; private Integer gender; private String email; private Integer dId;}
- 新建mapper/Employee.java
public interface EmployeeMapper { public Employee getEmpById(Integer id); public Employee insertEmp(Employee employee);}
- 新建resources/mybatis/mapper/EmployeeMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>/span> PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> select * from employee where id = #{id} insert into employee(lastName,email,gender,d_id) values (#{lastName},#{email},#{gender},#{dId})
最后我们就写一个controller/EmpController.java来测试一下是否可行。
@RestControllerpublic class EmpController { @Autowired EmployeeMapper employeeMapper; @GetMapping("/emp/{id}") public Employee getEmpById(@PathVariable("id") Integer id){ return employeeMapper.getEmpById(id); }}
05 小结
通过上面的一个实例,我们就可以创建一个简单的CRUD操作了,而且我们也可以与数据库进行交互,从某种意义上来说我们已经入门后端这个方向了。
其实这方面还有很多的知识没有讲到,大家可以看书和文档来补充。
项目github地址
:https://github.com/wqs2019/springboot-mybatis
B站学习地址
:https://www.bilibili.com/video/BV1Et411Y7tQ
慕课网学习地址
:https://www.imooc.com/course/list?c=springboot