天天看点

SpringBoot-通用MapperSpringBoot环境下使用通用Mapper

SpringBoot环境下使用通用Mapper

环境搭建:

约定的项目结构

约定的配置文件

1,引入SpringBoot的maven依赖

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.1.4.RELEASE</version>
  <relativePath/> 
</parent>

 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
           

引入通用Mapper依赖

<dependency>
  <groupId>tk.mybatis</groupId>
  <artifactId>mapper-spring-boot-starter</artifactId>
  <version>2.1.1</version>
</dependency>
           

2,书写配置文件

在resources下建application.properties/.yml/.yaml,

放在dao、service、controller包的同级

3,书写启动类

@SpringBootApplication

@MapperScan(“com.xxx.dao”) //tk.mybatis包下

4,书写实体类

例:

@Table(name = "c_admin")
public class Admin {
    @Id
    private String id;
    private String username;
    private String password;
    private String nickname;
}
           

使用@Table注解将数据库中的表与实体类建立映射关系

使用@Id注解标注数据库表中的主键

5,书写dao

dao继承tk.mybatis包下的Mapper类,泛型为当前dao操作的实体类

@Repository
public interface AdminDao extends Mapper<Admin> {

}
           

6,书写service层、书写controller层

通用Mapper中常用方法

查询方法:

1,查询全部

public void test1(){
        List<Admin> admins = adminDao.selectAll();
        for (Admin admin : admins) {
            System.out.println(admin);
        }
    }
           

2,根据主键查询

//查询主键为"1"的
public void test2(){
        Admin admin = adminDao.selectByPrimaryKey("1");
        System.out.println(admin);
    }
           

3,根据某个字段条件查询

//查询所有nickname="小王"的
public void test3(){
        Admin admin=new Admin();
        admin.setNickname("小王");
        List<Admin> admins = adminDao.select(admin);
        for (Admin admin1 : admins) {
            System.out.println(admin1);
        }
    }
           

4,复杂条件查询

//查询nickname="小王"且username不为null的
//复杂条件查询需要用到Example类
public void test4(){
        Example example=new Example(Admin.class);
        example.createCriteria().andEqualTo("nickname", "小王").andIsNotNull("username");
        List<Admin> admins = adminDao.selectByExample(example);
        for (Admin admin : admins) {
            System.out.println(admin);
        }
    }
           

5,分页查询

//查询第一页,每页显示3条数据
//分页查询需要用到RowBounds类
public void test6(){
        int page = 1;
        int pageSize = 3;
        Admin admin = new Admin();
        admin.setUsername("admin");
        //offset:起始下标   limit:查询几条
        RowBounds rowBounds = new RowBounds((page-1)*pageSize,pageSize);
        List<Admin> admins = adminDao.selectByRowBounds(admin, rowBounds);
        for (Admin admin1 : admins) {
            System.out.println(admin1);
        }
    }

           

增删改方法

1,添加

public void test7(){
        Admin admin = new Admin();
        admin.setId("11");
        admin.setUsername("qwe");
        admin.setPassword("ewq");
        int i = adminDao.insert(admin); //i代表受影响的行数 
        System.out.println(i);
    }

           

2,修改

//updateByPrimaryKey 根据主键修改,没有修改的属性会置为null  
public void test9(){
        Admin admin = new Admin();
        admin.setId("2");
        admin.setUsername("aaaa");
        admin.setPassword("bbbb");
        adminDao.updateByPrimaryKey(admin);
    }

           
//updateByPrimaryKeySelective()
//根据主键修改,没有修改的属性不会置为null
public void test10(){
        Admin admin = new Admin();
        admin.setId("3");
        admin.setUsername("aaaa");
        admin.setPassword("bbbb");
        adminDao.updateByPrimaryKeySelective(admin);
    }

           

3,删除

//根据主键删除
  public void test11(){
        Admin admin = new Admin();
        int delete = adminDao.delete(admin);
        System.out.println(delete);
    }

           
//根据条件删除
//删除nickname不为null的
public void test12(){
        Example example = new Example(Admin.class);
        example.createCriteria().andIsNull("nickname");
        int i = adminDao.deleteByExample(example);
        System.out.println(i);
    }