spring系列(十四):SSM整合五_采用泛型优化

本文介绍了一种使用泛型简化DAO层代码的方法,并通过具体的例子展示了如何实现基本的增删改查操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请读者注意,此篇文章是在上一篇文章的基础上进行的改造。

加上泛型后,能让我们省略大量dao层的代码!

UML类图如下所示:


目录结构如下:


关键代码:

=====================IBaseDao=================

package com.obtk.dao;

import java.util.List;
 
/**
 * 集合持久层的公用的增,删,改,查接口
 * <T>表示传入实体类
 * @author汪祥
 * 2015-09-11
 */
public interface IBaseDao<T> {
    /**
     * 查询多条记录
     * @param t实体类的对象
     * @return对象列表
     */
    public List<T> queryMany(T t);
   
    /**
     * 根据id删除记录
     * @param id对象编号
     * @return被删除的记录条数
     */
    public Integer deleteById(String id);
   
    /**
     * 修改数据
     * @param t实体类的对象
     * @return被修改的记录条数
     */
    public Integer modify(T t);
   
    /**
     * 根据id查询一条记录
     * @param id对象编号
     * @return被修改的记录条数
     */
    public T getById(String id);
   
    /**
     * 添加一条数据
     * @param t实体类的对象
     * @return添加的记录条数
     */
    public Integer add(T t);
}
=====================BaseDaoImpl=================
package com.obtk.dao;

import java.lang.reflect.ParameterizedType;
import java.util.List;
import org.mybatis.spring.SqlSessionTemplate;
 
 
/**
 * 集合持久层的公用的增,删,改,查的父类
 * <T>表示传入实体类
 * @author汪祥
 * 2015-09-11
 */
public class BaseDaoImpl<T> implements IBaseDao<T> {
   
    protected SqlSessionTemplate sqlTemplate;
    public void setSqlTemplate(SqlSessionTemplate sqlTemplate) {
       this.sqlTemplate = sqlTemplate;
    }
   
    /**
     * 获取传过来的泛型类名称
     * @return String泛型类名称的小写形式
     */
    @SuppressWarnings("unchecked")
    public String getClassName() {
       // 在父类中得到子类声明的父类的泛型信息
       ParameterizedType pt = (ParameterizedType) this.getClass()
              .getGenericSuperclass();
       Class<T> clazz = (Class) pt.getActualTypeArguments()[0];
       // 这里是获取实体类的简单名称,再把类名转为小写
       String className=clazz.getSimpleName().toString().toLowerCase();
       System.out.println("className:"+className);
       return className;
    }
 
    /**
     * 添加一条数据
     * @param t实体类的对象
     * @return添加的记录条数
     */
    public Integer add(T t) {
       return sqlTemplate.insert(this.getClassName() +".add", t);
    }
 
    /**
     * 根据id删除记录
     * @param id对象编号
     * @return被删除的记录条数
     */
    public Integer deleteById(String id) {
       return sqlTemplate.delete(this.getClassName() +".deleteById", id);
    }
 
    /**
     * 根据id查询一条记录
     * @param id对象编号
     * @return被修改的记录条数
     */
    @SuppressWarnings("unchecked")
    public T getById(String id) {
       return (T)sqlTemplate.selectOne(this.getClassName() +".getById", id);
    }
 
    /**
     * 修改数据
     * @param t实体类的对象
     * @return被修改的记录条数
     */
    public Integer modify(T t) {
       return sqlTemplate.update(this.getClassName() +".update", t);
    }
 
    /**
     * 查询多条记录
     * @param t实体类的对象
     * @return对象列表
     */
    public List<T> queryMany(T t) {
       return sqlTemplate.selectList(this.getClassName() +".queryMany", t);
    }
}

以用户为例,基本的增删改查功能不用写了

=============================IUserDao======================
package com.obtk.dao.user;


import com.obtk.dao.IBaseDao;
import com.obtk.entitys.UserEntity;

public interface IUserDao extends IBaseDao<UserEntity>{
	boolean isLoginSuccess(String userName,String passWord);
	
	boolean isUserExists(String userName);
	
	
}

========================UserDaoImpl=========================

package com.obtk.dao.user;

import java.util.HashMap;
import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;

import com.obtk.dao.BaseDaoImpl;
import com.obtk.entitys.UserEntity;

public class UserDaoImpl extends BaseDaoImpl<UserEntity>implements IUserDao {
	
	public boolean isLoginSuccess(String userName, String passWord) {
		boolean flag = false;
		HashMap paramMap=new HashMap();
		paramMap.put("userName", userName);
		paramMap.put("pwd", passWord);
		List<UserEntity> userList = sqlTemplate.selectList("user.selectByLogin", paramMap);
		if (userList.size() >= 1) {
			flag = true;
		}
		return flag;
	}
	public boolean isUserExists(String userName) {
		boolean flag=false;  //表示不存在
		List<UserEntity> userList = sqlTemplate.selectList("user.selectByName",userName);
		if(userList.size()>=1){
			flag=true;
		}
		return flag;
	}
	

}
=====================UserMapper.xml===========================

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "mybatis-3-mapper.dtd">
<!-- 此处注意,命名空间不能随便乱写了,要写实体类名并全部小写 -->
<mapper namespace="userentity">
    <cache></cache>
	
	<select id="selectByLogin" parameterType="hashmap" resultType="UserEntity">
		select * from users where userName=#{userName} and passWord=#{pwd}
	</select>
	
	<select id="selectByName" parameterType="string" resultType="UserEntity">
		select * from users where userName=#{userName}
	</select>
	
	<insert id="add" parameterType="UserEntity"
	       useGeneratedKeys="true" keyProperty="userId">
		insert into users(userName,passWord,email) values(#{userName},#{passWord},#{email})
	</insert>
	
	<select id="getById" parameterType="string" resultType="UserEntity">
		select * from users where userId=#{userId}
	</select>
	
	<delete id="deleteById" parameterType="string">
		delete from users where userId=#{userId}
	</delete>
	
	<update id="update" parameterType="UserEntity">
		update users set userName=#{userName},passWord=#{passWord},email=#{email} where userId=#{userId}
	</update>
	
	<select id="queryMany" parameterType="UserEntity" resultType="UserEntity">
		SELECT * FROM users where 1=1
		<if test="userName!=null">
			and userName like CONCAT('%',#{userName},'%')
		</if>
		<if test="email!=null">
			and email =#{email}
		</if>
	</select>
	
</mapper>










评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

御前两把刀刀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值