编辑器使用IDEA
-
打开IDEA后新建工程
-
选择Maven,然后选下一步
-
输入GroupId和ArtifactId,然后Finish
-
新建多模块,比如MySql模块
- 在根项目中的pom.xml添加parent,然后所有的子模块都可以使用此parent中的jar,如添加:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
</parent>
- 在根项目中添加dependencies和dependency,所有子模块都可以使用此依赖,如:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.1.0.RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
- 在新建的模块的pom.xml添加mysql的依赖包
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
</dependencies>
-
新建一个数据库,本人用的是Navicat Premium,这里不再赘述,然后新建一张表,如User表,插入一些数据供测试使用
-
在模块中创建相应的package,结构差不多如下
-
rescources中创建一个application.yml文件,配置连接mysql的参数
注意这里的username、password要和数据库相对应,否则无法连接 -
在bean中创建一个User类,此类对应数据库表tb_user,并且每个变量对应一个字段,如:
package com.joel.mysql.bean;
import java.util.Date;
public class User {
private int id;
private String username;
private int age;
private Date ctm;
public User() {
}
public User(String username, int age) {
this.username = username;
this.age = age;
this.ctm = new Date();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getCtm() {
return ctm;
}
public void setCtm(Date ctm) {
this.ctm = ctm;
}
}
- 创建一个UserDao接口,如:
package com.joel.mysql.dao;
import com.joel.mysql.bean.User;
import java.util.List;
public interface UserDao {
public User getUserById(Integer id);
public List<User> getUserList();
public int add(User user);
public int update(Integer id, User user);
public int delete(Integer id);
}
- 在dao包中创建一个impl包,并创建一个UserDaoImpl类用来实现UserDao接口,此类中有JdbcTemplate,添加@Autowired,Spring-boot会自动读取配置文件中的信息到JdbcTemplate中,然后通过JdbcTemplate就可以进行RCUD了,如:
package com.joel.mysql.dao.impl;
import com.joel.mysql.bean.User;
import com.joel.mysql.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.Date;
import java.util.List;
@Repository
public class UserDaoImpl implements UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public User getUserById(Integer id) {
List<User> list = jdbcTemplate.query("select * from tb_user where id = ?", new Object[]{id}, new BeanPropertyRowMapper(User.class));
if(list!=null && list.size()>0){
return list.get(0);
}else{
return null;
}
}
@Override
public List<User> getUserList() {
List<User> list = jdbcTemplate.query("select * from tb_user", new Object[]{}, new BeanPropertyRowMapper(User.class));
if(list!=null && list.size()>0){
return list;
}else{
return null;
}
}
@Override
public int add(User user) {
return jdbcTemplate.update("insert into tb_user(username, age, ctm) values(?, ?, ?)",
user.getUsername(),user.getAge(), new Date());
}
@Override
public int update(Integer id, User user) {
return jdbcTemplate.update("UPDATE tb_user SET username = ? , age = ? WHERE id=?",
user.getUsername(),user.getAge(), id);
}
@Override
public int delete(Integer id) {
return jdbcTemplate.update("DELETE from tb_user where id = ? ",id);
}
}
- 在service包中创建一个UserService接口,如:
package com.joel.mysql.service;
import com.joel.mysql.bean.User;
import java.util.List;
public interface UserService {
public User getUserById(Integer id);
public List<User> getUserList();
public int add(User user);
public int update(Integer id, User user);
public int delete(Integer id);
}
- 在service包中创建一个impl包,并创建一个UserServiceImpl类用来实现UserService接口
package com.joel.mysql.service.impl;
import com.joel.mysql.bean.User;
import com.joel.mysql.dao.UserDao;
import com.joel.mysql.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public User getUserById(Integer id) {
return userDao.getUserById(id);
}
@Override
public List<User> getUserList() {
return userDao.getUserList();
}
@Override
public int add(User user) {
return userDao.add(user);
}
@Override
public int update(Integer id, User user) {
return userDao.update(id, user);
}
@Override
public int delete(Integer id) {
return userDao.delete(id);
}
}
- 在bean包中创建一个JsonResult类,用来返回接口信息
package com.joel.mysql.bean;
public class JsonResult {
private String status = null;
private Object result = null;
public JsonResult status(String status) {
this.status = status;
return this;
}
public void setResult(Object user){
this.result=user;
}
public Object getResult(){
return this.result;
}
public void setStatus(String status){
this.status=status;
}
public String getStatus(){
return this.status;
}
}
- 在web包中创建一个控制类UserController,用来处理http请求
package com.joel.mysql.web;
import com.joel.mysql.bean.JsonResult;
import com.joel.mysql.bean.User;
import com.joel.mysql.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
public class UserConrroller {
@Autowired
private UserService userService;
/**
* 根据ID查询用户
* @param id
* @return
*/
@RequestMapping(value = "user/{id}", method = RequestMethod.GET)
public ResponseEntity<JsonResult> getUserById (@PathVariable(value = "id") Integer id){
JsonResult r = new JsonResult();
try {
User user = userService.getUserById(id);
r.setResult(user);
r.setStatus("ok");
} catch (Exception e) {
r.setResult(e.getClass().getName() + ":" + e.getMessage());
r.setStatus("error");
e.printStackTrace();
}
return ResponseEntity.ok(r);
}
/**
* 查询用户列表
* @return
*/
@RequestMapping(value = "users", method = RequestMethod.GET)
public ResponseEntity<JsonResult> getUserList (){
JsonResult r = new JsonResult();
try {
List<User> users = userService.getUserList();
r.setResult(users);
r.setStatus("ok");
} catch (Exception e) {
r.setResult(e.getClass().getName() + ":" + e.getMessage());
r.setStatus("error");
e.printStackTrace();
}
return ResponseEntity.ok(r);
}
/**
* 添加用户
* @param user
* @return
*/
@RequestMapping(value = "user", method = RequestMethod.POST)
public ResponseEntity<JsonResult> add (@RequestBody User user){
JsonResult r = new JsonResult();
try {
int orderId = userService.add(user);
if (orderId < 0) {
r.setResult(orderId);
r.setStatus("fail");
} else {
r.setResult(orderId);
r.setStatus("ok");
}
} catch (Exception e) {
r.setResult(e.getClass().getName() + ":" + e.getMessage());
r.setStatus("error");
e.printStackTrace();
}
return ResponseEntity.ok(r);
}
/**
* 根据id删除用户
* @param id
* @return
*/
@RequestMapping(value = "user/{id}", method = RequestMethod.DELETE)
public ResponseEntity<JsonResult> delete (@PathVariable(value = "id") Integer id){
JsonResult r = new JsonResult();
try {
int ret = userService.delete(id);
if (ret < 0) {
r.setResult(ret);
r.setStatus("fail");
} else {
r.setResult(ret);
r.setStatus("ok");
}
} catch (Exception e) {
r.setResult(e.getClass().getName() + ":" + e.getMessage());
r.setStatus("error");
e.printStackTrace();
}
return ResponseEntity.ok(r);
}
/**
* 根据id修改用户信息
* @param user
* @return
*/
@RequestMapping(value = "user/{id}", method = RequestMethod.PUT)
public ResponseEntity<JsonResult> update (@PathVariable("id") Integer id, @RequestBody User user){
JsonResult r = new JsonResult();
try {
int ret = userService.update(id, user);
if (ret < 0) {
r.setResult(ret);
r.setStatus("fail");
} else {
r.setResult(ret);
r.setStatus("ok");
}
} catch (Exception e) {
r.setResult(e.getClass().getName() + ":" + e.getMessage());
r.setStatus("error");
e.printStackTrace();
}
return ResponseEntity.ok(r);
}
}
- 在包根路径下创建一个spring-boot的启动类Application
package com.joel.mysql;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableAutoConfiguration
@SpringBootApplication
public class Application {
public static void main( String[] args ) {
System.out.println( "start....." );
SpringApplication.run(Application.class, args);
}
}
-
允许此类
-
在浏览器中输入:http://127.0.0.1:8080/users即可输入结果
-
对于add、delete、update方法可以使用PostMan来模拟发送请求,具体使用方法请移步PostMan使用方法
以上
总结一下:
- 在程序启动时,在Application.java类中有一个@SpringBootApplication注解,它包含了@Configuration + @EnableAutoConfiguration + @ComponentScan三个注解,说明在启动时会自动获取配置(比如配置的数据库连接参数等
- 运行main,进而运行SpringApplication.run(Application.class, args);然后开始进行初始化Spring相关的信息,比如其他类的注解
- 当从浏览器中输入网址时,spring就会去找被@RestController的相应的类,然后进行路径解析,然后@RequestMapping来注释具体调用的是那个路径下的方法,如:@RequestMapping(value = “users”, method = RequestMethod.GET),根路径为:http://127.0.0.1:8080,如果加上value,那么就会自动匹配成http://127.0.0.1:8080/users,然后在进一步判断http请求的方法,如果为:RequestMethod.GET,则会调用getUserList (); -
- 在getUserList ()方法中会有一个userService.getUserList(),此处的userService通过@Service已经实例化为了UserServiceImpl类,那么此时调用的userService.getUserList()就会调用UserServiceImpl类中的getUserList()。
- 在UserServiceImpl类中的getUserList()方法中会调用userDao.getUserList()方法,而userDao通过@Repository已经实例化为了UserDaoImpl类,那么此时调用的userDao.getUserList()就会调用UserDaoImpl类中的getUserList()方法。
- 在UserDaoImpl类中的getUserList()方法中通过jdbcTemplate.query(“select * from tb_user”, new Object[]{}, new BeanPropertyRowMapper(User.class)),对数据表进行查询,而jdbcTemplate则是在spring-boot启动时会自动配置数据库的相关连接,直接可以使用。
- 把查询结果生成一个List,然后返回到UserController中,并构造一个JsonResult对象,然后通过ResponseEntity对象构造成一个json格式对象,然后返回到浏览器中