您的位置:首页 > 文旅 > 美景 > Mybatis_springboot与mybatis-plus

Mybatis_springboot与mybatis-plus

2025/2/26 1:03:58 来源:https://blog.csdn.net/m0_74002833/article/details/141158200  浏览:    关键词:Mybatis_springboot与mybatis-plus

一 Mybatis_springboot

MyBatis 是一个流行的持久层框架,可以与 Spring Boot 无缝集成。下面是如何在 Spring Boot 项目中使用 MyBatis 的基本步骤。

1. 创建 Spring Boot 项目

你可以使用 Spring Initializr 创建一个新的 Spring Boot 项目。选择以下依赖项:

  • Spring Web
  • MyBatis Framework
  • 数据库(如 H2、MySQL、PostgreSQL 等)

2. 添加依赖

如果你已经创建了项目,可以在 pom.xml(对于 Maven 项目)中添加 MyBatis 和数据库的依赖。例如对于 MySQL:

<dependencies><!-- mybatis坐标 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency><!-- mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

3. 数据库配置

在 application.yml 或 application.properties 文件中配置 数据库连接信息。例如,如果使用 MySQL,可以这么配置:

#数据源
spring:datasource:username: rootpassword: 123456url: jdbc:mysql://localhost:3306/myschool?serverTimezone=GMTdriver-class-name: com.mysql.cj.jdbc.Driver

4. 创建数据模型

创建一个 Java 类,表示数据库表的结构。例如:

package com.xn.mybatis_springboot.pojo;/*** @author 许娜* @version 1.0* @since 2024/8/13*/
public class Account {private int aid;private String aname;private int amoney;@Overridepublic String toString() {return "Account{" +"aid=" + aid +", aname='" + aname + '\'' +", amoney=" + amoney +'}';}public Account(int aid, String aname, int amoney) {this.aid = aid;this.aname = aname;this.amoney = amoney;}public Account() {}public int getAid() {return aid;}public void setAid(int aid) {this.aid = aid;}public String getAname() {return aname;}public void setAname(String aname) {this.aname = aname;}public int getAmoney() {return amoney;}public void setAmoney(int amoney) {this.amoney = amoney;}
}

5. 创建 Mapper 接口

创建 MyBatis 的 Mapper 接口,用于定义 SQL 操作。例如:

//@Mapper//注册注入一个mapper
public interface AccountMapper {@Select("select * from account")public List<Account> findAll();
}

或 

@SpringBootApplication
@MapperScan(basePackages="com.xn.mybatis_springboot.mapper")//注册注入多个mapper(以包为单位)public class MybatisSpringbootApplication {public static void main(String[] args) {SpringApplication.run(MybatisSpringbootApplication.class, args);}}

6.测试

@SpringBootTest
class MybatisSpringbootApplicationTests {@Autowired(required=false)AccountMapper accountMapper;@Testvoid contextLoads() {List<Account> all=accountMapper.findAll();for (int i=0;i<all.size();i++){Account account=all.get(i);System.out.println(account);}}}


二 mybatis-plus

1.坐标

     <dependency>
         <groupId>com.baomidou</groupId>
         <artifactId>mybatis-plus-boot-starter</artifactId>
         <version>3.1.1</version>
     </dependency>
    注意:mp坐标添加后,mybatis坐标移除

        <!-- mybatisPlus坐标 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.1</version></dependency><!-- mybatis坐标 -->
<!--        <dependency>-->
<!--            <groupId>org.mybatis.spring.boot</groupId>-->
<!--            <artifactId>mybatis-spring-boot-starter</artifactId>-->
<!--            <version>2.2.2</version>-->
<!--        </dependency>-->
<!--         mysql -->

2.编写注解配置实体类与关系表映射关系(truncate清空表以及主键)

    @TableName(value = "关联表名称")=========================》修饰在类
    @TableField(value = "关联字段名称")======================》修饰在属性
                exist = "忽略字段"
    @TableId(type="指定主键生成策略,默认雪花算法")=============》修饰在属性
                AUTO(0),
                NONE(1),
                INPUT(2),
                ASSIGN_ID(3),
                ASSIGN_UUID(4);

@TableName("account")
public class Account {@TableId(value = "aid",type= IdType.AUTO)private int aid;@TableField("aname")private String aname;@TableField("amoney")private int amoney;
}

3.使用

    BaseMapper===========》公共的数据访问层


    IService/ServiceImp==》公共的业务层

4.配置yml文件

