集合为null和集合为空的区别:
集合为null:list=null | //空 为null时,表示List不存在,未分配内存。
集合为空list.size()或者list.isEmpty() | 代表已经创建了list,分配内存,长度为0,可以填充数据。List list = newArrayList()
1、<T>T 用法
这个<T> T 表示的是返回值T是泛型,T是一个占位符,用来告诉编译器,这个东西先给我留着,等我编译的时候,告诉你。
package xxxx;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.ss.formula.functions.T;
public class Demo {
public static void main(String[] args) {
Demo demo = new Demo();
//获取string类型
List<String> array = new ArrayList<String>();
array.add("test");
array.add("doub");
String str = demo.getListFisrt(array);
System.out.println(str);
//获取nums类型
List<Integer> nums = new ArrayList<Integer>();
nums.add(12);
nums.add(13);
Integer num = demo.getListFisrt(nums);
System.out.println(num);
}
/**
* 这个<T> T 可以传入任何类型的List
* 参数T
* 第一个 表示是泛型
* 第二个 表示返回的是T类型的数据
* 第三个 限制参数类型为T
* @param data
* @return
*/
private <T> T getListFisrt(List<T> data) {
if (data == null || data.size() == 0) {
return null;
}
return data.get(0);
}
}
2、T 用法
返回值,直接写T表示限制参数的类型,这种方法一般多用于共同操作一个类对象,然后获取里面的集合信息啥的。
package xxxxxx;
import java.util.ArrayList;
import java.util.List;
public class Demo2<T> {
public static void main(String[] args) {
//限制T 为String 类型
Demo2<String> demo = new Demo2<String>();
//获取string类型
List<String> array = new ArrayList<String>();
array.add("test");
array.add("doub");
String str = demo.getListFisrt(array);
System.out.println(str);
//获取Integer类型 T 为Integer类型
Demo2<Integer> demo2 = new Demo2<Integer>();
List<Integer> nums = new ArrayList<Integer>();
nums.add(12);
nums.add(13);
Integer num = demo2.getListFisrt(nums);
System.out.println(num);
}
/**
* 这个只能传递T类型的数据
* 返回值 就是Demo<T> 实例化传递的对象类型
* @param data
* @return
*/
private T getListFisrt(List<T> data) {
if (data == null || data.size() == 0) {
return null;
}
return data.get(0);
}
}
总结一句话:
第一种用法Demo类的getListFisrt方法可以接受任意类型List参数,
第二种Demo类在初始化的时候已经限定了T的类型,所以getListFirst方法只能接受List类型的参数。
原文链接:Java之泛型<T> T与T的用法_<t> (of t) 实际t的操作_北漂编程小王子的博客-CSDN博客
- instanceof 是 Java 的保留关键字。
- 作用是:测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。
- instanceof是Java中的二元运算符,左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false。
- 说明下:类的实例包含本身的实例,以及所有直接或间接子类的实例
- instanceof左边显式声明的类型与右边操作元必须是同种类或存在继承关系,也就是说需要位于同一个继承树,否则会编译错误
改写equals的步骤
使用==操作符检查“实参是否为指向对象的一个引用”。如果是的话,则返回true。
使用当前对象(this)的canEqual方法检查是否可以与目标对象(实参)进行比较。如果不是的话,则返回false。
使用instanceof操作符(注1)检查“实参是否为正确的类型”。如果“正确”的类型不止一个,按优先级(注2)依次检查每一个“正确”的类型。如果所有的“正确”类型都不是,则返回false。
针对每一个符合要求的“正确”类型,做以下处理:把实参转换到“正确”的类型。因为前面已经有了instanceof的检查,所以这个转换可确保成功。
使用目标对象(转换类型之后的实参)的canEqual方法检查是否可以与当前对象(this)进行比较。如果不是的话,则返回false(注3)。对于该类中每一个“关键”域,检查实参中的域与当前对象中对应的域值是否匹配。检查完毕将结果直接返回(注3)。
首先直接给出类代码的执行顺序
普通方法的执行顺序?
1、概述
首先明确这个注解是为SQL语句中参数赋值而服务的。 @Param的作用就是给参数命名,比如在mapper里面某方法A(int id),当添加注解后A(@Param("userId") int id),也就是说外部想要取出传入的id值,只需要取它的参数名userId就可以了。将参数值传如SQL语句中,通过#{userId}进行取值给SQL的参数赋值。
2、实例:
实例一:@Param注解基本类型的参数
mapper中的方法:
public User selectUser(@Param("userName") String name,@Param("password") String pwd);
映射到xml中的<select>标签
<select id="selectUser" resultMap="User">
select * from user where user_name = #{userName} and user_password=#{password}
</select>
其中where user_name = #{userName} and user_password = #{password}中的userName和password都是从注解@Param()里面取出来的,取出来的值就是方法中形式参数 String name 和 String pwd的值。
实例二:@Param注解JavaBean对象
SQL语句通过@Param注解中的别名把对象中的属性取出来然后复制到mapper中的方法:
public List<User> getAllUser(@Param("user") User u);
映射到xml中的<select>标签
<select id="getAllUser" parameterType="com.vo.User" resultMap="userMapper">
select
from user t where 1=1
and t.user_name = #{user.userName}
and t.user_age = #{user.userAge}
</select>
3、注意点
当使用了@Param注解来声明参数的时候,SQL语句取值使用#{},${}取值都可以。
当不使用@Param注解声明参数的时候,必须使用的是#{}来取参数。使用${}方式取值会报错。
不使用@Param注解时,参数只能有一个,并且是Javabean。在SQL语句里可以引用JavaBean的属性,而且只能引用JavaBean的属性。
@Select("SELECT * from Table where id = #{id}")
Enchashment selectUserById(User user);
————————————————
版权声明:本文为CSDN博主「晓风残月一望关河萧索」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Sunshineoe/article/details/114697944