整合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一致,此处不再赘述。

猜你喜欢

转载自blog.csdn.net/llc950819/article/details/85109126