目录
- 一.mybatis执行流程
- 二.使用工具类简化项目(反射的体现)
- 2.1 Sqlsession工厂对像
- 2.2 工具类(可直接放在工具类使用)
一.mybatis执行流程
1.1 读取主配置文件mybatis-config.xml,获得运行环境和数据库连接。
1.2 加载映射文件,如StudentMapper.xml。
1.3 根据主配置文件mybatis-config.xml构建会话工厂SqlSessionFactory对象。
1.4 根据会话工厂SqlSessionFactory对象创建SqlSession对象,再调用SqlSession对象的各种增删改查方法。比如上一节中的selectList()方法用来查找记录集合。
1.5 底层定义的Executor接口操作数据库。
1.6 底层对输入参数进行映射,在执行sql前将输入的java对象映射到sql中。
1.7 底层将输出结果映射为Java对象。
其中最后三步骤无须程序员参与,MyBatis底层自动执行。
二.使用工具类简化项目(反射的体现)
2.1 Sqlsession工厂对像
每次在执行sql之前 都要去加载配置文件,过程比较繁琐,即可以封装定义一个工具类getBean 单独放在一个类中,后续调用即可。
public class AppTest {
SqlSessionFactory factory = null;
@Before
public void init(){
try {
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(resourceAsStream);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void add() {
SqlSession sqlSession = factory.openSession(true);
// 获取接口实现类 多态 动态代理方式 ->代理对象 实现类
UserMapper userDao = sqlSession.getMapper(UserMapper.class); // UserDaoImpl@1353456
System.out.println("userDao = " + userDao);
User user = new User();
user.setPassword("99999");
//user.setUsername("root");
Integer line = userDao.insertUser(user);
System.out.println(line>0);
sqlSession.close();
}
2.2 工具类(可直接放在工具类使用)
package cn.kgc.utils;
import cn.kgc.reflect.Person;
import cn.kgc.reflect.Student;
import java.lang.reflect.Constructor;
/**
* @Description: 对象工厂
*/
public class BeanFactory {
public static Object getBean(String path){
try {
Class clazz = Class.forName(path);
Constructor declaredConstructor = clazz.getDeclaredConstructor();
declaredConstructor.setAccessible(true);
Object o = declaredConstructor.newInstance();
return o;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static <T> T getBean(String path,Class<T> claz){
try {
Class clazz = Class.forName(path);
Constructor declaredConstructor = clazz.getDeclaredConstructor();
declaredConstructor.setAccessible(true);
Object o = declaredConstructor.newInstance();
return claz.cast(o);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
//Student student = (Student) getBean("cn.kgc.reflect.Student");
Student student = getBean("cn.kgc.reflect.Person", Student.class);
System.out.println("student = " + student);
}
}
又是划水的一天 记得三连哈