SpringBoot+Mybatis實現增刪改查Demo


SpringBoot的出現減輕了開發者的配置工作量,而mybatis的出現又大大減少了我們隊數據庫操作的代碼量。

看一下MyBatis 的官方定義:

MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄

下面我們就來做一個小DEMO,實現CRUD:

背景:對一個叫做gate_test的表(id,name)做增刪改查,其中id是自增主鍵。

1.引用mybatis包,並配置掃描實體類和mapper.xml的位置。

  我們在application.properties中配置:

 

2.創建gateTest實體:

 

3.創建相應的接口和接口實現類:

紅框中就是增刪改查的方法,具體實現在GateTestServiceImpl.java文件里面:

@Override
    public void insertGateTestService() {
        GateTest gateTest = new GateTest();
        int val = (int)(Math.random()*100+1);
        String name = "zhangsan"+val;
        gateTest.setName(name);
        gateTestMapper.insert(gateTest);
        
    }
    @Override
    public void deleteGateTestService(int id) {
      gateTestMapper.deleteByPrimaryKey(id);
    }
    @Override
    public void updateGateTestService(int id,String name) {
        GateTest gateTest = new GateTest();
        gateTest.setId(id);
        gateTest.setName(name);
        gateTestMapper.updateByPrimaryKey(gateTest);
    }
    @Override
    public GateTest getTestDateService(int id) {
        GateTest gateTest = gateTestMapper.selectByPrimaryKey(id);
        return gateTest;
    }

  

4,增加GateTestMapper接口類:(這里的方法就和GateTestMapper.xml中的id保持一致)

package com.test.base.dao;

import java.util.List;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;

import com.test.base.entity.BaseExample;
import com.test.base.entity.GateTest;
import com.test.base.entity.GateTestExample;

@Mapper
public interface GateTestMapper extends BaseDao<GateTest, BaseExample>{
    
    List<GateTest> directQuery(@Param("sql")String sql);

    int deleteByPrimaryKey(Integer id);
    
    int insert(GateTest record);

    int insertSelective(GateTest record);

    GateTest selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(GateTest record);

    int updateByPrimaryKey(GateTest record);
}

5,增加GateTestMapper.xml,注意id和上面GateTestMapper.java的方法名保持一致

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.test.base.dao.GateTestMapper" >
  <resultMap id="BaseResultMap" type="com.test.base.entity.GateTest" >
    <id column="id" property="id" jdbcType="INTEGER" />
    <result column="name" property="name" jdbcType="VARCHAR" />
  </resultMap>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
    select 
    <include refid="Base_Column_List" />
    from gate_test
    where id = #{id,jdbcType=INTEGER}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
    delete from gate_test
    where id = #{id,jdbcType=INTEGER}
  </delete>
  <insert id="insert" parameterType="com.test.base.entity.GateTest" >
    insert into gate_test values (#{id}, #{name,jdbcType=VARCHAR})
  </insert>
  <select id="countByExample" parameterType="com.test.base.entity.GateTestExample" resultType="java.lang.Integer" >
    select count(*) from gate_test
    <if test="_parameter != null" >
      <include refid="Example_Where_Clause" />
    </if>
  </select>
  <update id="updateByPrimaryKey" parameterType="com.test.base.entity.GateTest" >
    update gate_test
    set name = #{name,jdbcType=VARCHAR}
    where id = #{id,jdbcType=INTEGER}
  </update>
  
</mapper>

  注意:一定要將**mapper.xml放在指定配置的目錄中,否則掃描不到。

6.我們在數據庫中創建gate_test表,包括兩個字段int id,varchar name,關於數據庫的配置也在application.properties中:

7.寫控制器測試代碼GateTestController.java:

package com.test.base.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSON;
import com.test.base.entity.GateTest;
import com.test.base.service.GateTestService;

@Controller
public class GateTestController {
    @Autowired
    private GateTestService gateTestService; 
    @RequestMapping("/insertGateTest")
    @ResponseBody
    public String insertGateTest(Model model, HttpServletRequest request, String typeCode) {
        gateTestService.insertGateTestService();
        return "ok";
    }
    
    @RequestMapping(value="/getGateTest/{id}",method= RequestMethod.GET)
    @ResponseBody
    public Object getGateTest(@PathVariable("id") int id) {
        GateTest gateTest = new GateTest();
        gateTest = gateTestService.getTestDateService(id);
        return JSON.toJSON(gateTest);
    }
    
    @RequestMapping(value="/updateGateTest/{id}/{name}",method= RequestMethod.GET)
    @ResponseBody
    public Object updateGateTest(@PathVariable("id") int id,@PathVariable("name") String name) {
        gateTestService.updateGateTestService(id,name);
        return "update id= "+id+" successful";
    }
    
    @RequestMapping(value="/deleteGateTest/{id}",method= RequestMethod.GET)
    @ResponseBody
    public Object deleteGateTest(@PathVariable("id") int id) {
        gateTestService.deleteGateTestService(id);
        return "delete id= "+id+" successful";
    }
}

  

8.到此為止,完成了所有配置代碼,可以測試一下:

增加:http://127.0.0.1:8082/insertGateTest

刪除id為6的數據:http://127.0.0.1:8082/deleteGateTest/6

修改id為3的name為“ceshi”: http://127.0.0.1:8082/updateGateTest/3/ceshi

查看id為4的數據:http://127.0.0.1:8082/getGateTest/4

 

基礎知識,僅做記錄便於回憶,方便初學者

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM