SpringBoot整合MyBatisPlus

第一步:創建Maven項目

  • 添加Maven依賴
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

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

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

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

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.21</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.22</version>
    </dependency>

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.3.0</version>
    </dependency>

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus</artifactId>
        <version>3.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-core</artifactId>
        <version>3.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-extension</artifactId>
        <version>3.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-annotation</artifactId>
        <version>3.3.0</version>
    </dependency>
    <!-- 解決LocalDate問題-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-typehandlers-jsr310</artifactId>
        <version>1.0.2</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
  • 編寫配置文件application.yml
server:
  port: 80
  servlet:
    context-path: /imbp

spring:
  #配置數據源
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/db_test?useSSL=false&serverTimezone=GMT%2B8
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource
    # 連接池的配置信息:初始化大小,最小,最大
    initial-size: 8
    min-idle: 1
    max-active: 20
    # 配置獲取連接等待超時的時間
    max-wait: 60000
    # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連接,單位是毫秒
    time-between-eviction-runs-millis: 60000
    # 配置一個連接在池中最小生存的時間,單位是毫秒
    min-evictable-idle-time-millis: 300000
    #驗證庫是否正常sql
    validation-query: select 'x' from dual
    #空閒時驗證,防止連接斷開
    test-while-idle: true
    test-on-borrow: false
    test-on-return: false
    # 打開PSCache,並且指定每個連接上PSCache的大小
    pool-prepared-statements: true
    max-open-prepared-statements: 20
    max-pool-prepared-statement-per-connection-size: 20
    # 配置監控統計攔截的filters,去掉後監控界面sql無法統計,'wall'用於防火牆
    filters: stat,wall,slf4j
    # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
    connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    # 合併多個DruidDataSource的監控數據
    use-global-data-source-stat: true


#MyBatisPlus相關配置
mybatis-plus:
  #mapper映射文件位置,多個目錄用逗號或者分號分隔(告訴 Mapper 所對應的 XML 文件位置)
  mapper-locations: classpath:mapper/*.xml
  #實體掃描,多個package用逗號或者分號分隔
  typeAliasesPackage: com.hc.bean
  #  以下配置均有默認值,可以不設置
  global-config:
    db-config:
      #主鍵類型
      id-type: auto

      table-underline: true

      #邏輯刪除配置(下面3個配置)
      logic-delete-value: -1
      logic-not-delete-value: 1
      logic-delete-field: flag

      #數據庫大寫下劃線轉換
      capital-mode: true

  configuration:
    # 是否開啓自動駝峯命名規則映射:從數據庫列名到Java屬性駝峯命名的類似映射
    map-underscore-to-camel-case: true

    cache-enabled: false
    #配置JdbcTypeForNull
    jdbc-type-for-null: 'null'
    # 如果查詢結果中包含空值的列,則 MyBatis 在映射的時候,不會映射這個字段
    call-setters-on-nulls: true
    # 將執行的sql打印出來,在開發或測試的時候可以用
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

第二步:編寫配置文件

  • MyBatisPlusConfig
@Configuration
public class MyBatisPlusConfig {

    /**
     * 分頁插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

}
  • DruidConfig
@Configuration
public class DruidConfig {

    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druid(){
        return new DruidDataSource();
    }

    /**
     * druid 數據源狀態監控
     * @return
     */
    @Bean
    public ServletRegistrationBean statViewServlet(){
        //創建servlet註冊實體
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
        //設置ip白名單
        servletRegistrationBean.addInitParameter("allow","127.0.0.1");
        //設置ip黑名單,如果allow與deny共同存在時,deny優先於allow
        servletRegistrationBean.addInitParameter("deny","192.168.0.19");
        //設置控制檯管理用戶
        servletRegistrationBean.addInitParameter("loginUsername","druid");
        servletRegistrationBean.addInitParameter("loginPassword","1234");
        //是否可以重置數據
        servletRegistrationBean.addInitParameter("resetEnable","false");
        return servletRegistrationBean;
    }

    /**
     * druid 過濾器
     * @return
     */
    @Bean
    public FilterRegistrationBean statFilter(){
        //創建過濾器
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        //設置過濾器過濾路徑
        filterRegistrationBean.addUrlPatterns("/*");
        //忽略過濾的形式
        filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}

