mybatis-plus的使用

本文详细介绍了如何使用MyBatis-Plus进行数据库操作,包括安装插件、导入依赖、实体类映射、编写Mapper接口及XML文件、Service层的实现。重点讲解了自动和手动映射规则,以及多表联查的操作,同时也提到了在多表操作时的解决方案和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://www.cnblogs.com/l-y-h/p/12859477.html#_label0_0

(1)按装插件:mybatisx(可安可不安)

(2)导入依赖

【mybatis-plus】

<dependency>

<groupId>com.baomidou</groupId>

<artifactId>mybatis-plus-boot-starter</artifactId>

<version>3.4.3.1</version>

</dependency>

【mysql-connector】

注意:

导入了mybatis-spring就不需要单独导入jdbc了,其中包含有。

【多个属性要分开配置注入注解】

@Autowired

private EmployeeMapper employeeMapper;

@Autowired

private DepartmentMapper departmentMapper;

(3)编写实体类,注意实体类与数据库表的名称映射关系

Mybatis-plus处理实体类及其属性 & 数据库表及其列名的映射关系

【自动映射】

实体类的驼峰命名 <------自动映射------> 数据库表的下划线命名

MyTable --------- my_table

DePartment ---------- de_partment

Name ---- name

MyName --------- my_name

注意:数据库表里只有小写,没有大写。

【手动配置方式】

注解@TableName     在类名上方添加@TableName("my_user_table")

(4)编写mapper继承BaseMapper<Department>

配置注解:@mapper

@repository

默认获取常见单表的CRUD操作;

也可以自定义数据库操作;

【缺点】默认操作只有单表操作,多表查询必须自己写方法。

(5)mybatis-plus执行联表操作

mybatis-plus默认操作只有单表操作,多表操作必须自己写方法。

【自定义mapper方法】

(1)mapper接口不继承默认父类

public interface EmployeeMapper{...}

(2)配置文件中指定包的别名以及mapper.xml文件的位置

mybatis-plus:

type-aliases-package: com.wwb.pojo

mapper-locations: classpath*:/mapper/*.xml

(3)在mapper.xml文件中写自定义数据库操作方法

【关联一个实体类】(多对一)

- 查询

//先查出所有结果

<select id="queryALL" resultMap="employMap">

select * from mybatis.employee e,mybatis.department d WHERE e_d_id=d_id;

</select>

//再将结果在resultMap中映射,关键词association

<resultMap id="employMap" type="employee">

<result column="e_id" property="eId"/>

<result column="e_name" property="eName"/>

<result column="e_email" property="eEmail"/>

<result column="e_gender" property="eGender"/>

<result column="e_birth" property="eBirth"/>

<association property="department" javaType="department">

<result column="d_id" property="dId"/>

<result column="d_name" property="dName"/>

</association>

</resultMap>

- 插入或更新

【问题】

多表级联时,java实体类的属性中有对象,而数据库表中对应的列名往往是外键id。

因此实体类中关联有其他对象时,进行更新或插入时就需要考虑将一个对象映射为一个基本属性值(外键id)。

public class Employee {

private Integer eId;

private String eName;

private String eEmail;

private Integer eGender;

private Department department; //关联了另外一个对象

private Date eBirth;

}

//而数据库表的对应列名是一个int值

【解决】

暂未找到级联插入的mapper实现

妥协办法:在service层将前端传来的对象转换为map,将map作为参数类型传入mapper.xml进行操作

public class EmployeeServiceImpl implements EmployeeService {

@Resource

private EmployeeMapper mapper;

private Map<String, Object> map;

//将employee对象转换为map类型对象

private void setMap(Employee employee) {

Map<String, Object> map = new HashMap<>();

map.put("eId",employee.getEId());

map.put("eName",employee.getEName());

map.put("eDId",employee.getDepartment().getDId());

map.put("eBirth",employee.getEBirth());

map.put("eEmail",employee.getEEmail());

map.put("eGender",employee.getEGender());

this.map = map;

}

//service接收前端的对象,转换后进行插入/更新操作

@Override

public int add(Employee employee) {

setMap(employee);

return mapper.add(map);

}

【关联多个实体类】(一对多)

- 查询

//首先查询出全部结果

//将查询结果进行映射,对应集合属性,使用<colletion>标签进行对应,注意使用的类型为ofType

- 插入或更新

同关联一个对象

【注意】

①为了写mapper.xml方便,数据库不同表的列名完全不同;

s_id;

t_di;

②service层Impl必须要注册bean

(6)service层

mybatis-plus帮助我们在service层接话接口和实现类;

【service层接口】

继承 IService<pojo>

public interface DepartmentService extends IService<Department>{

}

【service层实现类】

继承 ServiceImpl<mapper,pojo>

实现 service层接口

public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper,Department> implements DepartmentService { }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值