1. 程式人生 > >整合SpringMVC框架+Mybatis框架開發人力資源管理系統(四)

整合SpringMVC框架+Mybatis框架開發人力資源管理系統(四)

利用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一致,此處不再贅述。