栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringJDBC+RESTFUL实现对数据库的增删改查

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringJDBC+RESTFUL实现对数据库的增删改查

文章目录
  • 一、springJDBC实现 DAO层
    • 1、创建springMVC工程,导入对应的依赖
    • 2、创建dto实体类
    • 3、创建数据源对象,jdbc模板对象jdbcTemplate
    • 4、编写对应CRUD操作的DAO
  • 二、service层
  • 三 、restful实现Controller层
    • 1、配置编码过滤器,前端控制器,HiddenHttpMethodFilter过滤器
    • 2、配置spring的xml配置文件
    • 3、对数据库的操作
      • (1)查——GET
      • (2)增——POST
      • (3)改——PUT
      • (3)删——DELETe

一、springJDBC实现 DAO层

spring对的jdbc封装,用springJDBC访问数据库,不用考虑复杂的获取连接,关闭连接等操作,可以直接执行sql语句实现对数据库的增删改查操作。

1、创建springMVC工程,导入对应的依赖

我把我用到的依赖都放在下面,导入MVC依赖就不用导入web依赖了,MVC里面包含web的依赖。

        
        
            mysql
            mysql-connector-java
            8.0.27
        

        
        
            junit
            junit
            4.13.1
            test
        

        
            org.springframework
            spring-context
            5.1.4.RELEASE
        
        
        
            ch.qos.logback
            logback-classic
            1.2.3
        
        
        
            org.springframework
            spring-webmvc
            5.1.4.RELEASE
        
        
        
            org.thymeleaf
            thymeleaf-spring5
            3.0.15.RELEASE
        
        
        
            c3p0
            c3p0
            0.9.1.2
        
        
        
            com.alibaba
            druid
            1.2.8
        
        
            org.springframework
            spring-jdbc
            5.1.14.RELEASE
        
        
            org.springframework
            spring-tx
            5.1.14.RELEASE
        
2、创建dto实体类

我用的是一个水果信息表,下面是数据库表和添加的一些信息。实体类属性名要与数据库表的对应属性名对应。

public class Fruit {

    private String f_id;
    private int s_id;
    private String f_name;
    private float f_price;
    private int quantity;

    public Fruit() {
    }

    public Fruit(String f_id, int s_id, String f_name, float f_price, int quantity) {
        this.f_id = f_id;
        this.s_id = s_id;
        this.f_name = f_name;
        this.f_price = f_price;
        this.quantity = quantity;
    }

    public String getF_id() {
        return f_id;
    }

    public void setF_id(String f_id) {
        this.f_id = f_id;
    }

    public int getS_id() {
        return s_id;
    }

    public void setS_id(int s_id) {
        this.s_id = s_id;
    }

    public String getF_name() {
        return f_name;
    }

    public void setF_name(String f_name) {
        this.f_name = f_name;
    }

    public float getF_price() {
        return f_price;
    }

    public void setF_price(float f_price) {
        this.f_price = f_price;
    }

