主要內容:
〇、項目結構
一、創建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); } }