EasyExcel簡單的導出和下載


springboot整合mybatis-plus

一、簡單了解

0、前言

我是再IT技術上探索的求知者,剛進入IT這扇大門,希望能夠通過每天的總結,讓自己變得更加優秀。寫一些,我遇到的一些技術問題,其他的問題,等以后遇到的時候再整理,希望自己能夠堅持下去,並且能給你帶來一些幫助。

1 mybais-plus簡介

MyBatis-Plus (opens new window)(簡稱 MP)是一個 MyBatis (opens new window) 的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。

2 框架結構

image

二、開始實戰

1 創建數據庫

CREATE DATABASE db_test CHARSET=utf8;
USE db_test;
DROP TABLE tab_student;
CREATE TABLE tab_student(
	sid INT PRIMARY KEY AUTO_INCREMENT,
	sname VARCHAR(20),
	sage INT,
	sex VARCHAR(2)
);
INSERT INTO tab_student 
VALUES(NULL,SUBSTR(UUID(),1,5),
 TRUNCATE(RAND()*10+10,0),IF(RAND()>0.5,"男","女"));

2 創建項目

3 引入依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
    <version>5.1.45</version>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.3.2</version>
</dependency>
<!--引入fastjson-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.58</version>
</dependency>

4 配置文件

#鏈接數據庫的四大參數
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/db_test?useUnicode=true&characterEncoding=UTF-8

#顯示sql
logging.level.com.baizhou.mapper=debug
server.port=8081

5 創建實體類

  • Student
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "tab_student")
public class Student implements Serializable {
    @TableId(value = "sid",type = IdType.AUTO)//指定主鍵,主鍵自增策略,數據庫自增
    private Integer sid;
    @TableField(value = "sname")
    private String  sname;
    @TableField(value = "sage")
    private Integer sage;
    @TableField(value = "sex")
    private String sex;
}

6 創建dao層

  • StudentMapper
@Repository
public interface StudentMapper extends BaseMapper<Student> {
}

7 創建service層

  • StudentService
public interface StudentService {
    //增刪改查
    int addOne(Student student);
    int deleteOne(Integer sid);
    int updateOne(Student student);
    Student getOne(Integer sid);
    List<Student> getAll();
    //通過請求進行模糊查詢查詢,通過名字,或者性別,id進行查詢
    IPage<Student> getAllByResquest(String request);
    //通過名字進行模糊查詢
    List<Student> getAllByLike(String sname);
}
  • StudentServiceImp
import com.alibaba.fastjson.JSONObject;
import com.baizhou.entity.Student;
import com.baizhou.mapper.StudentMapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.val;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class StudentServiceImp implements StudentService {
    @Autowired
    private StudentMapper studentMapper;//自動裝配
    @Override
    public int addOne(Student student) {
        return studentMapper.insert(student);
    }
    //@Transactional(isolation = Isolation.READ_UNCOMMITTED):讀取未提交數據(會出現臟讀,
    //@Transactional(isolation = Isolation.READ_COMMITTED):讀取已提交數據(會出現不可重復讀和幻讀)
    //@Transactional(isolation = Isolation.REPEATABLE_READ):可重復讀(會出現幻讀)
    //@Transactional(isolation = Isolation.SERIALIZABLE):串行化
    @Override
    public int deleteOne(Integer sid) {
        val student = studentMapper.selectById(sid);//查詢是否存在
        if (student == null) {
            return 0;//不存在,刪除失敗
        }
        studentMapper.deleteById(sid);
        return 1;//刪除成功
    }
    @Override
    public int updateOne(Student student) {
        return studentMapper.updateById(student);
    }
    @Override
    public Student getOne(Integer sid) {
        if (sid == null) {
            return null;
        }
        Student student = studentMapper.selectById(sid);
        if (student == null) {
            return null;
        }
        return student;
    }
    @Override
    public List<Student> getAll() {
        return studentMapper.selectList(null);
    }

    /**
     * 請求格式:進行分頁查詢,模糊查詢,有sid根據sid查詢,沒有則不根據sid查詢
     * {
     * "sid":1,
     * "sname":"x",
     * "sex":"男",
     * "pageNum":1,
     * "pageSize":1
     * }
     */
    @Override
    public IPage<Student> getAllByResquest(String request) {
        //request是json字符串
        //把json串轉換成json對象
        val requestJson = JSONObject.parseObject(request);
        LambdaQueryWrapper<Student> queryWrapper = new LambdaQueryWrapper();
        //進行模糊查詢
        queryWrapper.eq(requestJson.getString("sid") != null, Student::getSid, requestJson.getString("sid"))
                .and(wrapper -> wrapper.like(Student::getSname, requestJson.getString("sname"))
                        .or().like(Student::getSex, requestJson.getString("sex")
                        ));
        //進行分頁查詢
        Page page=new Page(requestJson.getInteger("pageNum"),requestJson.getInteger("pageSize"));
        IPage<Student> ipage=studentMapper.selectPage(page,queryWrapper);

        return ipage;
    }
    @Override
    public List<Student> getAllByLike(String sname) {
        val queryWrapper=new LambdaQueryWrapper<Student>();
        queryWrapper.like(Student::getSname,sname);
        return studentMapper.selectList(queryWrapper);
    }
}

8 測試

@SpringBootTest
class SpringbootMybatisPlusApplicationTests {
    @Autowired
    private StudentService studentService;
    @Test
    void setStudentServiceTest() {
        studentService.getAll();
        studentService.getAllByLike("3");

        String requestJson=  "{ \"sid\":1, \"sname\":\"x\", \"sex\":\"男\", \"pageNum\":1, \"pageSize\":1 }";
        String requestJson2=  "{ \"sname\":\"3\", \"sex\":\"男\", \"pageNum\":1, \"pageSize\":5 }";
        studentService.getAllByResquest(requestJson);
        studentService.getAllByResquest(requestJson2);
    }
}
  • 結果
studentService.getAll();
==>  Preparing: SELECT sid,sname,sage,sex FROM tab_student 
2021-07-27 23:35:45.005 DEBUG 1600 --- [           main] c.b.mapper.StudentMapper.selectList      : ==> Parameters: 
2021-07-27 23:35:45.026 DEBUG 1600 --- [           main] c.b.mapper.StudentMapper.selectList      : <==      Total: 9
 

studentService.getAllByLike("3");
==>  Preparing: SELECT sid,sname,sage,sex FROM tab_student WHERE (sname LIKE ?) 
2021-07-27 23:35:45.069 DEBUG 1600 --- [           main] c.b.mapper.StudentMapper.selectList      : ==> Parameters: %3%(String)
2021-07-27 23:35:45.073 DEBUG 1600 --- [           main] c.b.mapper.StudentMapper.selectList      : <==      Total: 9

studentService.getAllByResquest(requestJson);
2021-07-27 23:35:45.159 DEBUG 1600 --- [           main] c.b.mapper.StudentMapper.selectPage      : ==>  Preparing: SELECT sid,sname,sage,sex FROM tab_student WHERE (sid = ? AND (sname LIKE ? OR sex LIKE ?)) 
2021-07-27 23:35:45.159 DEBUG 1600 --- [           main] c.b.mapper.StudentMapper.selectPage      : ==> Parameters: 1(String), %x%(String), %男%(String)
2021-07-27 23:35:45.160 DEBUG 1600 --- [           main] c.b.mapper.StudentMapper.selectPage      : <==      Total: 0

studentService.getAllByResquest(requestJson2);
2021-07-27 23:35:45.163 DEBUG 1600 --- [           main] c.b.mapper.StudentMapper.selectPage      : ==>  Preparing: SELECT sid,sname,sage,sex FROM tab_student WHERE ((sname LIKE ? OR sex LIKE ?)) 
2021-07-27 23:35:45.163 DEBUG 1600 --- [           main] c.b.mapper.StudentMapper.selectPage      : ==> Parameters: %3%(String), %男%(String)
2021-07-27 23:35:45.164 DEBUG 1600 --- [           main] c.b.mapper.StudentMapper.selectPage      : <==      Total: 9

三、總結

今天遇到了使用mybatis-plus,進行模糊查詢是and和or進行嵌套的問題,所以寫下了一個小案例。
// A or (B and C)
.eq("a", "A").or(i -> i.eq("b", "B").eq("c", "C"));

// A or (B or C)
.eq("a", "A").or(i -> i.eq("b", "B").or().eq("c", "C"));

// A and (B and C)
.eq("a", "A").and(i -> i.eq("b", "B").eq("c", "C"));

// A and (B or C)
.eq("a", "A").and(i -> i.eq("b", "B").or().eq("c", "C"));


免責聲明!

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



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