一、使用传统方式的dao的书写方式,不建议。目前采用的是动态代理的方式交给mybatis进行处理。

首先回顾下动态代理要求:

  1)子配置文件的中,namespace需要是接口的全路径,id是接口的方法名称 这两项唯一确定我们的调用的接口。

  2)子mapper文件的名称要和接口的名称保持一致。

  3)参数和返回值要和方法的保持一致。

二、整合

1)dao代码:

dao的代码,只需要保留接口即可。

2)service的代码:

实现类发生变化。

动态代理dao的id的名字是: 类名首字母小写

 package jd.com.service;

 import jd.com.dao.trDao;
import jd.com.dao.user;
import org.springframework.stereotype.Service; import javax.annotation.Resource; @Service(value = "serv")
public class serFindByIdImpl implements trService { @Resource(name="trDao")
private trDao trDao; @Override
public user serFindById(Integer id) {
user us=this.trDao.findUserByName();
return us;
}
}

测试类:

 package jd.com.testDemo;

 import jd.com.dao.user;
import jd.com.service.serFindByIdImpl; import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import javax.annotation.Resource; public class testDemo { @Test
public void test1(){
ApplicationContext ap=new ClassPathXmlApplicationContext("applicationContext.xml");
serFindByIdImpl serv= (serFindByIdImpl) ap.getBean("serv");
user us=serv.serFindById();
System.out.println(us); }
}

三 、配置文件

applicationContext.xml 加入mapper的包的动态扫描

     <!--开启mapper包扫描-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" >
<property name="basePackage" value="jd.com.dao" />
</bean>

需要使用类:MapperScannerConfigurer在spring和mybaits整合的包里。

需要配置属性basepack  需要扫描mapper.xml配置文件的包的目录,如果有多个mapper文件的话,可以在value出以逗号隔开写多个包。

配置了上面配置  不需要在SqlMapConfig.xml写入引入的文件。否则会加载2次。

 <?xml version="1.0" encoding="UTF-8"?>
<!--总的约束-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<!--加载配置文件,定义的properites文件
引入外部文件使用classpath关键字。
--> <context:component-scan base-package="jd.com" />
<aop:aspectj-autoproxy /> <context:property-placeholder location="classpath:/db.properties" />
<!--定义数据库连接池-->
<bean id="basicDataSource" class="org.apache.commons.dbcp2.BasicDataSource" >
<!--支持el表达式-->
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxTotal" value="" />
<property name="maxIdle" value="" />
</bean>
<!--配置mapper
其中:org.mybatis.spring.SqlSessionFactoryBean 是SqlSessionFactory的实现类,该类在mybatis-spring.1.2..jar里。
-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--依赖DataSource-->
<property name="dataSource" ref="basicDataSource"/>
<!--加载mybaits的配置文件-->
<property name="configLocation" value="classpath:SqlMapConfig.xml" />
</bean>
<!--开启mapper包扫描-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" >
<property name="basePackage" value="jd.com.dao" />
</bean> </beans>

子配置文件:需要namespace、id、parameterType、resultType要和接口的保持一致。

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--和主配置文件约束是不一样的-->
<mapper namespace="jd.com.dao.trDao">
<select id="findUserByName" parameterType="int" resultType="jd.com.dao.user" >
SELECT * FROM username WHERE id=#{id};
</select>
</mapper>

四:探讨

  1、这个时候SqlMapConfig 文件是空的。可以去掉 在applicationContext.xml文件中添加mapper文件改为实际的子mapper配置文件路径 这个是错误的,因为如果有多个mapper文件咋办????

  2、mybaits的使用的动态代理 被代理的接口的,的动态代理对象的id是接口的名称的首字母小写。

