当前位置: 代码迷 >> 综合 >> stream().map()+.getClass().getDeclaredField(field)+Field.set()+setAccessible(true)+Jpa+Pageable+data
  详细解决方案

stream().map()+.getClass().getDeclaredField(field)+Field.set()+setAccessible(true)+Jpa+Pageable+data

热度:54   发布时间:2023-11-07 14:56:18.0

一、jdk8的特性stream().map()

public class TestJava8 {
    public static void main(String[] args) {
    List<String> alpha = Arrays.asList("a", "b", "c", "d");//Before Java8List<String> alphaUpper = new ArrayList<>();for (String s : alpha) {
    alphaUpper.add(s.toUpperCase());}System.out.println(alpha); //[a, b, c, d]System.out.println(alphaUpper); //[A, B, C, D]// Java 8List<String> collect = alpha.stream().map(String::toUpperCase).collect(Collectors.toList());System.out.println(collect); //[A, B, C, D]// Extra, streams apply to any data type.List<Integer> num = Arrays.asList(1,2,3,4,5);List<Integer> collect1 = num.stream().map(n -> n * 2).collect(Collectors.toList());System.out.println(collect1); //[2, 4, 6, 8, 10]}}

参考:https://www.cnblogs.com/xiaoliu66007/p/13039346.html

二、Java Field.set()向对象的这个Field属性设置新值value

将指定对象变量上此 Field 对象表示的字段设置为指定的新值.

//根据属性名设置它的值
A a = new A();
Field field = a.getClass().getDeclaredField("x");
field.setAccessible(true);
field.set(a, 1);

例子

public static void main(String[] args) throws NoSuchFieldException,
SecurityException,
IllegalArgumentException,
IllegalAccessException {
    Person person = new Person();person.setName("VipMao");person.setAge(24);person.setSex("男");//通过Class.getDeclaredField(String name)获取类或接口的指定属性值。 Field f1 = person.getClass().getDeclaredField("name");System.out.println("-----Class.getDeclaredField(String name)用法-------");System.out.println(f1.get(person));System.out.println("-----Class.getDeclaredFields()用法-------");//通过Class.getDeclaredFields()获取类或接口的指定属性值。 Field[] f2 = person.getClass().getDeclaredFields();for (Field field: f2) {
    field.setAccessible(true);System.out.println(field.get(person));}//修改属性值 System.out.println("----修改name属性------");f1.set(person, "Maoge");//修改后再遍历各属性的值 Field[] f3 = person.getClass().getDeclaredFields();for (Field fields: f3) {
    fields.setAccessible(true);System.out.println(fields.get(person));}
}

结果

-----Class.getDeclaredField(String name)用法-------  
VipMao  
-----遍历属性值-------  
VipMao  
24----修改name属性后再遍历属性值------  
Maoge  
24

通过set(Object obj,value)重新设置新的属性值,并且当我们需要获取私有属性的属性值得时候,我们必须设置Accessible为true,然后才能获取。
参考:http://www.51gjie.com/java/794.html

三、setAccessible(true)用法及意义

Accessable属性是继承自AccessibleObject 类. 功能是启用或禁用安全检查 ;
1.作用于方法上,method.setAccessible(true);

public static void test02() throws Exception{
    User u = new User();Class clazz = u.getClass();Method m = clazz.getDeclaredMethod("getUname", null);m.setAccessible(true);m.invoke(u, null);	
}

2.作用于属性上,field.setAccessible(true);

if (field.isAnnotationPresent(TestIdSign.class)){
    try {
    field.setAccessible(true);field.set(object,testId);} catch (IllegalAccessException e) {
    throw new RuntimeException("set testID illegalAccessException",e);}
}

将此对象的 accessible 标志设置为指示的布尔值。值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查;实际上setAccessible是启用和禁用访问安全检查的开关,并不是为true就能访问为false就不能访问 ;

由于JDK的安全检查耗时较多.所以通过setAccessible(true)的方式关闭安全检查就可以达到提升反射速度的目的 。
参考:https://blog.csdn.net/buyaoshuohua1/article/details/104175188?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

四、Jpa基本注解

@Entity 告诉JPA该实体类Blog需要映射到数据库

@Tabel 指定Blog类映射时,数据库对应的表名为t_blog

@Id @GeneratedValue 指定t_blog表的主键为id,采用自增长的方式生成主键

@Basic 为默认属性,可以不指定

@Temporal 指定日期字段createtime的映射格式为:日期+时间

@Transient 指定author字段不映射到数据库表

@Column 指定字段content映射t_blog表时的列名为blog_content,nullable = false 值不能为null

@Lob 标明该字段为大对象,并给该字段配置了懒加载

参考:https://blog.csdn.net/bdqx_007/article/details/86373144
了解jpa:https://www.cnblogs.com/ityouknow/p/5891443.html

五、分页工具一Pageable与Page

Pageable 是Spring Data库中定义的一个接口,用于构造翻页查询,是所有分页相关信息的一个抽象,通过该接口,我们可以得到和分页相关所有信息(例如pageNumber、pageSize等),这样,Jpa就能够通过pageable参数来得到一个带分页信息的Sql语句。
参考:https://www.cnblogs.com/loveer/p/11303608.html

六、Git在IDEA中的使用

参考 :https://blog.csdn.net/mucaoyx/article/details/98476174?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

七、idea中database运用问题

Cannot resolve table * (至今未解决。。不知道原因)
参考:https://blog.csdn.net/m0_37876935/article/details/105464081

  相关解决方案