Spring Jdbc Template 與 MyBatis 的比較
Spring Jdbc -- 使用最少的程式碼和配置完成你的專案。
Spring Jdbc的介面比較豐富,其中大部分介面都由內部消化了,我們只需要關注少量介面即可。
JdbcOperations 和 NamedParameterJdbcOperations 對應的實現類: JdbcTemplate 和 NamedParameterJdbcTemplate Spring Jdbc 的核心介面和實現,其他的介面幾乎都是給這兩個介面提供服務的。提供了非常方便的資料庫操作方法,包括CRUD、函式與存過呼叫、批量處理等。
RowMapper 實現該介面可以非常方便的對結果集進行處理,常用的實現為 BeanPropertyRowMapper。
SqlParameterSource 實現該介面可以非常方便地繫結引數值到SQL的命名引數上,常用的實現為 BeanPropertySqlParameterSource。
BeanPropertyRowMapper 根據類的屬性名把結果集轉換成業務物件,支援屬性名和下劃線風格的列名。
BeanPropertySqlParameterSource 根據物件例項屬性名轉換成SQL中的命名引數,自動繫結引數值為例項的屬性值。
BeanPropertyRowMapper 和 BeanPropertySqlParameterSource 類都使用了反射機制,在反射時都使用了快取機制,完全不需要擔心高併發和高頻率下的效能問題。Spring Jdbc 與 MyBatis 比較:
public class EmployeerDao { /*省略JdbcOperations注入*/ public Employeer findEmployeerById(String employeerId) { String sql = "select * from `employeer` where employeer_id = ?"; return this.getJdbcOperations().update(sql, BeanPropertyRowMapper.newInstance(Employeer.class),employeerId); } public boolean addEmployeer(Employeer employeer) { String sql = "insert into `employeer`(employeer_id,employeer_name,employeer_age,employeer_department,employeer_worktype) " + " values(:employeerId,:employeerName,:employeerAge,:employeerDepartment,:employeerWorktype)"; return this.getNamedParamOperations().update(sql, new BeanPropertySqlParameterSource(employeer)) > 0; } public boolean deleteEmployeer(String employeerId) { String sql = "delete from `employeer` where employeer_id = ?"; return this.getJdbcOperations().update(sql, employeerId) > 0; } public boolean updateEmployeer(Employeer employeer) { String sql = "update employeer set employeer_name = :employeerName,employeer_age= :employeerAge,employeer_department = employeerDepartment " + ",employeer_worktype= :employeerWorktype where employeer_id = :employeerId"; return this.getNamedParamOperations().update(sql, new BeanPropertySqlParameterSource(employeer)) > 0; } }
MyBatis 的CRUD實現: 編碼長度:3000字 涉及檔案:介面、實現、配置檔案 進化版:介面註解(但不能使用功能豐富的標籤了),增刪欄位後須要修改
<mapper namespace="com.mucfc.model.EmployeerMapper">
<!-- 查詢 -->
<select id="findEmployeerByID" parameterType="int" resultType="Employeer">
select* from `employeer` where employeer_id =#{employeer_id}
</select>
<!-- 插入 -->
<insert id="addEmployeer" parameterType="Employeer">
insert into `employeer`(employeer_id,employeer_name,employeer_age,employeer_department,employeer_worktype)
values(#{employeer_id},#{employeer_name},#{employeer_age},#{employeer_department},#{employeer_worktype})
</insert>
<!-- 刪除 -->
<delete id="deleteEmployeer" parameterType="int">
delete from `employeer` where employeer_id = #{employeer_id}
</delete>
<!-- 修改 -->
<update id="updateEmployeer" parameterType="Employeer">
update employeer set employeer_name = #{employeer_name},employeer_age= #{employeer_age},employeer_department = #{employeer_department}
,employeer_worktype=#{employeer_worktype} where employeer_id = #{employeer_id}
</update>
</mapper>
public class EmployeerDao {
/*省略sqlSessionFactory注入*/
/**
* 查詢
*/
public Employeer findEmployeerById(int id) {
SqlSession session = null;
try {
session = sqlSessionFactory.openSession();
return (Employeer) session.selectOne(
"com.mucfc.model.EmployeerMapper.findEmployeerByID", 1);
} finally {
session.close();
}
}
/**
* 增加
*/
public boolean addEmployeer(Employeer employeer){
SqlSession session = null;
try {
session = sqlSessionFactory.openSession();
boolean result = session.insert("com.mucfc.model.EmployeerMapper.addEmployeer", employeer ) > 0;
session.commit() ;
return result;
} finally {
session.close();
}
}
/**
* 刪除
*
*/
public boolean deleteEmployeer(int id){
SqlSession session = null;
try {
session = sqlSessionFactory.openSession();
boolean result = session.delete("com.mucfc.model.EmployeerMapper.deleteEmployeer",id) > 0;
session.commit() ;
return result;
} finally {
session.close();
}
}
/**
* 更改
*/
public boolean updateEmployeer(Employeer employeer){
SqlSession session = null;
try {
session = sqlSessionFactory.openSession();
boolean result = session.update("com.mucfc.model.EmployeerMapper.updateEmployeer",employeer) > 0;
session.commit() ;
return result;
} finally {
session.close();
}
}
}
經過比較,Spring Jdbc 的開發效率比 MyBatis 要高出不少,可配合 Spring Cache、Transacation、Bean使用。