国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

SpringBoot 實戰 (九) | 整合 Mybatis

felix0913 / 946人閱讀

摘要:提供映射標簽,支持對象與數據庫的字段關系映射提供對象關系映射標簽,支持對象關系組建維護提供標簽,支持編寫動態。層實現類添加更新刪除根據查詢查詢所有的層構建測試結果其他接口已通過測試,無問題。

微信公眾號:一個優秀的廢人
如有問題或建議,請后臺留言,我會盡力解決你的問題。
前言

如題,今天介紹 SpringBoot 與 Mybatis 的整合以及 Mybatis 的使用,本文通過注解的形式實現。

什么是 Mybatis

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

優點:

簡單易學:本身就很小且簡單。沒有任何第三方依賴,最簡單安裝只要兩個 jar 文件+配置幾個 sql 映射文件易于學習,易于使用,通過文檔和源代碼,可以比較完全的掌握它的設計思路和實現。

靈活:mybatis 不會對應用程序或者數據庫的現有設計強加任何影響。 sql 寫在 xml 里,便于統一管理和優化。通過 sql 基本上可以實現我們不使用數據訪問框架可以實現的所有功能,或許更多。

解除 sql 與程序代碼的耦合:通過提供 DAL 層,將業務邏輯和數據訪問邏輯分離,使系統的設計更清晰,更易維護,更易單元測試。sql 和代碼的分離,提高了可維護性。

提供映射標簽,支持對象與數據庫的 orm 字段關系映射

提供對象關系映射標簽,支持對象關系組建維護

提供xml標簽,支持編寫動態 sql。

缺點:

編寫 SQL 語句時工作量很大,尤其是字段多、關聯表多時,更是如此。

SQL 語句依賴于數據庫,導致數據庫移植性差,不能更換數據庫。

框架還是比較簡陋,功能尚有缺失,雖然簡化了數據綁定代碼,但是整個底層數據庫查詢實際還是要自己寫的,工作量也比較大,而且不太容易適應快速數據庫修改。

二級緩存機制不佳

準備工作

IDEA

JDK1.8

SpringBoot 2.1.3

sql 語句,創建表,插入數據:

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `age` double DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
INSERT INTO `student` VALUES ("1", "aaa", "21");
INSERT INTO `student` VALUES ("2", "bbb", "22");
INSERT INTO `student` VALUES ("3", "ccc", "23");
pom.xml 文件配置依賴


    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.3.RELEASE
         
    
    com.nasus
    mybatis
    0.0.1-SNAPSHOT
    mybatis
    mybatis Demo project for Spring Boot

    
        1.8
    

    
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.0.0
        
        
        
            mysql
            mysql-connector-java
            runtime
        
        
        
            com.alibaba
            druid
            1.1.9
        
        
        
            org.projectlombok
            lombok
            true
        
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
      
        
            org.hibernate.javax.persistence
            hibernate-jpa-2.1-api
            1.0.0.Final
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    
application.yaml 配置文件
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
實體類
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {

    @Id
    @GeneratedValue
    private Integer id;

    private String name;

    private Integer age;

}

使用了 lombok 簡化了代碼。

dao 層
import com.nasus.mybatis.domain.Student;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

@Mapper
public interface StudentMapper {

    @Insert("insert into student(name, age) values(#{name}, #{age})")
    int add(Student student);

    @Update("update student set name = #{name}, age = #{age} where id = #{id}")
    int update(@Param("name") String name, @Param("age") Integer age, @Param("id") Integer id);

    @Delete("delete from student where id = #{id}")
    int delete(int id);

    @Select("select id, name as name, age as age from student where id = #{id}")
    Student findStudentById(@Param("id") Integer id);

    @Select("select id, name as name, age as age from student")
    List findStudentList();
}

這里有必要解釋一下,@Insert 、@Update、@Delete、@Select 這些注解中的每一個代表了執行的真實 SQL。 它們每一個都使用字符串數組 (或多帶帶的字符串)。如果傳遞的是字符串數組,它們由每個分隔它們的多帶帶空間串聯起來。這就當用 Java 代碼構建 SQL 時避免了“丟失空間”的問題。 然而,如果你喜歡,也歡迎你串聯多帶帶 的字符串。屬性:value,這是字符串 數組用來組成多帶帶的 SQL 語句。

@Param 如果你的映射方法的形參有多個,這個注解使用在映射方法的參數上就能為它們取自定義名字。若不給出自定義名字,多參數(不包括 RowBounds 參數)則先以 "param" 作前綴,再加上它們的參數位置作為參數別名。例如 #{param1},#{param2},這個是默認值。如果注解是 @Param("id"),那么參數就會被命名為 #{id}。

