整合SpringMVC框架+Mybatis框架開發人力資源管理系統(四)
阿新 • • 發佈:2019-01-08
利用Mybatis框架實現持久化Dao層
1、新增Mybatis支援,下載mybatis-3.2.3開發包下載地址,將mybatis-3.2.3.jar以及lib資料夾下所有的jar包引入工程,即完成了專案的Mybatis支援。
2、建立UserDao介面
Mybatis註解的使用極大的簡化了ORM程式碼的編寫,建立一個名為UserDao的介面,利用Mybatis實現CRUD的功能,程式碼如下:
package org.fkit.hrm.dao; import java.util.List; import java.util.Map; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.SelectProvider; import org.fkit.hrm.dao.provider.UserDynaSqlProvider; import org.fkit.hrm.domain.User; public interface UserDao { //根據使用者名稱和密碼查詢使用者資訊 @Select("select * from user_tb where loginName=#{loginname} and password=#{password}") User selectUserByLoginnameAndPassword(@Param("loginname") String loginname, @Param("password") String password); //根據id查詢使用者 @Select("select * from user_tb where id=#{id}") User selectUserById(Integer id); //根據id刪除使用者 @Delete("delete from user_tb where id=#{id}") void deleteById(Integer id); //動態修改使用者 @SelectProvider(type=UserDynaSqlProvider.class,method="updateUser") void update(User user); //動態查詢 @SelectProvider(type=UserDynaSqlProvider.class,method="selectWhitParam") List<User> selectByPage(Map<String,Object> params); //根據引數查詢使用者總數 @SelectProvider(type=UserDynaSqlProvider.class,method="count") Integer count(Map<String,Object> params); //動態插入使用者 @SelectProvider(type=UserDynaSqlProvider.class,method="insertUser") void save(User user); //根據使用者名稱稱查詢使用者 @Select("select * from user_tb where userName=#{userName}") User selectUserByUserName(String userName); }
UserDao介面定義了八個方法,分別用於實現不一樣的資料庫操作,其中@SelectProvider()、@InsertProvider()等動態SQL中type、method屬性分別指定一個類和類中的方法,用於返回執行時的SQL語句。
UserDynaSqlProvider類的程式碼如下:
package org.fkit.hrm.dao.provider; import java.util.Map; import org.apache.ibatis.jdbc.SQL; import org.fkit.hrm.domain.User; public class UserDynaSqlProvider { //分頁動態查詢 public String selectWhitParam(final Map<String,Object> params){ String sql=new SQL(){ { SELECT("*"); FROM("user_tb"); if(params.get("user")!=null){ User user=(User)params.get("user"); if(user.getUserName()!=null&&!user.getUserName().equals("")){ WHERE(" userName LIKE CONCAT('%',#{user.userName},'%')"); } if(user.getUserStatus()!=null&&!user.getUserStatus().equals("")){ WHERE(" userStatus LIKE CONCAT('%',#{user.userStatus},'%')"); } } } }.toString(); if(params.get("pageModel")!=null){ sql+=" limit #{pageModel.firstLimitParam},#{pageModel.pageSize} "; } return sql; } //動態查詢數量 public String count(final Map<String,Object> params){ return new SQL(){ { SELECT("COUNT(*)"); FROM("user_tb"); if(params.get("user")!=null){ User user=(User)params.get("user"); if(user.getUserName()!=null&&!user.getUserName().equals("")){ WHERE(" userName LIKE CONCAT('%',#{user.userName},'%')"); } if(user.getUserStatus()!=null&&!user.getUserStatus().equals("")){ WHERE(" userStatus LIKE CONCAT('%',#{user.userStatus},'%')"); } } } }.toString(); } //動態插入 public String insertUser(final User user){ return new SQL(){ { INSERT_INTO("user_tb"); if(user.getUserName()!=null&&!user.getUserName().equals("")){ VALUES("userName","#{userName}"); } if(user.getUserStatus()!=null&&!user.getUserStatus().equals("")){ VALUES("userStatus","#{userStatus}"); } if(user.getLoginName()!=null&&!user.getLoginName().equals("")){ VALUES("loginName","#{loginName}"); } if(user.getPassword()!=null&&!user.getPassword().equals("")){ VALUES("password","#{password}"); } } }.toString(); } //動態更新 public String updateUser(final User user){ return new SQL(){ { UPDATE("user_tb"); if(user.getUserName()!=null&&!user.getUserName().equals("")){ SET(" userName=#{userName}"); } if(user.getUserStatus()!=null&&!user.getUserStatus().equals("")){ SET(" userStatus=#{userStatus}"); } if(user.getLoginName()!=null&&!user.getLoginName().equals("")){ SET(" loginName=#{loginName}"); } if(user.getPassword()!=null&&!user.getPassword().equals("")){ SET(" password=#{password}"); } if(user.getCreateDate()!=null&&!user.getCreateDate().equals("")){ SET(" createDate=#{createDate}"); } WHERE(" id=#{id}"); } }.toString(); } }
DAO元件所包含的另外五個介面EmployeeDao、JobDao、DeptDao、、DocumentDao建立方法與UserDao一致,此處不再贅述。