美文网首页
注解式mybatis使用

注解式mybatis使用

作者: GoddyWu | 来源:发表于2019-03-08 17:53 被阅读0次

上篇写了spring data jpa的使用,这里写下mybatis的使用。因为我不太会写xml同时也觉得它超麻烦,那这里介绍下使用注解管理mapper的方式。mybatis的优势在于可以使用灵活且强大的sql语句,但是添加了额外的维护工作。

构建基础项目架构

首先,创建项目时勾选需要的包:

这些相当于以下:

    <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>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>

    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.0.0</version>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>

配置application.yml文件:

spring:
  profiles:
    active: dev
---
spring:
  profiles: dev
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/kg_pipeline?useSSL=false&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: goddy
最后的项目结构大概是:

数据库操作

在我们编写之前,首先要在数据库建立好table。

-- database: xxx

-- table for xxx
DROP TABLE IF EXISTS `book`;
CREATE TABLE `book` (
  `id` INTEGER NOT NULL AUTO_INCREMENT ,
  PRIMARY KEY(id),
  `name` VARCHAR(255) NOT NULL COMMENT '名称',
  `price` FLOAT COMMENT '价格',
  `publish_date` TIMESTAMP COMMENT '发布日期',
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'
) DEFAULT CHARSET = utf8mb4 COMMENT '书籍表';

编写程序

创建我们java程序的model,因为sql已经编写的很完善了,所以蛮简单的
@Data  //lombok插件注解
@Builder(toBuilder = true)  //lombok插件注解
public class Book {
  private String id;
  private String name;
  private float price;
  private Date publishDate;
}
然后就是比较关键的repository:

注意,sql字段标准使用蛇形,而java使用驼峰,所以需要转换一下。
可以在配置中添加mybatis.configuration.mapUnderscoreToCamelCase=true自动转

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;

@Mapper
@Component  # 这里其实不需要加此注解,但是idea会报错,那就加上吧 :(
public interface BookRepository {

  @Select("select *, publish_date as publishDate from book")
  public List<Book> findAll();
}

入参,这里注意,#{xx}会添加双引号至变量左右, ${xx}不会添加。


  @Select("<script>select * from book <if test='id != null'> where id = '${id}' </if> </script>")
  public Book findById(@Param("id") String id);

  @Select("<script>select * from book <if test='name != null'> where name = #{name} </if> </script>")
  public Book findByName(@Param("name") String bookName);

也可以使用map来传递参数

  @Select("<script>select * from book <if test='name != null'> where name = #{name} </if> </script>")
  public Book findByName2(Map<String, String> paramMap);

或者使用对象来传递

  @Select("<script>select DATE_FORMAT(publish_date,'%Y-%m-%d') from book "
      + "<if test='name != null'> where name = #{name} </if> </script>")
  public Date findDateByName(Book book);

至此,基本使用注解式的mybatis就可以掌握啦、!

后续有小技巧,也会贴到这里,话说如果简书也能提mr,让我们共同维护文档就好了、唉、

相关文章

网友评论

      本文标题:注解式mybatis使用

      本文链接:https://www.haomeiwen.com/subject/iralpqtx.html