当前位置: 代码网 > it编程>编程语言>Java > Spring整合Mybatis方式之注册映射器

Spring整合Mybatis方式之注册映射器

2024年05月20日 Java 我要评论
前置工作导包(mybatis-spring、mysql-connector-java、mybatis、spring-webmvc等)实体类dao层两个文件(接口、xml文件);service层的接口编

前置工作

  • 导包(mybatis-spring、mysql-connector-java、mybatis、spring-webmvc等)

  • 实体类

  • dao层两个文件(接口、xml文件);service层的接口

编写spring管理mybatis的xml-spring-dao.xml

核心代码(两种方式实现)

第一种:xml

<!-- 将会话工厂对象托管给spring -->
<bean id="sqlsessionfactory" class="org.mybatis.spring.sqlsessionfactorybean">
  <property name="datasource" ref="datasource" />
  <!--  配置mybatis的全局配置文件:mybatis-config.xml -->
  <property name="configlocation" value="classpath:mybatis-config.xml"/>
  <property name="mapperlocations" value="classpath:com/ylzl/mapper/*.xml"/>
</bean>
<!-- 注册映射器:将映射器接口托管到spring中 -->
<bean id="usermapper" class="org.mybatis.spring.mapper.mapperfactorybean">
  <property name="sqlsessionfactory" ref="sqlsessionfactory" />
  <property name="mapperinterface" value="com.ylzl.mapper.usermapper" />
</bean>
<!--    mapperfactorybean对象 负责 sqlsession 的创建和关闭,
如果使用了 spring 事务,当事务完成时,session 将会被提交或回滚。
最终任何异常都会被转换成 spring 的 dataaccessexception 异常-->
<!--    mybatis映射器接口(如:interface usermapper):sql部分可以使用mybatis的xml配置,与接口在同一路径下,会被 mapperfactorybean自动解析-->

第二种:annotation方式

@bean
public sqlsessionfactory sqlsessionfactory() throws exception {
  sqlsessionfactorybean factorybean = new sqlsessionfactorybean();
  factorybean.setdatasource(datasource());
  return factorybean.getobject();
}
@bean
public mapperfactorybean<usermapper> usermapper() throws exception {
    mapperfactorybean<usermapper> factorybean = new mapperfactorybean<>(usermapper.class);
    factorybean.setsqlsessionfactory(sqlsessionfactory());
    return factorybean;
}

完整xml文件

<?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemalocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
    <context:annotation-config/>
<!--    使用spring配置datasource 相当于mybatis配置文件的<environments>-->
<!--    需要spring-jdbc包-->
    <bean id="datasource" class="org.springframework.jdbc.datasource.drivermanagerdatasource">
        <property name="driverclassname" value="com.mysql.jdbc.driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/ssmbuild"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>
<!--    配置sqlsessionfactorybean 等同于sqlsessionfactory
        做读取数据源以及注册mapper.xml的工作-->
<!-- sqlsessionfactorybean会调用类中的getobject()方法,返回sqlsessionfactory-->
    <bean id="sqlsessionfactory" class="org.mybatis.spring.sqlsessionfactorybean">
        <property name="datasource" ref="datasource"/>
        <property name="mapperlocations" value="classpath:com/ylzl/mapper/bookmapper.xml"/>
    </bean>
<!--    获得mapper代理对象 等同于getmapper()-->
    <bean id="bookmapper" class="org.mybatis.spring.mapper.mapperfactorybean">
        <property name="sqlsessionfactory" ref="sqlsessionfactory" />
        <property name="mapperinterface" value="com.ylzl.mapper.bookmapper" />
    </bean>
<!--    注册employeeserviceimpl-->
    <bean id="bookserviceimpl" class="com.ylzl.service.impl.bookserviceimpl"/>
</beans>

重新编写service实现类

public class bookserviceimpl implements bookservice{
    private bookmapper bookmapper;
    @autowired //需要spring-aop包
    public bookserviceimpl(bookmapper bookmapper) {
        this.bookmapper = bookmapper;
    }
    @override
    public book getbookbyid(integer bookid) {
        return bookmapper.getbookbyid(bookid);
    }
}

测试

applicationcontext context=new classpathxmlapplicationcontext("spring-dao.xml");
bookservice bookserviceimpl = context.getbean("bookserviceimpl", bookservice.class);
book book = bookserviceimpl.getbookbyid(2);
system.out.println(book);

改进注册映射器方式:使用发现映射器方式

mapperfactorybean注册映射器的最大问题,就是需要一个个注册所有的映射器,而实际上mybatis-spring提供了扫描包下所有映射器接口的方法。

注意:以下两种配置方法,均可替换上述mapperfactorybean配置,而其余代码与配置不变

方式一: 配置扫描器标签

1.与上面配置mapperfactorybean不同,该配置无需注入sqlsessionfactory,它会自动匹配已有的会话工厂bean

2.如果配置了多个datasource,也就是多个sqlsessionfactory时,可以使用factory-ref参数指定需要的会话工厂

<mybatis:scan base-package="com.ylzl.dao" factory-ref="sqlsessionfactory" />
<!-- annotation方式-注解配置类:
@mapperscan(basepackages = "com.ylzl.dao", sqlsessionfactoryref = "sqlsessionfactory") -->
<!-- 省略其他... -->

方式二: mapperscannerconfigurer类

1.与上面标签的功能差不多,同样是扫描基准包,自动注入会话工厂

2.如果要更换注入的会话工厂,不同于常用的ref引入bean,而是使用value指定bean名,且属性是sqlsessionfactorybeanname

<bean class="org.mybatis.spring.mapper.mapperscannerconfigurer">
     <property name="basepackage" value="com.ylyl.mapper" />
     <property name="sqlsessionfactorybeanname" value="sqlsessionfactory" />
</bean>

annotation方式

@bean
public mapperscannerconfigurer mapperscannerconfigurer() {
    mapperscannerconfigurer mapperscannerconfigurer = new mapperscannerconfigurer();
    mapperscannerconfigurer.setbasepackage("com.ylzl.dao");
    mapperscannerconfigurer.setsqlsessionfactorybeanname("sqlsessionfactory");
    return mapperscannerconfigurer;
}

图片:

到此这篇关于spring整合mybatis方式之注册映射器 的文章就介绍到这了,更多相关spring整合mybatis方式内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com