目录
- 一.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);
    }
}

 又是划水的一天 记得三连哈



















