mybatis怎么与spring衔接
程序员文章站
2022-03-08 15:37:34
...
interface Tdao{
@Select({"select * from t","select * from b"})
public void select();
}
class mybatis{
public void getMapper(){
// SqlSessionFactory factory = null;
// SqlSession sqlSession = factory.openSession();
Tdao tdao = (Tdao) SqlSession2.getMapper(Tdao.class);
tdao.select();
}
}
class SqlSession2{//动态代理就是创建一个新对象,
public static Object getMapper(Class clazz1){
//ClassLoader loader, 类加载器需要将接口类加载到jvm内存,这样才能生成实现clazz接口内方法的新对象
// Class<?>[] interfaces, java对象可以实现多个接口,所以新对象可以实现多个接口,故给了数组
// InvocationHandler h 动态代理必须实现它,为的是同一方法名,
// 这样mapper接口中diy的op数据库的方法才能被动态代理
// 通过唯一的方法名invoke来实现执行sql的所需要的一系列操作
Proxy.newProxyInstance(SqlSession2.class.getClassLoader(),new Class[]{clazz1},new myInvokerHandler());
return null;
//mybatis是如何实现执行sql语句的呢?
//
}
}
class myInvokerHandler implements InvocationHandler{
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// invoke的方法全部重写到clazz1接口中声明的所有方法中去
return null;
}
}
//FactoryBean就是用来说明这个myFactoryBean是将要交给Spring管理的一个外部java类
@MapperScan
class myFactoryBean implements FactoryBean{
Class mapeprInterfaces;
@Override
public Object getObject() throws Exception {
return SqlSession2.getMapper(mapeprInterfaces);
}
@Override
public Class<?> getObjectType() {
return mapeprInterfaces.getClass();
}
}
class willRegistryClassNoAnnotation{
}
class myBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar{
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
//一个Bean注册成为beanDefinition
BeanDefinitionBuilder beanDefinitionBuilder =
BeanDefinitionBuilder.genericBeanDefinition(willRegistryClassNoAnnotation.class);
AbstractBeanDefinition beanDefinition = beanDefinitionBuilder.getBeanDefinition();
MutablePropertyValues propertyValues = beanDefinition.getPropertyValues();
//通过包名扫描类importingClassMetadata注解就是@MapperScan("com.xxx.xxx")
for (){
propertyValues.add("FactoryBean中声明的接收类的属性名","com.xxx的类名");
//这里就在注册
registry.registerBeanDefinition(beanDefinitionBuilder.toString(),beanDefinitionBuilder.getBeanDefinition());
}
}
}
@Import(myBeanDefinitionRegistrar.class)
class cataLogrun{
public static void main(String[] args) {
}
}
推荐阅读
-
spring Boot与Mybatis整合优化详解
-
MyBatis 与 Spring 的完美整合方法
-
Spring boot怎么整合Mybatis
-
Mybaits 源码解析 (十)----- 全网最详细,没有之一:Spring-Mybatis框架使用与源码解析
-
spring Boot与Mybatis整合优化详解
-
SpringMVC+Spring+MyBatis 整合与图片上传简单示例
-
Spring与Mybatis整合 将SqlSessionFactory的创建交给spring完成
-
spring事务深入剖析 - 事务框架和mybatis如何衔接的
-
Spring源码分析之与WEB服务器衔接(下)
-
Mybatis与Spring集成