service 層
import com.nasus.mybatis.domain.Student;
import java.util.List;

public interface StudentService {

    int add(Student student);

    int update(String name, Integer age, Integer id);

    int delete(Integer id);

    Student findStudentById(Integer id);

    List findStudentList();

}

實現類:

import com.nasus.mybatis.dao.StudentMapper;
import com.nasus.mybatis.domain.Student;
import com.nasus.mybatis.service.StudentService;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class StudentServiceImpl implements StudentService {

    @Autowired
    private StudentMapper studentMapper;

    /**
     * 添加 Student
     * @param name
     * @param age
     * @return
     */
    @Override
    public int add(Student student) {
        return studentMapper.add(student);
    }

    /**
     * 更新 Student
     * @param name
     * @param age
     * @param id
     * @return
     */
    @Override
    public int update(String name, Integer age, Integer id) {
        return studentMapper.update(name,age,id);
    }

    /**
     * 刪除 Student
     * @param id
     * @return
     */
    @Override
    public int delete(Integer id) {
        return studentMapper.delete(id);
    }

    /**
     * 根據 id 查詢 Student
     * @param id
     * @return
     */
    @Override
    public Student findStudentById(Integer id) {
        return studentMapper.findStudentById(id);
    }

    /**
     * 查詢所有的 Student
     * @return
     */
    @Override
    public List findStudentList() {
        return studentMapper.findStudentList();
    }
}
controller 層構建 restful API
import com.nasus.mybatis.domain.Student;
import com.nasus.mybatis.service.StudentService;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/Student")
public class StudentController {

    @Autowired
    private StudentService studentService;

    @PostMapping("")
    public int add(@RequestBody Student student){
        return studentService.add(student);
    }

    @PutMapping("/{id}")
    public int updateStudent(@PathVariable("id") Integer id, @RequestParam(value = "name", required = true) String name,
            @RequestParam(value = "age", required = true) Integer age){
        return studentService.update(name,age,id);
    }

    @DeleteMapping("/{id}")
    public void deleteStudent(@PathVariable("id") Integer id){
        studentService.delete(id);
    }

    @GetMapping("/{id}")
    public Student findStudentById(@PathVariable("id") Integer id){
        return studentService.findStudentById(id);
    }

    @GetMapping("/list")
    public List findStudentList(){
        return studentService.findStudentList();
    }
}
測試結果

其他接口已通過 postman 測試,無問題。

源碼下載:github 地址

后語

以上為 SpringBoot 實戰 (九) | 整合 Mybatis 的教程,除了注解方式實現以外,Mybatis 還提供了 XML 方式實現。想了解更多用法請移步官方文檔。

最后,對 Python 、Java 感興趣請長按二維碼關注一波,我會努力帶給你們價值,如果覺得本文對你哪怕有一丁點幫助,請幫忙點好看,讓更多人知道。

另外,關注之后在發送 1024 可領取免費學習資料。資料內容詳情請看這篇舊文:Python、C++、Java、Linux、Go、前端、算法資料分享

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73369.html

相關文章

  • spring boot - 收藏集 - 掘金

    摘要:引入了新的環境和概要信息,是一種更揭秘與實戰六消息隊列篇掘金本文,講解如何集成,實現消息隊列。博客地址揭秘與實戰二數據緩存篇掘金本文,講解如何集成,實現緩存。 Spring Boot 揭秘與實戰(九) 應用監控篇 - HTTP 健康監控 - 掘金Health 信息是從 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring...

    rollback 評論0 收藏0
  • SpringBoot 實戰 (十三) | 整合 MyBatis (XML 版)

    摘要:如要運行多次,請把上次生成的映射文件代碼刪除再運行。層啟動類掃描接口,必須加上提一嘴,這個注解非常的關鍵,這個對應了項目中所對應的包路徑,必須加上,否則會導致異常。另外,關注之后在發送可領取免費學習資料。 微信公眾號:一個優秀的廢人如有問題或建議,請后臺留言,我會盡力解決你的問題。 前言 如題,今天介紹 SpringBoot 與 Mybatis 的整合以及 Mybatis 的使用,之前...

    _Zhao 評論0 收藏0
  • 寫這么多系列博客,怪不得找不到女朋友

    摘要:前提好幾周沒更新博客了,對不斷支持我博客的童鞋們說聲抱歉了。熟悉我的人都知道我寫博客的時間比較早,而且堅持的時間也比較久,一直到現在也是一直保持著更新狀態。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好幾周沒更新博客了,對不斷支持我博客的童鞋們說聲:抱歉了!。自己這段時...

    JerryWangSAP 評論0 收藏0

發表評論

0條評論

felix0913

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<