- MyBatis是什么
- 思考一下,我们怎么用在Spring中使用mybatis这个框架的
- SqlSessionFactoryBean
- 你写的接口
- MapperFactoryBean 重点
- mybatis 动态代理 接口编程
- 怎么实现?
- 搞定
- sqlSessionFactory呢?
MyBatis是什么
MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。 最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。
思考一下,我们怎么用在Spring中使用mybatis这个框架的 SqlSessionFactoryBean//首先是不是有一个SqlSessionFactoryBean //这个就是Mybatis创建SQL连接的一个工厂你写的接口//在SqlSessionFactoryBean中定义一个数据源 // 配置mybatis
public interface UserMapper {
@Select("SELECT * FROM users WHERe id = #{userId}")
User getUser(@Param("userId") String userId);
}
MapperFactoryBean 重点
//把链接和你的接口放到一个类中再找到 配置文件 执行创建一个可以使用的bean //原理是动态代理mybatis 动态代理 接口编程//你写的mapper接口 //sqlSessionFactoryBean对象
userMapperz这个bean是不是一个org.mybatis.spring.mapper.MapperFactoryBean类
为什么这个类可以注入到我们创建的对象类型中
看属性 mapperInterface 指定的是你的接口
怎么实现?
首先创建一个interface
public interface UserDao {
public void insert();
public void select();
public void query();
public void upate();
}
再有一个代理类对象
//实现InvocationHandler 接口 重写 invoker方法
public class DaoTemplate implements InvocationHandler {
public static Object newInstance(Class[] interfaces) {
//使用JDK的动态代理创建代理对象
return Proxy.newProxyInstance(DaoTemplate.class.getClassLoader(),
interfaces, new DaoTemplate());
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
String methodName = method.getName();
System.out.println("调用的方法名称为:"+methodName);
Class> returnType = method.getReturnType();
System.out.println("返回的类型为"+returnType.getName());
if ("select".equals(methodName)) {
this.getClass().getMethod("select");
} else if ("update".equals(methodName)) {
this.getClass().getMethod("update");
} else if ("insert".equals(methodName)) {
this.getClass().getMethod("insert");
} else if ("query".equals(methodName)) {
this.getClass().getMethod("query");
}
return null;
}
public void select(){
System.out.println("执行了select");
}
public void query(){
System.out.println("执行了query");
}
public void delect(){
System.out.println("执行力delect");
}
public void insert(){
System.out.println("执行了insert");
}
}
搞定
public class MyBatisTest {
public static void main(String[] args) {
UserDao userDao = (UserDao) DaoTemplate.newInstance(new Class[]{UserDao.class});
userDao.insert();
userDao.query();
userDao.select();
userDao.upate();
}
}
sqlSessionFactory呢?