#数据源
spring:datasource:username: rootpassword: 123456url: jdbc:mysql://localhost:3306/myschool?serverTimezone=GMTdriver-class-name: com.mysql.cj.jdbc.Driver
mybatis:mapper-locations: mappers/*.xml
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

5.测试代码使用

(1)新增

@SpringBootTest
public class Test01 {@Autowired(required = false)AccountMapper accountMapper;//新增@Testpublic void show1(){Account account = new Account("夕夕",2000);int row = accountMapper.insert(account);System.out.println("主键回填id:"+account.getAid());System.out.println("影响行数:"+row);}
}

 

(2) 修改

@SpringBootTest
public class Test01 {@Autowired(required = false)AccountMapper mapper;//修改ID@Testpublic void test02()throws Exception{Account account = new Account(3,"发发",5000,1,"干饭");int row =  mapper.updateById(account);System.out.println("影响行数:"+row);}
//
//    //修改Name@Testpublic void test03()throws Exception{//1.修改数据Account  account = new Account();account.setAhobby("打架");//2.创建条件QueryWrapper<Account> wrapper = new QueryWrapper<Account>();wrapper.eq("aname","毛毛");mapper.update(account,wrapper);}}

 

(3) mp分页使用

注意:
  1.page.setCurrent(2);当前页码从1开始
  2.分页需要配置插件
  3.mp坐标版本3.1.1不能使用过高版本

<!-- mybatisPlus坐标 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3</version></dependency>
@Configuration
public class MyBatisPlusConfig {//注入mp拦截器@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){//1.实例化拦截器MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();//2.分页拦截器mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());return mybatisPlusInterceptor;}}
 /*** mp分页使用* 注意:* 1.page.setCurrent(2);当前页码从1开始* 2.分页需要配置插件* 3.mp坐标版本3.1.1不能使用过高版本* */@Testpublic void test08()throws Exception{//1.定义分页规则Page<Account> page = new Page<Account>();page.setSize(3);//每页记录数page.setCurrent(2);//当前页码//2.查询条件(可选)QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.eq("ahobby","唱歌");IPage<Account> iPage = mapper.selectPage(page,null);List<Account> list = iPage.getRecords();//分页结果System.out.println("总记录数:"+iPage.getTotal());System.out.println("总记页数:"+iPage.getPages());for (int i = 0; i < list.size(); i++) {Account account =  list.get(i);System.out.println(account);}}

(4)查询

        普通查询

    //查询ID@Testpublic void test04()throws Exception{Account account = mapper.selectById(5);System.out.println(account);}
////查询IDS@Testpublic void test05()throws Exception{List<Account> list = mapper.selectBatchIds(Arrays.asList(5,1,3));for (int i = 0; i < list.size(); i++) {Account account =  list.get(i);System.out.println(account);}}

 

        QueryWrapper 

QueryWrapper 是 MyBatis-Plus 中常用的一个工具类,用于构建 SQL 查询条件的方式。它提供了链式调用的方法来设置查询条件,使得代码更加简洁、易读。

//查询count@Testpublic void test06()throws Exception{int count = mapper.selectCount(null);System.out.println(count);}//查询list@Testpublic void test07()throws Exception{QueryWrapper<Account> queryWrapper = new QueryWrapper();
//        queryWrapper.eq("aage","11");
//        queryWrapper.eq("ahobby","唱歌");queryWrapper.eq("ahobby","唱歌").or().eq("aage","11");List<Account> list = mapper.selectList(queryWrapper);for (int i = 0; i < list.size(); i++) {Account account =  list.get(i);System.out.println(account);}}

        LambdaQueryWrapper
 @Testpublic void show1(){//1.查询条件LambdaQueryWrapper<Account> lambdaQueryWrapper =  new LambdaQueryWrapper<Account>();lambdaQueryWrapper.gt(Account::getAage,12);//2.查询List<Account> list =  mapper.selectList(lambdaQueryWrapper);for (int i = 0; i < list.size(); i++) {Account account =  list.get(i);System.out.println(account);}}

         模拟动态查询

//模拟动态查询1@Testpublic void show2(){//1.前端发送来的数据Integer num1 = null;Integer num2 = 15;//1.查询条件LambdaQueryWrapper<Account> lambdaQueryWrapper =  new LambdaQueryWrapper<Account>();//2.判断if(null != num2){lambdaQueryWrapper.lt(Account::getAage,num2);}if(null != num1){lambdaQueryWrapper.gt(Account::getAage,num1);}//3.查询List<Account> list =  mapper.selectList(lambdaQueryWrapper);for (int i = 0; i < list.size(); i++) {Account account =  list.get(i);System.out.println(account);}}//模拟动态查询2@Testpublic void show3(){//1.前端发送来的数据Integer num1 = null;Integer num2 = 15;//1.查询条件LambdaQueryWrapper<Account> lambdaQueryWrapper =  new LambdaQueryWrapper<Account>();//2.判断lambdaQueryWrapper.lt(null != num2,Account::getAage,num2);lambdaQueryWrapper.gt(null != num1,Account::getAage,num1);//3.查询List<Account> list =  mapper.selectList(lambdaQueryWrapper);for (int i = 0; i < list.size(); i++) {Account account =  list.get(i);System.out.println(account);}}

        投影查询-字段查询 

//投影查询-字段查询@Testpublic void show4() {//1.条件LambdaQueryWrapper<Account> lambdaQueryWrapper  = new LambdaQueryWrapper<Account>();lambdaQueryWrapper.select(Account::getAname,Account::getAhobby);//2.查询List<Account> list =  mapper.selectList(lambdaQueryWrapper);//4.遍历for (int i = 0; i < list.size(); i++) {Account account =  list.get(i);System.out.println(account);}}

(5)删除 

逻辑删除:

为数据设置是否可用状态字段,删除时设置状态字段为不可用状态, 数据保留在数据库中,执行的是update操作

实现步骤:

         步骤1:修改数据库表添加`deleted`列,比如`0`代表正常,`1`代表删除,可以在添加列的同时                  设置其默认值为`0`正常。

        步骤2:实体类添加属性以及注解 @TableLogic(value="0",delval="1") private Integer deleted;                     value为正常数据的值,delval为删除数据的值 逻辑删除

//查询delete@Testpublic void test09()throws Exception{mapper.deleteById(4);}

 物理删除:

业务数据从数据库中丢弃,执行的是delete操作

 //查询delete@Testpublic void test09()throws Exception{mapper.deleteById(3);}

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com