    public int getQuantity() {
        return quantity;
    }

    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }

    @Override
    public String toString() {
        return "fruit{" +
                "f_id='" + f_id + ''' +
                ", s_id=" + s_id +
                ", f_name='" + f_name + ''' +
                ", f_price=" + f_price +
                ", quantity=" + quantity +
                '}';
    }
}
DROP TABLE IF EXISTS `fruits1`;
CREATE TABLE `fruits1`  (
  `f_id` char(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `s_id` int NOT NULL,
  `f_name` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `f_price` decimal(8, 2) NOT NULL,
  `quantity` int NULL DEFAULT 1000,
  PRIMARY KEY (`f_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;

INSERT INTO `fruits1` VALUES ('001', 100, '香蕉', 3.50, 1005);
INSERT INTO `fruits1` VALUES ('002', 100, '苹果', 3.20, 975);
INSERT INTO `fruits1` VALUES ('003', 100, '梨', 4.00, 1000);
INSERT INTO `fruits1` VALUES ('004', 100, '香蕉', 3.60, 1000);
INSERT INTO `fruits1` VALUES ('005', 100, '芒果', 5.00, 1000);
INSERT INTO `fruits1` VALUES ('008', 99, '苹果', 3.50, 1000);

3、创建数据源对象,jdbc模板对象jdbcTemplate

数据源对象需要数据库驱动,数据库的url,用户名,用户密码,所以我创建了一个配置文件jdbc.propertie。对应配置如下:

# 我的数据库信息
jdbc.driver= com.mysql.cj.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/fruitshop
jdbc.user_name = root
jdbc.password = 1234
    

    
        
        
        
        
    


    
        
    
4、编写对应CRUD操作的DAO

DAO接口

public interface FruitDao {

    int insertFruit(Fruit fruit);

    int deleteFruitById(String id);

    int updateFruit(Fruit fruit);

    Fruit selectFruitById(String id);

    List selectAllFruit();
}

DAO代码

使用JdbcTemplate模板对象之前先属性注入,才能使用里面的方法。使用JdbcTemplate比jdbc操作简单许多,基本上只用编写sql语句就行。增删改查都是用update方法,可以使用占位符,查询一条用queryForObject方法,查询多条用query。下面一一介绍增删改查对应方法:

增:

    public int insertFruit(Fruit fruit) {
        int i = jdbcTemplate.update("insert into fruits1  values (?,?,?,?,?)",
                fruit.getF_id(), fruit.getS_id(), fruit.getF_name(), fruit.getF_price(), fruit.getQuantity());
        return i;
    }

删:

    @Override
    public int deleteFruitById(String id) {
        int i = jdbcTemplate.update("delete from fruits1 where f_id = ?",id);
        return i;
    }

改:

    @Override
    public int updateFruit(Fruit fruit) {
        String sql = "update fruits1 set " +
                "s_id = "+ fruit.getS_id() +", " +
                "f_name = '"+fruit.getF_name()+ "', " +
                "f_price = "+fruit.getF_price()+" ," +
                "quantity = "+fruit.getQuantity()+" " +
                "where f_id = '"+fruit.getF_id()+"'";

        int i =jdbcTemplate.update(sql);
        return i;
    }

查询一条:

    @Override
    public Fruit selectFruitById(String id) {
        Fruit fruit = jdbcTemplate.queryForObject("select * from fruits1 where f_id = ?",new BeanPropertyRowMapper(Fruit.class),id);
        return fruit;
    }

查询所有:

    @Override
    public List selectAllFruit() {
        List fruits = jdbcTemplate.query("select * from fruits1", new BeanPropertyRowMapper(Fruit.class));
        return fruits;
    }

现在dao层代码简单实现了。

二、service层

service层比较简单
接口:

public interface FruitService {

    boolean insertFruit(Fruit fruit);

    boolean deleteFruitById(String id);

    boolean updateFruit(Fruit fruit);

    Fruit selectFruitById(String id);

    List selectAllFruit();
}

实现类:

@Service
public class FruitServiceImpl implements FruitService {
    @Autowired
    private FruitDaoImpl fruitDao;

    @Override
    public boolean insertFruit(Fruit fruit) {
        if(fruitDao.insertFruit(fruit)>0){
            return true;
        }
        return false;
    }
    @Override
    public boolean deleteFruitById(String id) {

        if (fruitDao.deleteFruitById(id)>0){
            return true;
        }
        return false;
    }
    @Override
    public boolean updateFruit(Fruit fruit) {
        if(fruitDao.updateFruit(fruit)>0){
            return true;
        }
        return false;
    }
    @Override
    public Fruit selectFruitById(String id) {

        return fruitDao.selectFruitById(id);

    }
    @Override
    public List selectAllFruit() {
        return fruitDao.selectAllFruit();
    }
}
三 、restful实现Controller层 1、配置编码过滤器,前端控制器,HiddenHttpMethodFilter过滤器
    
    
        rest
        org.springframework.web.servlet.DispatcherServlet
        
        
            contextConfigLocation
            classpath:springmvc-rest.xml
        
        
        1
    
    
        rest
        /
    

    
    
        CharacterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
        
            forceResponseEncoding
            true
        
        
            forceRequestEncoding
            true
        
    
    
        CharacterEncodingFilter
        /*
    

    
    
        HiddenHttpMethodFilter
        org.springframework.web.filter.HiddenHttpMethodFilter
    
    
        HiddenHttpMethodFilter
        /*
    
2、配置spring的xml配置文件

这里把我的全部贴到下面,




    

    

    
        
        
        
        
    


    
        
    

    
    
        
        
        
            
                
                    
                        
                        
                        
                        
                        
                        
                    
                
            
        
    


    
    

    

    

3、对数据库的操作

对数据库增删改restful都有对应的请求方式:增:POST,删:DELETE,改:PUT,查:GET。下面从易到难一一介绍各个操作

(1)查——GET

查询表里面的信息用的是GET方法,html默认的请求方式就是GET方法。
先写控制层方法:请求方式由于是get请求,可写可不写,由于查询到的结果需要响应到前端去,需要Model共享数据,当然还要其它方式也可以共享,可以根据你自己的想法。然后通过调用service层的selectAllFruit获取数据,在通过addAttribute方法将数据响应到前端,最后返回视图。

//    查看所有水果信息
    @RequestMapping(value = "fruit" ,method = RequestMethod.GET)
//    @RequestWrapper(value = "fruit")
    public String selectAllFruit(Model model){
        List fruits = fruitService.selectAllFruit();
        model.addAttribute("fruits",fruits);
        return "fruit-item";
    }

对应表单,先不看删除和修改里面的内容。利用thymeleaf视图解析器循环遍历后端响应到前端的数据,在一一打印出来。




    
    水果清单



水果详情表(添加)
水果ID 订单ID 水果名称 价格 订单数量 操作

结果如下:

(2)增——POST

增加用的请求方式是POST。增加信息没有什么可说的,和普通的servlet一样,先是从前端获取信息,然后通过执行sql语句操作数据库。

//    添加信息
    @RequestMapping(value = "/fruit",method = RequestMethod.POST)
    public String addFruit(Fruit fruit){

        boolean b = fruitService.insertFruit(fruit);
        if (b) {
            return "redirect:/fruit";
        }else {
            return "redirect:/error";
        }
    }
(3)改——PUT

修改数据库信息restful用的请求方式是PUT。表单的method属性里面只有get和post,你要告诉后端你要用的是PUT和DELETE请求,就必须瞒住以下三个条件:

  1. 配置HiddenHttpMethodFilter过滤器,这个过滤器可以实现PUT和DELETE请求的对应操作。
  2. 提交表单里面必须是POST请求。
  3. 需要有一个属性名为“-method”,值为对应请求方式的请求参数。

下面先实现controller的代码,修改时我先通过id值找到对应属性的信息,回显到前端页面,在通过表单提交到后端。注意配置请求映射时方法为PUT

//    回显订单信息
    @RequestMapping(value = "/fruit/{f_id}",method = RequestMethod.GET)
    public String selectById(@PathVariable("f_id") String f_id,Model model){
        Fruit fruit = fruitService.selectFruitById(f_id);
        model.addAttribute("fruit",fruit);
        return "updatefruit";
    }

//
    @RequestMapping(value = "fruit",method = RequestMethod.PUT)
    public String uodateFruit(Fruit fruit){
        boolean b = fruitService.updateFruit(fruit);
        if (b) {
            return "redirect:/fruit";
        }else {
            return "redirect:/error";
        }
    }

表单请求方式为POST,必须要有属性名为“-method”,值为“PUT”的请求参数。

(3)删——DELETE

删除处理方式和修改大致相同

//    根据id删除
    @RequestMapping(value = "/fruit/{f_id}",method = RequestMethod.DELETE)
    public String deleteFruitById(@PathVariable("f_id") String id){
        boolean b = fruitService.deleteFruitById(id);
        if (b) {
            return "redirect:/fruit";
        }else {
            return "redirect:/error";
        }
    }

表单请求方式为POST,必须要有属性名为“-method”,值为“DELETE”的请求参数。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/820952.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号