Spring Boot初步教程+多模块+jdbcTemplate初探

编辑器使用IDEA

  1. 打开IDEA后新建工程
    在这里插入图片描述

  2. 选择Maven,然后选下一步
    在这里插入图片描述

  3. 输入GroupId和ArtifactId,然后Finish
    在这里插入图片描述

  4. 新建多模块,比如MySql模块在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  1. 在根项目中的pom.xml添加parent,然后所有的子模块都可以使用此parent中的jar,如添加:
<parent>
	 <groupId>org.springframework.boot</groupId>
	 <artifactId>spring-boot-starter-parent</artifactId>
	 <version>2.1.0.RELEASE</version>
</parent>

在这里插入图片描述

  1. 在根项目中添加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>

在这里插入图片描述

  1. 在新建的模块的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>
  1. 新建一个数据库,本人用的是Navicat Premium,这里不再赘述,然后新建一张表,如User表,插入一些数据供测试使用
    在这里插入图片描述

  2. 在模块中创建相应的package,结构差不多如下
    在这里插入图片描述

  3. rescources中创建一个application.yml文件,配置连接mysql的参数
    在这里插入图片描述
    注意这里的username、password要和数据库相对应,否则无法连接

  4. 在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;
   }
}

在这里插入图片描述

  1. 创建一个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);
}

在这里插入图片描述

  1. 在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);
    }
}
  1. 在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);
}
  1. 在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);
    }
}
  1. 在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;
    }
}
  1. 在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);
    }
}
  1. 在包根路径下创建一个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格式对象,然后返回到浏览器中
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值