知识点回顾
1、分页
后台的分页参数
cpage: 当前页
start:起始值 = (cpage - 1)* pageSize;
pageSzie: 分页单位
totalCount: 总条数 select count(*) from 表名
totalPage: 总页数 = (totalCount / pageSize)+ (totalCount / pageSize == 0 ?0 :1)
sql: limit start,pageSize;
前台分页按钮
<a href="<%=basePath%>userServlet?m=list&cpage=1">首页</a>
<a href="<%=basePath%>userServlet?m=list&cpage=${cpage == 1 ? cpage :(cpage-1)}">上页</a>
<a href="<%=basePath%>userServlet?m=list&cpage=${cpage == totalPage ? cpage :(cpage+1)}">下页</a>
<a href="<%=basePath%>userServlet?m=list&cpage=${totalPage}">尾页</a>
2、反射
创建Class对象的三种常见方式
Class clazz1 = User.class;
Class clazz2 = Class.forName("com.tledu.pojo.User");
Class clazz3 = new User().getClass();
//通过反射创建User对象实例
User user = (User)clazz1.newInstance();
反射创建对象比较消耗性能,看源码发现调用到了native关键字,而这个关键字会调用到底层 c语言
每次在创建对象的时候都会进行安全校验 CheckAccessMember()
获取基本的信息
clazz1.getPackage(); //包名
clazz1.getModifiers(); //访问修饰符
clazz1.getSimpleName(); //获取类名
clazz1.getName(); //获取的全类名
clazz1.getInterface(); //获取接口
clazz1.getAnnotation();//获取注解
1、属性
//获取本类及父类公共的属性
Field[] fields = clazz1.getFields();
for(Field field:fields){
//获取属性名
field.getName()
//获取修饰符
Modifier.toString(field.getModifiers());
}
//获取本类中所有的属性包括私有
Field[] fields = clazz1.getDeclaredFields();
for(Field field:fields){
//获取属性名
field.getName()
//获取修饰符
Modifier.toString(field.getModifiers());
}
普通属性的操作
Field field = clazz1.getDeclaredField("name");
//访问私有要先开权限
field.setAccessible(true);
field.set(user,"Tom"); //给User对象中的name属性赋值
field.get(user); //获取User对象中name属性值
静态属性的操作
Field field = clazz1.getDeclaredField("name");
//访问私有要先开权限
field.setAccessible(true);
field.set(null,"Tom"); //给User对象中的name属性赋值
field.get(null); //获取User对象中name属性值
2、方法
//获取本类及父类中的公共的方法
Method[] methods = clazz1.getMethods();
//获取本类的所有方法
Method[] methods = clazz1.getDeclaredMethods();
//getDeclaredMethod(arg,rag...)
//第一个参数是方法名,第二个参数是可变参数是Class类型的
Method method = clazz1.getDeclaredMethod("eat");
method.invok(user);
//静态方法时的调用
Method method = clazz1.getDeclaredMethod("say",String.class);
method.invok(null,"英语");
3、构造
Constructor<?>[] constructors = clazz1.getDeclaredConstructors();
Constructor<User> constructor = clazz.getDeclaredConstructor(String.class,String.class);
User user2 = constructor.newInstance("田源","男");
System.out.println(user2.getName()+" "+user2.getSex());
4、单例破局
public class Singlton{
private Singlton singlton = null;
private Singlton(){
if(singlton != null){
throw new RuntimeException();
}
}
public static Singlton getInstance(){
if(singlton == null){
singlton = new Singlton();
}
return singlton;
}
}
5、对象克隆
思路:通过反射获取有值的对象中的get方法并调用,
这样去出值后再调用没有值对象的set方法传入获取的值并执行
public static void copyProperties(Object obj1,Object obj2){
Class clazz1 = obj1.getClass();
Class clazz2 = obj2.getClass();
Method[] method1 = clazz1.getDeclaredMethods();
for(Method method:method1){
String m1 = method.getName();
if(m1.startWith("g")){
String value1 = (String)method.invok(obj1);
Method[] method2 = clazz2.getDeclaredMethods();
for(Method method22:method2){
String m2 = method22.getName();
if(m2.startWith("s")&&m2.subString(1).equals(m1.subString(1))){
method22.invok(obj2,value1);
}
}
}
}
}
Mybatis入门
第一步:
创建t_user表
第二步:
创建lib文件夹导入相应jar文件
①log4j ②mysql ③mybatis
第三步:
创建User实体类
第四步:
导入 log4j.properties 、jdbc.propertie文件
第五步:
创建mybatis-config.xml
第六步:
创建UserMapper.xml
第七步:
创建MybatisTest 测试类