Mybatis-Plus的配置
mybatis-plus可以在不配置xml和mapper的情况下进行数据存取(优于mybatis)
(只需要建一个空的mapper接口)
- Maven插件
velocity-engine-core是mybatis-plus自动生成代码所依赖的模板(不用自动生成代码功能可不用)
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.6</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
- application.properties配置
和普通mysql配置相同,没有额外配置
#mysql 连接配置
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
- Mapper相关注解
@MapperScan中直接mapper文件所在的package
@SpringBootApplication
@EnableTransactionManagement
@EnableEurekaClient
@MapperScan("com.example.demo.dao")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
- 创建数据库表
略
- 创建JavaBean(推荐使用Lombok插件方式) - Model层
@Data
@TableName("area")
@ToString(callSuper=true, includeFieldNames=true)
@AllArgsConstructor
@NoArgsConstructor
public class Area implements Serializable{
private static final long serialVersionUID = 1L;
private String id;
private String name;
private int sort;
}
- 创建Mapper - DAO层
只有自定义SQL时,mapper中才有内容, 使用mybatis-plus自带CRUD语句或者构造器拼接语句时, mapper通常为空
public interface AreaMapper extends BaseMapper<Area> {
//通过mybatis-plus提供的注解,直接自定义SQL
@Select("select name from area where sort > ${sort}")
List<String> getBySort2(@Param("sort")int sort);
}
- 创建逻辑接口 - Service层
public interface IAreaService {
public Area getById(String id);
public List<Area> selectAll();
public int updateByPrimaryKeySelective(Area record);
public int deleteByPrimaryKey(String id);
public int insertSelective(Area record);
public List<Area> getBySort();
public List<String> getBySort2(int sort);
}
- 创建逻辑类 - Service层
Mybatis-Plus使用SQL的3种常见方法:
a. 使用mybatis-plus自带CRUD方法: 直接用mapper的自带方法
b. 使用mybatis-plus提供的条件构造器,拼接where条件
c. 使用@Select,@Update等注解, 自己写SQL+参数
@Service
public class AreaServiceImpl implements IAreaService {
@Autowired
public AreaMapper areaMapper;
//使用mybatis-plus自带CRUD方法
@Override
public Area getById(String id) {
return areaMapper.selectById(id);
}
@Override
public List<Area> selectAll() {
return areaMapper.selectList(null);
}
@Override
@Transactional
public int updateByPrimaryKeySelective(Area record) {
return areaMapper.updateById(record);
}
@Override
public int deleteByPrimaryKey(String id) {
return areaMapper.deleteById(id);
}
@Override
public int insertSelective(Area record) {
return areaMapper.insert(record);
}
//使用mybatis-plus提供的条件构造器,拼接条件
@Override
public List<Area> getBySort(){
QueryWrapper<Area> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().gt(Area::getSort, 40)
.lt(Area::getSort, 80);
return areaMapper.selectList(queryWrapper);
}
//通过mybatis-plus提供的注解,直接自定义SQL(定义在mapper中)
@Override
public List<String> getBySort2(int sort){
return areaMapper.getBySort2(sort);
}
}
- 创建接口 - Controller层
@RestController
@RequestMapping("/area")
public class AreaController {
@Autowired
private IAreaService areaService;
@Autowired
private DbpropertiesService dbproService;
@Autowired
private Area area;
@Resource
protected HttpServletRequest request;
@RequestMapping(value = "/getAreaInfo",method=RequestMethod.GET)
public Area getAreaInfo(@RequestParam(value="id") String id) {
area = areaService.getById(id);
return area;
}
@RequestMapping(value = "/getAreaAllInfo",method=RequestMethod.GET)
public List<Area> getAreaInfo() {
List<Area> arlist