导入依赖
配置
# application.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/yogurt?serverTimezone=Asia/Shanghai
username: root
password: root
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启SQL语句打印
type-aliases-package: com.wzx.bootmybatisone.entity #给实体类起别名
创建实体类
package com.wzx.bootmybatisone.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
//实体类对应的表名
@TableName("t_address")
public class Address {
//自增的主键Id
@TableId(type = IdType.AUTO)
private Integer id;
private String addr;
private String phone;
private String postcode;
//对应表中的字段名
@TableField("user_id")
private Integer userId;
}
持久层创建mapper
mapper接口继承BaseMapper,
package com.wzx.bootmybatisone.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wzx.bootmybatisone.entity.Address;
import org.springframework.stereotype.Component;
@Component
public interface AddressMapper extends BaseMapper<Address> {
//BaseMapper 里有许多封装好的sql方法
}
业务层创建BaseService,并创建其实现类
业务接口里的方法,自己写自己需要的
package com.wzx.bootmybatisone.service;
import java.util.List;
public interface BaseService<T> {
Integer saveEntity(T entity);
Integer deleteById(Integer id);
Integer updateById(T entity);
T selectById(Integer id);
List<T> selectList(T entity);
}
实现类专门实现上面的BaseService接口,重写里面自己定义的所有需要用的方法
package com.wzx.bootmybatisone.service.impl;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wzx.bootmybatisone.service.BaseService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.List;
@Service
@AllArgsConstructor
public class BaseServiceImpl<T,E extends BaseMapper<T>> implements BaseService<T> {
private final E mapper;
@Override
public Integer saveEntity(T entity) {
return mapper.insert(entity);
}
@Override
public Integer deleteById(Integer id) {
return mapper.deleteById(id);
}
@Override
public Integer updateById(T entity) {
return mapper.updateById(entity);
}
@Override
public T selectById(Integer id) {
return mapper.selectById(id);
}
@Override
public List<T> selectList(T entity) {
QueryWrapper<T> wrapper=new QueryWrapper<>();
Class<?> aClass = entity.getClass();
Field[] fields = aClass.getDeclaredFields();
for (Field eve:fields) {
try {
eve.setAccessible(true);
if(eve.get(entity)==null){
continue;
}
TableField annotation = eve.getAnnotation(TableField.class);
if (annotation==null) {
wrapper.eq(eve.getName(),eve.get(entity));
}else{
wrapper.eq(annotation.value(),eve.get(entity));
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return mapper.selectList(wrapper);
}
}
业务层再创建实体类对应的业务
接口继承BaseService
每次创建的实体类对应的业务接口都去继承统一的BaseService接口,就不用自己写多余的代码了
接口对应的实现类同理
package com.wzx.bootmybatisone.service;
import com.wzx.bootmybatisone.entity.Address;
public interface AddressService extends BaseService<Address>{
// List<Address> getAddress(Address address);
}
package com.wzx.bootmybatisone.service.impl;
import com.wzx.bootmybatisone.entity.Address;
import com.wzx.bootmybatisone.mapper.AddressMapper;
import com.wzx.bootmybatisone.service.AddressService;
import org.springframework.stereotype.Service;
@Service
public class AddressServiceImpl extends BaseServiceImpl<Address,AddressMapper> implements AddressService {
public AddressServiceImpl(AddressMapper mapper) {
super(mapper);
}
}
控制层调用
package com.wzx.bootmybatisone.controller;
import com.wzx.bootmybatisone.entity.Address;
import com.wzx.bootmybatisone.service.AddressService;
import com.wzx.bootmybatisone.vo.AjaxResult;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Controller
@RequestMapping("address")
@AllArgsConstructor
public class AddressController {
private final AddressService addressService;
@RequestMapping("list")
@ResponseBody
public AjaxResult<List<Address>> getAddress(@RequestBody Address address) {
List<Address> address1 = addressService.selectList(address);
return new AjaxResult<>(address1);
}
}
目录结构如下