美文网首页
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