实习修炼之第八天

整体进程介绍

@param注解 测试类 反射

@param注解

在学习的项目中,@Param主要是用来注解dao类中方法的参数(一般通过#{}方式),便于在对应的daosql.xml文件中引用,可以简化xml配置。如:在UserTradeStatusDAO类中有这么一个函数

/**
     * 根据unionId查询记录
     * @param unionId
     * @return
     */
    UserTradeStatusDo selectUserTraseByUnionId(@Param("unionId") String unionId);

其对应的sql. xml里的语句是
<select id="selectUserTraseByUserId" parameterType="Long" resultMap="UserTradeStatusDo"> select <include refid="allColumns"/> from <include refid="tableName"/> where user_id=#{userId} limit 1 </select>
当然这只是操作数据库一种注解方法,另外就是还可以利用继承实现类SqlSessionTemplate中的insert、update等方法,前面一篇文章里介绍过。
另外前面第五篇文章有Spring四大注解,以及第四篇文章的元注解介绍。

测试类

使用测试类时需要先继承编写一个适用于自己工程的测试类,
下面是我在项目中用到的测试类一般继承类

package com.mine.coupon.dal.dao;

import org.junit.Before;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
//配置测试运行环境
@ContextConfiguration(locations = {“classpath:dalTest-applicationContext.xml”})
public abstract class AbstractUnitTest extends AbstractJUnit4SpringContextTests {

@Before
public void before() {
    System.setProperty("disconf.conf", "application-test.properties");
}

}

然后·测试类就可以进行创建了,在idea中创建是在要测试的类名上按alt +enter,然后创建测试类,如下图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019070818501684.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0lUU09LXzEyMw==,size_16,color_FFFFFF,t_70)
然后就可以进行编写测试类,就实现测试类来说还是比较简单的,下面是一个测试用户领取优惠券的测试类:

public class CouponFacadeImplTest extends AbstractUnitTest {
@Resource
private CouponFacade couponFacade;

@Test
public void testCudrawCoupon() throws ParseException {
    DrawCouponReq drawCouponReq = new DrawCouponReq();
    CouponInfo couponInfo = new CouponInfo();
    //couponInfo.setId(12350l);
    couponInfo.setCouponId(145001l);
    couponInfo.setGroupId(1001l);
    couponInfo.setCreateTime(new SimpleDateFormat("yyyy-MM-dd").parse("2019-07-04"));
    //couponInfo.setEndTime(new SimpleDateFormat("yyyy-MM-dd").parse("2018-19-10"));
    couponInfo.setUserID(100001l);
    couponInfo.setValue(18);
    couponInfo.setStatus(1);
    couponInfo.setIsValid(1);
    couponInfo.setUpdateTime(new SimpleDateFormat("yyyy-MM-dd").parse("2019-07-04"));
    drawCouponReq.setCouponInfo(couponInfo);
    couponFacade.drawCoupon(drawCouponReq);

}

}


 - 注:在测试时老是遇到空指针报错,一般都是bean未注入导致。

## 反射
在写测试类之余无意间看到了java的反射,于是进行了一个简单的再了解。简单来说,java反射就是在运行状态中,对于任何一个类,我们都可以知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。这种动态获取对象信息和调用对象方法的功能被我们称为**反射机制。**
对于java反射来说,尤为重要的一个类是class类,Class 类是在Java语言中定义一个特定类的实现。一个类的定义包含成员变量,成员方法,还有这个类实现的接口,以及这个类的父类。Class类的对象用于表示当前运行的 Java 应用程序中的类和接口。有兴趣可以自己阅读Class源码。下面是Class的构造方法
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190708191122874.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0lUU09LXzEyMw==,size_16,color_FFFFFF,t_70)
可以看到它的构造方法是私有的,所以我们无法自己生成一个Class对象。Class类的对象是在当各类被调入时,由 Java 虚拟机自动创建 Class 对象,或通过类装载器中的 defineClass 方法生成。 我们生成的对象都会有个字段记录该对象所属类在CLass类的对象的所在位置。可以把每个Class类的对象当做众多类的代理。而且在每个Class类对象中有会有字段记录他引用的这个类的类加载器。
觉得 https://www.cnblogs.com/yepei/p/5649276.html 这篇文章对反射的介绍特别好,容易理解。
进一步具体反射的使用可以参考 https://blog.csdn.net/lwl20140904/article/details/80163880
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值