前言
本记录详细记录本人学习spring cloud继承mybatis plus方法,适用于初学者。
项目结构简单介绍
本系统目前新建两个dmeo服务,分别是demo-user和demo-order两个module,结构完全一样,配置文件个人喜欢使用yml文件,结构如下:
引入依赖
目前最新依赖为:
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency>
多个项目同时需要这个依赖,可以将依赖在父级的pom文件中进行配置,然后让所有子模块继承父级即可,操作如下:
在所有子模块中添加parent标签,以表示父级地址,本项目如下:
<parent> <groupId>priv.sinoam.cloud</groupId> <artifactId>spring-cloud</artifactId> <version>1.0-SNAPSHOT</version> </parent>
在父级将module表示出来:
<modules> <module>demo-order</module> <module>demo-user</module> </modules>
配置完成后,子集项目可以共用父级所配置的依赖
配置application.yml配置文件
1.配置数据源
本项目使用MYSQL数据库,配置如下:
spring:
application:
name: demo-user
datasource:
url: jdbc:mysql://localhost:3306/springcloud-demo
username: root
password: *******
driver-class-name: com.mysql.cj.jdbc.Driver
最新驱动为com.mysql.cj.jdbc.Driver,使用以前的会报错误
2.配置mybatis-plus
mybatis-plus:
global-config:
db-config:
id-type: auto
field-strategy: not_empty
#驼峰下划线转换
column-underline: true
#逻辑删除配置
logic-delete-value: 0
logic-not-delete-value: 1
db-type: mysql
refresh: false
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
mapper-locations: /mapper/**/*Mapper.xml
配置完成后,数据库和实体类必须是下划线式、驼峰式进行对应,否则使用自带的sql执行方法会找不到表
如最后一行所配置,实际路径为src/main/resources/mapper/**/*Mapper.xml,在src/main/resources/mapper下面的所有结尾为Mapper.xml的文件,都会被扫描到,如此一来,可以在mapper中写复杂sql
使用
以SYS_USER表为例,表结构如下:
新建实体类:
1 package priv.sinoam.demouser.demo.po; 2 3 import java.io.Serializable; 4 5 import lombok.Data; 6 7 /** 8 * sys_user 9 * 10 * @author 11 */ 12 @Data 13 public class SysUser implements Serializable { 14 private String id; 15 16 /** 17 * 账号 18 */ 19 private String account; 20 21 /** 22 * 姓名 23 */ 24 private String name; 25 26 private static final long serialVersionUID = 1L; 27 }
新建Dao层接口:
1 package priv.sinoam.demouser.demo.mapper; 2 3 import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 import org.apache.ibatis.annotations.Mapper; 5 import priv.sinoam.demouser.demo.po.SysUser; 6 7 @Mapper 8 public interface SysUserDao extends BaseMapper<SysUser> { 9 }
继承BaseMapper,将实体类传进去,需要注解@Mapper
在service层中进行使用,首先将接口注入进去:
@Autowired private SysUserDao sysUserDao;
然后调用时会发现单表增删改查已经自动集成,直接调用即可
若要写复杂sql,则需要在xml中进行编写。
先在Dao层接口中声明方法queryTest:
@Mapper public interface SysUserDao extends BaseMapper<SysUser> { String queryTest(); }
然后再在对应的xml中编写sql:
<?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="priv.sinoam.demouser.demo.mapper.SysUserDao"> <resultMap id="BaseResultMap" type="priv.sinoam.demouser.demo.po.SysUser"> <id column="ID" jdbcType="VARCHAR" property="id" /> <result column="ACCOUNT" jdbcType="VARCHAR" property="account" /> <result column="NAME" jdbcType="VARCHAR" property="name" /> </resultMap> <sql id="Base_Column_List"> ID, ACCOUNT, `NAME` </sql> <select id="queryTest" resultType="java.lang.String"> select ID from SYS_USER WHERE ID = 1 </select> </mapper>
namespace为命名空间;只想对应的Dao接口,resultMap为结果集,指定返回结果为实体类,而且和字段一一对应,使用Base_Column_List作为返回值时,会自动转成实体类;最后可以看到select标签,id即Dao层接口的方法名,执行此方法后,将会执行这个sql。
结束
已经测试通过,主要环节在于配置。