美文网首页
Mybatis(三):使用mybatis-spring搭建myb

Mybatis(三):使用mybatis-spring搭建myb

作者: aix91 | 来源:发表于2019-05-15 11:38 被阅读0次

    1. 引入依赖

    • mybatis
    <dependency>
         <groupId>org.mybatis</groupId>
         <artifactId>mybatis</artifactId>
         <version>3.4.1</version>
    </dependency>
    
    • mybatis-spring
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>2.0.1</version>
    </dependency>
    
    • 数据源
            <dependency>
                <groupId>com.zaxxer</groupId>
                <artifactId>HikariCP</artifactId>
                <version>3.3.0</version>
            </dependency>
    
    • mysql 连接器
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.25</version>
            </dependency>
    
    • spring-jdbc
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>5.1.5.RELEASE</version>
            </dependency>
    

    2. 注入SqlSessionFactory

    mybatis-spring中SqlSessionFactory通过SqlSessionFactoryBean生成

    • 指定数据源
        <bean id="webgroup" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
            <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
            <property name="jdbcUrl" value="jdbc:mysql://${db.webgroup.host}:3306/${db.webgroup.database}"/>
            <property name="username" value="${db.webgroup.username}"/>
            <property name="password" value="${db.webgroup.password}"/>
            <property name="autoCommit" value="false"></property>
        </bean>
    
    • SqlSessionFactoryBean
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="webgroup"/>
        </bean>
    
    • MapperScannerConfigurer
      指定扫描mapper的位置(basePackage),指定并注入SqlSessionFactory
        <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.test.db.mapper"/>
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        </bean>
    

    3. 定义mapper

    MapperScannerConfigurer 只能扫描到basePackage下至少定义了一个方法的interface。

    • 定义mapper interface
    package com.test.db.mapper;
    @Mapper
    public interface TopicTagMapper {
    
        /**
         * @param code
         * @return
         */
        TopicTagDO getTagOnCode(@Param("code") String code);
    }
    
    • 定义mapper.xml
      注意得在resource,basePackage参数指定的目录下定义mapper.xml文件
    <mapper namespace="com.test.db.mapper.TopicTagMapper">
        <select id="getTagOnCode" resultType="com.testmodels.dos.TopicTagDO">
          select id,name,code,display_value as displayName
          from tb_seo_tag where code = #{code}
        </select>
    </mapper>
    

    4. Invalid bound statement (not found)

    运行mybatis程序时,容易出现bound的问题。主要原因有如下几点:

    • Mapper.java 和 Mapper.xml 文件命名是否一致
    • Mapper.xml 的 namespace 配置是否准确,接口方法名是否准确
    • 是否在一个包下,扫描能不能扫到 .xml

    通常情况下,会出现打包后,Mapper.java 和 Mapper.xml 不在同一个package下,那是因为idea默认是不编译 src\main\java下的xml文件。于是,我们可以将xml文件放在resource目录下:比如Mapper.java 的namespace是"com.test.db.mapper.TopicTagMapper", 那么在resource里创建一个"com.test.db.mapper.TopicTagMapper"目录,将Mapper.xml文件存放在该目录下。

    相关文章

      网友评论

          本文标题:Mybatis(三):使用mybatis-spring搭建myb

          本文链接:https://www.haomeiwen.com/subject/jhujjqtx.html