学习mybatis踩坑记录

 源码已上传至github:https://github.com/saving233/learnmybatis

报错:

Caused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'emp'.  Cause: java.lang.ClassNotFoundException: Cannot find class: emp
	at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:118) ~[mybatis-3.5.6.jar:3.5.6]
	at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:76) ~[mybatis-3.5.6.jar:3.5.6]
	at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:138) ~[mybatis-3.5.6.jar:3.5.6]
	at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:131) ~[mybatis-3.5.6.jar:3.5.6]
	at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:121) ~[mybatis-3.5.6.jar:3.5.6]
	... 79 common frames omitted
Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'emp'.  Cause: java.lang.ClassNotFoundException: Cannot find class: emp
	at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:120) ~[mybatis-3.5.6.jar:3.5.6]
	at org.apache.ibatis.builder.BaseBuilder.resolveAlias(BaseBuilder.java:149) ~[mybatis-3.5.6.jar:3.5.6]
	at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:116) ~[mybatis-3.5.6.jar:3.5.6]
	... 83 common frames omitted
Caused by: java.lang.ClassNotFoundException: Cannot find class: emp
	at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:196) ~[mybatis-3.5.6.jar:3.5.6]
	at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:89) ~[mybatis-3.5.6.jar:3.5.6]
	at org.apache.ibatis.io.Resources.classForName(Resources.java:261) ~[mybatis-3.5.6.jar:3.5.6]
	at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:116) ~[mybatis-3.5.6.jar:3.5.6]
	... 85 common frames omitted

正确写法:


resultType:

1、基本类型  :resultType=基本类型

2、List类型:   resultType=List中元素的类型

3、Map类型    单条记录:resultType =map

                          多条记录:resultType =Map中value的类型

例子:

EmployeeMapper.xml

<!--    public Map<String, Employee> getEmpByLastNameLikeReturnMap(String lastName);-->
    <select id="getEmpByLastNameLikeReturnMap" resultMap="emp">
         select * from tbl_employee where last_name like #{lastName};
    </select>

<!--    public Map<String,Employee> getEmpByIdReturnMap(Integer id);-->
    <select id="getEmpByIdReturnMap" resultType="map">
        select * from tbl_employee where id = #{id};
    </select>

EmployeeDao:

@Mapper
public interface EmployeeDao {

 //多条记录封装一个map:Map<Integer,Employee>:键是这条记录的主键,值是记录封装后的javaBean
    //@MapKey:告诉mybatis封装这个map的时候使用哪个属性作为map的key
    @MapKey("lastName")
    public Map<String, Employee> getEmpByLastNameLikeReturnMap(String lastName);

    //返回一条记录的map;key就是列名,值就是对应的值
    public Map<String,Employee> getEmpByIdReturnMap(Integer id);
}

EmployeeService:

@Component
public interface EmployeeService {
   public Map<String, Employee> getEmpByLastNameLikeReturnMap(String lastName);

    public Map<String,Employee> getEmpByIdReturnMap(Integer id);
}

EmployeeServiceImpl:

@Service
@Slf4j
public class EmployeeServiceImpl implements EmployeeService {
    @Resource
    private EmployeeDao employeeDao;
    
    @Override
    public Map<String, Employee> getEmpByLastNameLikeReturnMap(String lastName) {
        return employeeDao.getEmpByLastNameLikeReturnMap(lastName);
    }
    
    @Override
    public Map<String, Employee> getEmpByIdReturnMap(Integer id) {
        return employeeDao.getEmpByIdReturnMap(id);
    }

}
@Slf4j
@RestController
public class CommonController {
    @Autowired
    private EmployeeService employeeService;
    /**        
     * 多条记录封装一个map
     * @return
     */
    @GetMapping("/getEmpByLastNameLikeReturnMap")
    public CommonResult getEmpByLastNameLikeReturnMap(){
        Map<String, Employee> empByLastNameLikeReturnMap=employeeService.getEmpByLastNameLikeReturnMap("%r%");
        return new CommonResult(200,"getEmpByLastNameLikeReturnMap查询成功",empByLastNameLikeReturnMap);
    }

    /**
     * //返回一条记录的map;key就是列名,值就是对应的值
     * @return
     */
    @GetMapping("/getEmpByIdReturnMap")
    public CommonResult getEmpByIdReturnMap(){
        Map<String, Employee> empByIdReturnMap = employeeService.getEmpByIdReturnMap(1);
        return new CommonResult(200,"getEmpByIdReturnMap查询成功!",empByIdReturnMap);
    }
}

查询结果:


 association可以指定联合的javaBean对象
        property="department":指定哪个属性是联合的对象
        javaType:指定这个属性对象的类型[不能省略]


 _databaseId:如果配置了databaseIdProvider标签

@Configuration
@MapperScan({"com.study.learnmybatis.dao"})
public class MybatisConfig {

    @Bean
    public DatabaseIdProvider getDatabaseIdProvider() {
        DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
        Properties p = new Properties();
        p.setProperty("Oracle", "oracle");
        p.setProperty("MySQL", "mysql");
        databaseIdProvider.setProperties(p);
        return databaseIdProvider;
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值