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

 

posted @ 2019-01-28 15:39  铁蛋蛋蛋不铁  阅读(3525)  评论(0编辑  收藏  举报