上篇写了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,让我们共同维护文档就好了、唉、
网友评论