[spring boot] 03 簡單demo_1 - 編寫mapper,dao,service和單元測試


主要內容:

    〇、項目結構

    一、創建dataobject

    二、創建mapper

    三、創建dao

    四、創建service

    五、創建impl

    六、創建單元測試 

 

〇、項目結構

 

 

一、創建dataobject

 1.1. 新建dataobject包(在com.example.demo下)

 

 1.2. pom增加包依賴

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

 

  1.3. 在dataobject下新增class - ModuleInfo

@DynamicUpdate
@Data
@Entity
public class ModuleInfo {

    /** 模塊id. 主鍵,自增. */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    /** 模塊名. */
    private String moduleName;

    private Date createTime;

    private Date updateTime;

}

 注:

  @Data是用於省略寫get和set方法,源於lombok。

  @Entity是用於將這個類標注為一個實體類,可用於之后對該對象直接調用,默認和數據庫_對應駝峰關系,如:module_name對應moduleName。

  @DynamicUpdate是用於當實體類中寫到時間字段,但更新其它字段時,沒有對時間字段賦值,可自動更新時間。

 

 

二、創建mapper

 2.1. 新建mapper包(在com.example.demo下)

 

 2.2. pom.xml增加包依賴

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.0</version>
</dependency>

 

 2.3. 在mapper下增加interface - ModuleInfoMapper

@Mapper
public interface ModuleInfoMapper {

    @Select("select * from module_info where id = #{id}")
    @Results({
            @Result(column = "id", property = "id"),
            @Result(column = "module_name", property = "moduleName")
    })
    ModuleInfo findByModuleId(Integer id);

}

注:

@Mapper:用於標注這是一個Mapper

@Select:用於編寫這個方法對應的SQL,同理有@Insert,@Update,@Delete

@Result:用於把實體類的字段和數據庫的字段成對應關系,即_和駝峰的對應關系

 

 2.4. 優化上面的寫法

  2.4.1. 在application.yml增加自動匹配對應關系配置

mybatis:
  configuration:
    map-underscore-to-camel-case: true

 

  2.4.2. 去掉@Result

@Mapper
public interface ModuleInfoMapper {

    @Select("select * from module_info where id = #{id}")
    })
    ModuleInfo findByModuleId(Integer id);

}

 

  2.4.3. 在application.yml增加mapper輸出配置

logging:
  level:
    com.example.demo.mapper: trace

 

  2.4.4. 在之后編寫的單元測試后,執行單元測試,查看輸出

 

 

三、創建dao

 3.1. 新建dao包(在com.example.demo下)和 class - ModuleInfoDao

@Repository
public class ModuleInfoDao {

    @Autowired
    ModuleInfoMapper mapper;

    public ModuleInfo findByModuleId(Integer id) {
        return mapper.findByModuleId(id);
    }

}

 注:

@Repository:怎么解釋我也不知道,但是可以幫助spring注入bean

 

四、創建service

 4.1. 新建service包和 interface - ModuleInfoService

public interface ModuleInfoService {

    ModuleInfo findByModuleId(Integer id);

}

 

 

五、創建impl

 5.1. 在service下新建impl包(在com.example.demo.service下)和 class - ModuleInfoServiceImpl

@Service
public class ModuleInfoServiceImpl implements ModuleInfoService {

    @Autowired
    ModuleInfoDao dao;

    @Override
    public ModuleInfo findByModuleId(Integer id) {
        return dao.findByModuleId(id);
    }
}

 注:

@Service:標注這是service,其實同理上面的@Repository

impements:這是用於實現service類的

快捷鍵:

ctrl + O:選擇需要實現的類

 

 

六、創建單元測試

 6.1. 在DemoApplication里增加mapper掃描

@SpringBootApplication
// 增加mapper掃描
@MapperScan(basePackages = {"com.example.demo.mapper"})
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

 

 6.2. 創建mapper的單元測試,在mapper文件下,右鍵類名 -> Go To -> Test

 

  6.3. 生成的mapperTest文件在test目錄下,並增加單元測試內容

@SpringBootTest
@RunWith(SpringRunner.class)
public class ModuleInfoMapperTest {

    @Autowired
    ModuleInfoMapper mapper;

    @Test
    public void findByModuleId() {
        ModuleInfo result = mapper.findByModuleId(1);
        assertNotNull(result);
    }

}

注:

@SpringBootTest:屬於springboot,用於指定啟動類,否則一些autowired會引入失敗

@RunWith:屬於junit,用於執行junit的測試代碼

 

 6.4. 同理增加serviceTest文件,從ModuleInfoServiceImple處增加單元測試(寫完右鍵執行就可以,觀察運行結果)

@SpringBootTest
@RunWith(SpringRunner.class)
public class ModuleInfoServiceImplTest {

    @Autowired
    ModuleInfoService service;

    @Test
    public void findByModuleId() {
        ModuleInfo result = service.findByModuleId(1);
        assertNotNull(result);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM