Mybaits解決實體類字段與數據庫字段不一致問題

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>

執行結果以下:

相關文章
相關標籤/搜索