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文件存放在该目录下。
网友评论