SpringBoot:MyBatis增强版:MyBatis-Plus ---- 19

ssss什么是MyBatis-Plus?MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。(建议安装 MybatisX 插件)

ssssmybatis plus 官网:https://baomidou.com/

ssss引入插件:MybatisX,自动映射mapper的跳转,

在这里插入图片描述

快速入门(对应官网指南的快速入门)

ssss①、引入 mybatis-plus-boot-starter 依赖

<dependency> 
	<groupId>com.baomidou</groupId> 
	<artifactId>mybatis-plus-boot-starter</artifactId> 
	<version>3.4.1</version> 
</dependency>

sdsddsdsdsdss在这里插入图片描述
sss【注】:mybatis-plus-boot-starter帮我们引入了mybatis-spring-boot-starter和spring-boot-starterdata-jdbc两个场景,因此我们不需要单独引入这两个场景了

ssss②、添加 Druid 数据源

sdsdsssⅠ. 引入druid-starter

<dependency> 
	<groupId>com.alibaba</groupId> 
	<artifactId>druid-spring-boot-starter</artifactId> 
	<version>1.1.17</version> 
</dependency>

sdsdsssⅡ. 在SpringBoot配置文件中尽行配置

spring: 
	datasource: 
		url: jdbc:mysql://localhost:3306/test 
		username: root 
		password: 123456 
		driver-class-name: com.mysql.jdbc.Driver

ssss③、在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹:

@MapperScan("com.njupt.boot.mapper") 
@SpringBootApplication 
public class Boot07MybatisPlusApplication { 
	public static void main(String[] args) { 
		SpringApplication.run(Boot07MybatisPlusApplication.class, args); 
	} 
}

测试模拟

ssss①、数据库中创建表
sdsdsdsdsdsdsssss在这里插入图片描述
ssss②、编写实体类 User1.java

@Controller
@AllArgsConstructor
@NoArgsConstructor
@Data
public class User1 {
    /**
     * 默认类中的所有属性都应该在数据库中 
     * 如果不存在需要用注解进行标注
     */
    @TableField(exist = false)
    private String userName;
    @TableField(exist = false)
    private String password;


   // 以下是数据库的字段
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

sss【注 】:实体类名必须要和要操作的表名一致,如果表名改变,需要使用 @TableName 注解其类对应的表。

ssss②、编写实体类 User1.java

/**
*	只需要我们的Mapper继承 BaseMapper 就可以拥有crud能力
*/
@Mapper
public interface UserMapper extends BaseMapper<User1> {
}

sdsdsdsdsdsdsdsdss在这里插入图片描述
ssss③、测试:

@Slf4j
@SpringBootTest
class Boot05WebAdminApplicationTests {

    @Autowired
    UserMapper userMapper;
    
    @Test
    void testUserMapper(){
        User1 user1 = userMapper.selectById(1L);
        log.info("用户信息,{}",user1);
    }
}

自动配置分析

sss在这里插入图片描述
ssss①、MybatisPlusAutoConfiguration自动配置类,MybatisPlusProperties配置项绑定,前缀为mybatis-plus
sdsdsdsdsdsdsddsssss在这里插入图片描述
ssss②、自动配置好了SqlSessionFactory。底层是容器中默认的数据源
sdssdsdsddssss在这里插入图片描述
ssss③、自动配置好mapperLocations 。有默认值 classpath*:/mapper/**/*.xml
sdsdsdddsdsss在这里插入图片描述
sdsdsdddsdsss在这里插入图片描述
sss【注】:任意包的类路径下的所有mapper文件夹下任意路径下的所有xml都是sql映射文件。建议以后sql映射文件,都放在mapper下。(在SqlSessionFactory中配置的)

ssss④、容器中也自动配置好了 SqlSessionTemplate
sdssss在这里插入图片描述
ssss⑤、自动导入了AutoConfiguredMapperScannerRegistrar类 ==》@Mapper 标注的接口也会被自动扫描
在这里插入图片描述
sss【注 】:建议直接 @MapperScan(“com.atguigu.webadmin.mapper”) 批量扫描就行

完整的CRUD测试 - 分页显示数据

ssss①、创建User1Mapper、User1Service接口、UserServiceImpl

/**
 *只需要我们的Mapper继承 BaseMapper 就可以拥有crud能力
 */
@Mapper
public interface User1Mapper extends BaseMapper<User1> {}
==============================================================================================================

public interface User1Service extends IService<User1> {} //IService里面包含各种方法,也可以不继承,直接写方法

=================================================================================================================
@Service
public class User1ServiceImpl extends ServiceImpl<User1Mapper,User1>implements User1Service{}	
	//extends ServiceImpl就避免了各种方法需要override();

ssss②、设置分页插件(固定写法,可查阅官方文档)

@Configuration
public class MyBatisConfig {			
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); 
        // 分页拦截器
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
        // 在最后一页点击下一页跳转到首页
        paginationInnerInterceptor.setOverflow(true);
        // 每页显示的最大记录数
        paginationInnerInterceptor.setMaxLimit(2L);
        interceptor.addInnerInterceptor(paginationInnerInterceptor);
        return interceptor;
    }
}

ssss③、编写Controller

@Controller
public class TableController {

    @Autowired
    User1Service user1Service;		//注意:这是接口
	
    @GetMapping("/dynamic_table")		//这里之所以要传入参数pn,是因为我们要做到"点哪个页"就调到对应的页
    public String dynamic_table(@RequestParam(value = "pn",defaultValue = "1") Integer pn,  // 用于分页
    							Model model){
    
        //从数据库中查出User表中的用户
        List<User1> list = user1Service.list();
        model.addAttribute("user1s",list);

        Page<User1> userpage = new Page<>(pn, 2);	//分页查询数据
        Page<User1> page = user1Service.page(userpage, null);	//返回分页后的数据

        model.addAttribute("page",page);

        return "table/dynamic_table";
    }

在这里插入图片描述
在这里插入图片描述
ssss④、对页面的删除操作:

public class TableController {

    @Autowired
    User1Service user1Service;

    @GetMapping("/user1/delete/{id}")		//根据"id"删除
    public String deleteUser(@PathVariable("id") Long id,
                             @RequestParam(value = "pn",defaultValue = "1") Integer pn,
                             RedirectAttributes ra){

        user1Service.removeById(id);

        ra.addAttribute("pn",pn);
        return "redirect:/dynamic_table";
    }
}

在这里插入图片描述
ssss⑤、对应页面显示:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值