public class Employee {
private Integer id;
private String lastName;
private String email;
private String gender;java
//setter与getter省略sql
}数据库
而数据库中的 last_name字段是这样的与实体不一致mybatis
@Test
public void test05() throws IOException{
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();
try{
EmployeeMapperPlus mapper = openSession.getMapper(EmployeeMapperPlus.class);
Employee empById = mapper.getEmpById(1);
System.out.println(empById);
/*Employee empAndDept = mapper.getEmpAndDept(1);
System.out.println(empAndDept);
System.out.println(empAndDept.getDept());*/
// Employee employee = mapper.getEmpByIdStep(3);
// System.out.println(employee);
//System.out.println(employee.getDept());
//System.out.println(employee.getDept());
}finally{
openSession.close();
}
}app
在xml里这样配置的优化
<!-- public Employee getEmpById(Integer id); -->
<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee">
select * from tbl_employee where id=#{id}
</select>
ui
由于属性和字段不一致对应查询结果如图xml
致使了lastName没有附上值blog
如何解决呢,能够在mybaits-confg.xml配置驼峰命名就能解决这一个问题,可是很局限性get
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="jdbcTypeForNull" value="NULL"/>
<!--显示的指定每一个咱们须要更改的配置的值,即便他是默认的。防止版本更新带来的问题 -->
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
接下来说解用resultMap解决这一个问题
<resultMap type="com.atguigu.mybatis.bean.Employee" id="MySimpleEmp">
<!--指定主键列的封装规则
id定义主键会底层有优化;
column:指定哪一列
property:指定对应的javaBean属性
-->
<id column="id" property="id"/>
<!-- 定义普通列封装规则 -->
<result column="last_name" property="lastName"/>
<!-- 其余不指定的列会自动封装:咱们只要写resultMap就把所有的映射规则都写上。 -->
<result column="email" property="email"/>
<result column="gender" property="gender"/>
</resultMap>
<!-- public Employee getEmpById(Integer id); -->
<select id="getEmpById" resultMap="MySimpleEmp">
select * from tbl_employee where id=#{id}
</select>
执行结果以下: