一、使用传统方式的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. HDU4845(SummerTrainingDay02-C 状态压缩bfs)

    拯救大兵瑞恩 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Subm ...

  2. PHP定界符<<<eof 使用

    PHP是一个Web编程语言,在编程过程中难免会遇到用echo来输出大段的html和javascript脚本的情况,如果用传统的输出方法 ——按字符串输出的话,肯定要有大量的转义符来对字符串中的引号等特 ...

  3. windows安装mysql数据库

    一.下载安装包.进入mysql官网https://www.mysql.com/ 二.打开安装包安装 以上步骤直接点击next即可,遇到配置密码就配置下

  4. VS2017写代码时几个常用的快捷键

    说明:组合键是同时按,非组合键是按住Ctrl依次按后面的键1.格式化  格式化全部代码       Ctrl+A+K+F  格式化选中的代码     Ctrl+K+F 2.注释代码  注释代码    ...

  5. VBoxManage翕令

    VBoxManage list vms VBoxManage startvm dcsvr08 -type vrdp VBoxHeadless -startvm "dcsvr08" ...

  6. Python笔记(十三):urllib模块

    (一)      URL地址 URL地址组件 URL组件 说明 scheme 网络协议或下载方案 net_loc 服务器所在地(也许含有用户信息) path 使用(/)分割的文件或CGI应用的路径 p ...

  7. 判断exe是64位还是32位

    右击exe属性,查看兼容模式. 如果有windwos vista之前的版本则为32位的,如下图: 如果没有windwos vista之前的版本则为64位的,如下图:

  8. 使用redis 处理高并发场景

    1.原理: 当同一个用户获取锁之后,会让该用户一直持有锁.同样 的用户再次获取,会根据原子性 ,lock返回true. /** * 获取锁(非公平锁), 默认获取超时为2分钟 */ public bo ...

  9. python基础一数据类型之字典

    摘要: python基础一数据类型之一字典,这篇主要讲字典. 1,定义字典 2,字典的基础知识 3,字典的方法 1,定义字典 1,定义1个空字典 dict1 = {} 2,定义字典 dict1 = d ...

  10. axios的配置项

    最近在学习vue,涉及到axios的ajax操作,记录一下相关Config,方便日后查阅 { // `url`是将用于请求的服务器URL url: '/user', // `method`是发出请求时 ...