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