我們可以通過網頁的方式查看Druid監控,有關知識請參考博客:SpringBoot整合Druid

第三步:編寫實體類

@Getter
@Setter
@ToString
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "db_test.tb_emp")
public class Emp implements Serializable {

    private static final long serialVersionUID = -1696472017703928733L;

    @TableId(value = "empno", type = IdType.INPUT)
    private Integer empno;

    @TableField(value = "ename")
    private String ename;

    @TableField(value = "job")
    private String job;

    @TableField(value = "mgr")
    private Integer mgr;

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @TableField(value = "hiredate")
    private LocalDate hiredate;

    @TableField(value = "sal")
    private BigDecimal sal;

    @TableField(value = "comm")
    private BigDecimal comm;

    @TableField(value = "deptno")
    private Integer deptno;

}

第四步:編寫Dao接口及Mapper文件

  • EmpMapper.java
@Mapper
public interface EmpMapper extends BaseMapper<Emp> {
}
  • EmpMapper.xml
<?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.hc.mapper.EmpMapper">

</mapper>

第五步:編寫Service接口及實現類

  • EmpService
public interface EmpService extends IService<Emp>{

}
  • EmpServiceImpl
@Service
public class EmpServiceImpl extends ServiceImpl<EmpMapper, Emp> implements EmpService{

}

第六步:編寫Controller

@RestController
@RequestMapping("/emp")
public class EmpController {

    @Autowired
    private EmpService empService;

    @RequestMapping("/getEmpByEmpno")
    public Emp getEmpByEmpno(@RequestParam(value = "empno") Integer empno) {
        Emp res = empService.getById(empno);
        return res;
    }

    @RequestMapping("/listAll")
    public List<Emp> listAll() {
        System.out.println(empService);
        List<Emp> res = empService.list();
        return res;
    }

    @RequestMapping("/listByCondition")
    public List<Emp> listByCondition(String ename, Integer deptno) {

        QueryWrapper<Emp> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().eq(Emp::getEname, ename)
                .eq(Emp::getDeptno, deptno);

        List<Emp> emplist = empService.list(queryWrapper);

        return emplist;
    }

    @RequestMapping("/page")
    public IPage<Emp> page(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
                           @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
        //需要在Config配置類中配置分頁插件
        IPage<Emp> page = new Page<>(pageNum, pageSize);
        IPage<Emp> res = empService.page(page);
        return res;
    }

    //emp/save?empno=1234&ename=zhangsan&job=clerk&mgr=7788&hiredate=1999-09-21&sal=789&deptno=40
    @RequestMapping("/save")
    public boolean save(Emp emp) {
        boolean res = empService.save(emp);
        return res;
    }

    //emp/update?empno=1234&ename=lisi&job=manager&mgr=7788&hiredate=1999-09-21&sal=789&deptno=20
    @RequestMapping("/update")
    public boolean update(Emp emp) {
        boolean res = empService.updateById(emp);
        return res;
    }

    //emp/saveOrUpdate?empno=1234&ename=zhangsan&job=manager&mgr=7788&hiredate=1999-09-21&sal=789&deptno=20
    @RequestMapping("/saveOrUpdate")
    public boolean saveOrUpdate(Emp emp) {
        //實體類ID值存在,如果數據庫存在ID就會更新,如果不存在就會新增
        boolean res = empService.saveOrUpdate(emp);
        return res;
    }

    @RequestMapping("/removeById")
    public boolean removeById(Integer id) {
        boolean res = empService.removeById(id);
        return res;
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章