天天看點

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);
    }