1.在主函数类上添加以上注解,可以扫描dao包中的所有接口,替代在每个dao中写@Mapper注解,不过这样会提高耦合度。
@MapperScan("com..mapper")
public class Application {
public static void main(String[] args) {
SpringApplication.run(DlxRrsApplication.class, args);
}
而@Mapper可以与dao自成一体,与@Controller、@Service遥相呼应,整体结构更优雅
2.结果映射@Results
如果结果集不是JAVA对象而是Map,可以使用@Result来指明结果映射,同样也适用JAVA对象
使用List<Map>不用去维护pojo,适于用数据库字段不确定或经常变化的场景。但是程序的可读性、可维护性不如List<User>
可复用的@Results
@Select(" SELECT * FROM USER ")
@Results(id="user1",value={
@Result(column = "id", property = "id", javaType = Integer.class),
@Result(property = "username", column = "user_name", javaType = String.class),
@Result(column = "birthday", property = "birthday", javaType = LocalDate.class),
@Result(column = "sex", property = "sex", javaType = String.class),
@Result(property = "address", column = "address", javaType = String.class),
})
public List<User> findAll();
注意:@Results 在@Select前后都没有关系
声明时给id赋值为user
在其他 方法中,重复使用id为user的结果映射
@ResultMap("user")
注意:1.logback改为debug可以打印SQL语句 方便调试
2.@Result其实要解决的事 user_name
userName不对应的问题,因为数据库字段是你下划线分隔,bean中的字段是驼峰命名的,如user_name和userName,导致无法匹配
如果是通过xml文件来配置的话,只需要开启驼峰命名转换
<setting name="mapUnderscoreToCamelCase" value="true"/>
mybatis:
configuration:
map-underscore-to-camel-case: true
可以精简为:
@Select(" SELECT * FROM USER ")
public List<User> findAll();
3 .@Result 修饰返回的结果集,关联实体类属性和数据库字段一一对应,如果实体类属性和数据库属性名保持一致,就不需要这个属性来修饰。