ssm+maven搭建及扩展修改(六.封装公共数据操作-未分页)

目录

概图

添加的文件及修改的配置文件,如下图:

配置文件修改

mybatis-spring.xml配置文件修改:

spring.xml配置文件修改:

添加封装的新代码

第一步:添加接口IBaseMapper ,IBaseMapper.java

第二步:添加对应的mapper,IBaseMapper.xml

第三步:采用泛型和反射机制封装一个公用类,IBaseDao.java

第四步:具体Dao继承公用Dao层,PersonDao extends IBaseDao。,personmapper>

第五步:修改PersonService.java,添加方法queryTableAll

第六步:修改PersonServiceImpl.java

第七步:修改PersonController.java,添加一段

第八步:修改前端页面,添加按钮事件,请求代码

首先,在data里添加返回参数param3

再,修改页面

再,修改script,添加触发事件

好了,完成,下面是测试图例


对于类似的数据操作,可以通用代码去封装,避免重复写类似的坑长代码。

这里就简单写写公用增删查改,当做初级引路人。后面可以自行修改进一步封装修改。

这次修改的比较多,对类在包的位置,以及写法,配置都有修改,新工程的代码,我上传有道云笔记提供下载

概图

添加的文件及修改的配置文件,如下图:

配置文件修改

mybatis-spring.xml配置文件修改:

<!-- Mybatis文件 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
 		<property name="dataSource" ref="dataSource"/>
		<property name="typeAliasesPackage" value="org.test.bean"/>
        <!-- 映射文件路径 -->
        <property name="mapperLocations" value="classpath:org/test/dao/mapping/**/*.xml" />
    </bean>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="org.test.dao.mapping" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>

 

spring.xml配置文件修改:

<!-- 自动注入 -->
    <context:component-scan base-package="org.test" />

 

添加封装的新代码

第一步:添加接口IBaseMapper <T>,IBaseMapper.java

package org.test.dao.mapping;

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

import org.apache.ibatis.annotations.Param;

public interface IBaseMapper <T> {

    List<HashMap<Object, Object>> queryOne( @Param("name") String name,@Param("id")int id );

    List<HashMap<Object, Object>> queryTableAll( @Param("name") String name );

    int add( @Param("name")String name ,@Param("params") Object ...params );

    void update ( @Param("id") int id, @Param("name") String name, @Param("params")Object []params );

    void delete(@Param("name")String lowerCase, @Param("id")int id);
}

第二步:添加对应的mapper,IBaseMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="org.test.dao.mapping.IBaseMapper" >
    <!-- 按id查找一个 -->
    <select id="queryOne" resultType="hashmap">
        select * from ${name} where id=#{id}
    </select>

    <!-- 查询所有 -->
    <select id="queryTableAll" resultType="hashmap">
        select * from ${name}
    </select>

    <insert id="add" >
        insert into ${name} values
        <foreach collection="params"  item="param" open="(" separator="," close=")" >
            #{param}
        </foreach>
    </insert>

    <update id="update">
        update ${name} 
        <set>
            <foreach collection="params"  item="param" >
                ${param}, 
            </foreach>
        </set>
        where id=#{id}
    </update>
	<delete id="delete">
		delete from ${name} where id=#{id}
	</delete>
</mapper>

第三步:采用泛型和反射机制封装一个公用类,IBaseDao.java

package org.test.dao;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Repository;

@Repository
public abstract class IBaseDao<T,M> {
	//提供一个抽象方法 当前类的子类需要提供具体实现类的 Dao 
    public abstract M getBaseMapper(); 
  //提供一个抽象方法  当前类的子类需要提供 entity的 Class 对象
    public abstract Class<T> getClasss();

    public Class<T> commonClass;
    {
        commonClass = getClasss();
    }
    /**
     * 根据 id 查找一个对象
     */
     @SuppressWarnings("unchecked")
 	public T queryOne(Integer id) {
         String name = commonClass.getSimpleName().toLowerCase();
         Class<M> clazz = (Class<M>) getBaseMapper().getClass();
         Method queryOne;
         try {
        	 queryOne = clazz.getDeclaredMethod("queryOne", name.getClass(), Integer.class);
             return (T) queryOne.invoke(getBaseMapper(), name, id);
         } catch (ReflectiveOperationException e) {
             throw new RuntimeException("数据读写异常", e);
         }
     }
     /**
     * 查找所有对象
     */
     @SuppressWarnings("unchecked")
 	public List<T> queryTableAll() {
         String name = commonClass.getSimpleName().toLowerCase();
         
         Class<M> clazz = (Class<M>) getBaseMapper().getClass();
         Method queryTableAll;
         try {
        	queryTableAll = clazz.getDeclaredMethod("queryTableAll", name.getClass());
        	List<T> list = (List<T>)queryTableAll.invoke(getBaseMapper(), name);
         	return list;
         } catch (ReflectiveOperationException e) {
             throw new RuntimeException("数据读写异常", e);
         }
     
     }

