2020-12-08
阿新 • • 發佈:2020-12-08
加油打卡(分享三個工具類)
工具類使程式碼簡潔,減少了不必要的重複程式碼現象,對程式設計師很友好
第一個是建立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)