JAVA框架 Spring 和Mybatis整合(动态代理)的更多相关文章

  1. JAVA框架 Spring 和Mybatis整合(传统dao)

    一:我们使用spring处理service,mybaits处理dao层. 二:导入jar包 pom.xml文件内容: <?xml version="1.0" encoding ...

  2. 我的第九个java程序--spring和mybatis整合(java project)

    思路:入口程序读spring的配置文件-配置文件注入给程序bean--程序拿到bean以操作对象的手法查出程序 入口程序HelloWorld.java package HelloWorld; impo ...

  3. Mybatis学习--spring和Mybatis整合

    简介 在前面写测试代码的时候,不管是基于原始dao还是Mapper接口开发都有许多的重复代码,将spring和mybatis整合可以减少这个重复代码,通过spring的模板方法模式,将这些重复的代码进 ...

  4. 九 spring和mybatis整合

    1       spring和mybatis整合 1.1     整合思路 需要spring通过单例方式管理SqlSessionFactory. spring和mybatis整合生成代理对象,使用Sq ...

  5. Mybatis学习(7)spring和mybatis整合

    整合思路: 需要spring通过单例方式管理SqlSessionFactory. spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession.(spr ...

  6. MyBatis学习七:spring和MyBatis整合

    <\mybatis\day02\16mybatis和spring整合-sqlSessionFactory配置.avi;> MyBatis学习七:spring和MyBatis整合.逆向工程 ...

  7. 框架篇:Spring+SpringMVC+Mybatis整合开发

    前言: 前面我已搭建过ssh框架(http://www.cnblogs.com/xrog/p/6359706.html),然而mybatis表示不服啊. Mybatis:"我抗议!" ...

  8. Java基础-SSM之Spring和Mybatis整合案例

    Java基础-SSM之Spring和Mybatis整合案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   在之前我分享过mybatis和Spring的配置案例,想必大家对它们的 ...

  9. Spring与Mybatis整合的MapperScannerConfigurer处理过程源码分析

    前言 本文将分析mybatis与spring整合的MapperScannerConfigurer的底层原理,之前已经分析过java中实现动态,可以使用jdk自带api和cglib第三方库生成动态代理. ...

随机推荐

  1. IE8中jQuery.load()加载页面不显示的原因

    一.jQuery.load() jQuery.load(url,[data],[callback])通过Ajax异步请求加载服务器中的数据,并把数据放到指定元素中. url :请求服务器的地址 dat ...

  2. python-责任链模式

    源码地址:https://github.com/weilanhanf/PythonDesignPatterns 说明: 当你作为一名coder已经快三十却还还没有女朋友,家中父母已经着急万分,此时要求 ...

  3. HttpWatch HttpWatch时间表(HttpWatch Time Charts)

    HttpWatch时间表(HttpWatch Time Charts) by:授客 QQ:1033553122 截图 说明 页面事件线(Page Event Lines)

  4. Java实现后缀表达式建立表达式树

    概述 表达式树的特点:叶节点是操作数,其他节点为操作符.由于一般的操作符都是二元的,所以表达式树一般都是二叉树. 根据后缀表达式"ab+cde+**"建立一颗树 文字描述: 如同后 ...

  5. url override and HttpSession implements session for form

    url 重写结合HttpSession实现会话管理之 form 提交 package com.test; import javax.servlet.ServletException; import j ...

  6. springcloud 入门 4 (rebbon源码解读)

    Ribbon: ribbon是springcloud个服务之间调用的一种实现方式:主要提供了客户端的负载均衡.feign集成了Ribbon(下节介绍) 源码分析: 1> 源码入口 @LoadBa ...

  7. centos安装pip3

    安装pip3 1:安装依赖 yum install openssl-devel -y yum install zlib-devel -y 2:安装setuptools wget --no-check- ...

  8. Mongodb集群与分片 2

    前面我们介绍了简单的集群配置实例.在简单实例中,虽然MongoDB auto-Sharding解决了海量存储问题,和动态扩容问题,但是离我们在真实环境下面所需要的高可靠性和高可用性还有一定的距离. 下 ...

  9. Python之密度聚类

    # -*- coding: utf-8 -*- """ Created on Tue Sep 25 10:48:34 2018 @author: zhen "& ...

  10. 如何在 Azure 门户中将托管数据磁盘附加到 Windows VM

    本文介绍了如何通过 Azure 门户将新的托管数据磁盘附加到 Windows 虚拟机. 在开始之前,请查看以下提示: 虚拟机的大小决定了可以附加多少个磁盘. 有关详细信息,请参阅虚拟机大小. 对于新磁 ...