源码已上传至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;
}
}