- 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呢?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)