1. 程式人生 > 其它 >2020-12-08

2020-12-08

技術標籤:加油打卡java

加油打卡(分享三個工具類)

工具類使程式碼簡潔,減少了不必要的重複程式碼現象,對程式設計師很友好
第一個是建立SqlSession物件的工具類,這裡需要新增一個jar包才可以使用:
在這裡插入圖片描述

package com.itheima.util;


import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.
SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; public class MyBatisUtil { private static SqlSessionFactory factory; static { try { //獲取核心配置檔案中的流物件 InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); //建立工廠物件
factory = new SqlSessionFactoryBuilder().build(in); } catch (IOException e) { e.printStackTrace(); } } //返回SqlSession public static SqlSession getSqlSession() { return factory.openSession(); } }

第二個是基於第一種的一個擴充套件,通過動態代理方式建立mapper物件,也需要引用一個jar包:

在這裡插入圖片描述

package com.itheima.util;

import org.apache.ibatis.session.SqlSession;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class MapperFactory {


    public static <T> T getMapper(Class<T> clazz) {

        //2.希望採用動態代理對mapper進行增強, 加上兩個步驟
        T proxyStudentDao = (T) Proxy.newProxyInstance(clazz.getClassLoader(), new Class[]{clazz}, new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                //1.獲取到弱雞物件
                SqlSession sqlSesion = MyBatisUtil.getSqlSession();
                T mapper = sqlSesion.getMapper(clazz);
                //先讓弱雞進行呼叫
                Object invoke = method.invoke(mapper, args);
                //提交事務
                sqlSesion.commit();
                //關閉資源
                sqlSesion.close();
                return invoke;
            }
        });
        return proxyStudentDao;
    }
}

通過反射的方式呼叫實現類物件的方法,使用方式例如:
在這裡插入圖片描述
第三個是時間引數型別轉換的工具類,需要jar包:
在這裡插入圖片描述

package com.itheima.util;

import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TimeConvertUtil {

    private TimeConvertUtil(){}

    public static void timeConvert(){
        ConvertUtils.register(new Converter() {
            @Override
            public  Object convert(Class aClass, Object o) {
                String time = (String) o;
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                try {
                    Date date = sdf.parse(time);
                    return date;
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                return null;
            }
        }, Date.class);

    }
}

使用只需要將TimeConvertUtil.timeConvert();寫在封裝過程之上即可(圖中封裝過程為BeanUtils.populate(stu,map)