     /**
     * 添加一个 对象
     */
     @SuppressWarnings("unchecked")
	public int add(T t) {
         //获取表名
         String name = commonClass.getSimpleName().toLowerCase();
         List<Object> list= new ArrayList<>();
         //将参数放入数组中
         for (Field field : t.getClass().getDeclaredFields()){
         	field.setAccessible(true);//权限
             try {
                 list.add(field.get(t));
             } catch (IllegalArgumentException | IllegalAccessException e) {
                 e.printStackTrace();
             }
         }
         Class<M> clazz = (Class<M>) getBaseMapper().getClass();
         Method add;
         try {
        	add = clazz.getDeclaredMethod("queryTableAll", name.getClass(),Object.class);
         	return (int) add.invoke(getBaseMapper(), name,list.toArray());
         } catch (ReflectiveOperationException e) {
             throw new RuntimeException("数据读写异常", e);
         }
     }

     /**
     * 更新一个对象
     */
     @SuppressWarnings("unchecked")
	public void update(T t) {
         int id = 0;
         String name = t.getClass().getName();
         List<Object> list= new ArrayList<>();
         for (Field field : t.getClass().getDeclaredFields()) {
             field.setAccessible(true);//权限
             try {
                 if ( field.get(t) == null ) {
                     continue;
                 }
                 if (("id").equals( field.getName()) ) { 
                     id = (Integer) field.get(t);
                     continue ;
                 }
                 //拼接成 :变量名='值' 的形式
                 list.add( field.getName()+"="+ "'" + field.get(t) + "'" );
             } catch (IllegalArgumentException | IllegalAccessException e) {
                 e.printStackTrace();
             }
         }
         Class<M> clazz = (Class<M>) getBaseMapper().getClass();
         Method update;
         try {
        	 update = clazz.getDeclaredMethod("update",Integer.class,name.getClass(),Object.class);
        	 update.invoke(getBaseMapper(),id, name,list.toArray());
         } catch (ReflectiveOperationException e) {
             throw new RuntimeException("数据读写异常", e);
         }

    }
     /**
     * 根据id 删除 一个对象
     */
     @SuppressWarnings("unchecked")
	public void delete(int id) {
         String name = commonClass.getSimpleName().toLowerCase();
         Class<M> clazz = (Class<M>) getBaseMapper().getClass();
         Method delete;
         try {
        	 delete = clazz.getDeclaredMethod("delete",name.getClass(),Integer.class);
        	 delete.invoke(getBaseMapper(),name, id);
         } catch (ReflectiveOperationException e) {
             throw new RuntimeException("数据读写异常", e);
         }

     }   
}

第四步:具体Dao继承公用Dao层,PersonDao extends IBaseDao<Person,PersonMapper>。

package org.test.dao;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.test.bean.Person;
import org.test.dao.mapping.PersonMapper;

@Repository
public class PersonDao extends IBaseDao<Person,PersonMapper>{

	@Autowired
    private PersonMapper personMapper;
	
	@Override
	public PersonMapper getBaseMapper() {
		// TODO Auto-generated method stub
		return personMapper;
	}

	@Override
	public Class<Person> getClasss() {
		// TODO Auto-generated method stub
		return Person.class;
	}
	
	public List<Person> queryAll(){
		return personMapper.queryAll();
	}
	
	
}

第五步:修改PersonService.java,添加方法queryTableAll

ServerResponse<List<Person>> queryTableAll();

第六步:修改PersonServiceImpl.java

package org.test.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.test.bean.Person;
import org.test.dao.PersonDao;
import org.test.dataEncapsulation.ServerResponse;
import org.test.service.PersonService;

@Service
public class PersonServiceImpl implements PersonService {
    
	@Autowired
    private PersonDao personDao;
    
	public List<Person> loadPersons() {
		return personDao.queryAll();
	}

	/**
	* 这时可以指定具体的封装类的泛型类型
	* @return
	*/
	public ServerResponse<List<Person>> queryAll() {
	//DAO层查询数据
		List<Person> studentList = personDao.queryAll();
		if (studentList.size()>0){
			return ServerResponse.createBySuccess(studentList);
		}
		return ServerResponse.createByError("查询记录为空");
	}

	public ServerResponse<List<Person>> queryTableAll() {
		// TODO Auto-generated method stub
		List<Person> list = personDao.queryTableAll();
		if (list.size()>0){
     		return ServerResponse.createBySuccess(list);
     	}
     	return ServerResponse.createByError("查询记录为空");
	}

}

第七步:修改PersonController.java,添加一段

@RequestMapping(value = "/show3")
    @ResponseBody
    public ServerResponse<List<Person>> show3(){
    	
    	return personService.queryTableAll();	
    }

第八步:修改前端页面,添加按钮事件,请求代码

首先,在data里添加返回参数param3

data(){
    return{
      persons:null,
      param:null,
      param3:null
    }
  },

再,修改页面

<div v-if="null != param3" style="font-size:36px;font-weigth: 600;">----base数据----</div>
<div v-for="value,key,index in param3" style="font-size:36px;font-weigth: 600;">姓名:{{value.name}} 年龄:{{value.age}}</div>

再,修改script,添加触发事件

getValue3(){
      var _that = this;
      this.axios({
        method:'post',
        url:'/ownkua/own/personController/show3',
        data:{
          
        }
      }).then(function(response) {
        _that.param3 = response.data.param;
      }).catch(function (error) {
        console.log(error);
      });
    }

好了,完成,下面是测试图例

谢谢!!!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值