加油打卡(分享三个工具类)
工具类使代码简洁,减少了不必要的重复代码现象,对程序员很友好
第一个是创建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)😉
如果在网上搜不到的jar包的,可以在这里找https://mvnrepository.com/