注意一些小细节,主要有三:
1、引入的依赖错误;
2、启动配置错误;
3、xml文件的mapper命名空间错误。
二、启动文件 Application.java
package com.example; import javax.sql.DataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; @Configuration //标注一个类是配置类,spring boot在扫到这个注解时自动加载这个类相关的功能,比如前面的文章中介绍的配置AOP和拦截器时加在类上的Configuration @EnableAutoConfiguration() //启用自动配置 该框架就能够进行行为的配置,以引导应用程序的启动与运行, 根据导入的starter-pom 自动加载配置 @EnableJpaRepositories(basePackages={"com.dao"}) //@EnableJpaRepositories(basePackages={"dao层对应的包路径"}) @ComponentScan(value={"com.*","com.dao"})//扫描组件 @ComponentScan(value = "com.spriboot.controller") 配置扫描组件的路径 @SpringBootApplication //@EntityScan("entity对应的包路径") @EntityScan("com.entity") @MapperScan("com.dao") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean @ConfigurationProperties(prefix="spring.datasource") public DataSource dataSource() { return new org.apache.tomcat.jdbc.pool.DataSource(); } @Bean public SqlSessionFactory sqlSessionFactoryBean() throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource()); PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/com/example/mapper/*.xml")); return sqlSessionFactoryBean.getObject(); } @Bean public PlatformTransactionManager transactionManager() { return new DataSourceTransactionManager(dataSource()); } } 注意3点:
1、在类上声明MapperScan,这是mybatis-spring-boot-starter在1.1.1引入的类Mapper,从而在mapper接口上不需要任何声明
2、配置dataSource、SqlSessionFactory、PlatformTransactionManager,其实默认的都已经配好,这里主要是为了标明Mapper的xml文件存在位置
3、src/main/resources下的文件,在打包之后,都在工程的根目录。
这个只需要更改两个地方:
1、MapperScan之后的"com.example.mapper",改成Mapper接口文件所在的包名
2、sqlSessionFactoryBean方法中"classpath:/mybatis/*.xml",改成Mapper的xml文件存在位置
三、启动配置文件 application.properties
spring.datasource.url=jdbc:mysql://192.168.1.206:3306/test1?useUnicode=true&characterEncoding=UTF-8 spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.max-active=10 spring.datasource.max-idle=5 spring.datasource.min-idle=0 四、Mapper的XML文件 <?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="com.dao.PersonDao"> <!-- 根据ID查询数据 --> <select id="findAll" parameterType="String" resultType="com.entity.Person"> select * from Person </select> </mapper> 与普通的mybatis配置一样,只是小心:
1、mapper的命名空间(namespace),一定是所对应的接口的包名+类名
2、parameterType和resultMap,与实际匹配
五、接口文件
package com.dao; import java.util.List; import com.entity.Person; public interface PersonDao { public List<Person>findAll(); } 可以运行跑下了...