Mybatis dao 模式不是自动装配字段

Mybatis dao pattern not autowiring field

正在尝试为 mybatis 和 spring 制作一个 dao 模式。想在我想要的任何地方使用这个 sql 查询,只需使用依赖注入。 当我尝试使用此方法 (.getMaxId()) 时,它给了我 "Null pointer exception"。 为什么字段 SqlSession 不是自动装配(给出空值)? Intellige idea将该领域列为候选 自动装配。

我认为有 3 个步骤可以实现:

1) 自动装配会话

2) 从会话中获取映射器

3) 从此映射器执行查询

我这样做

@Autowired
 private Student_mapper sm;

sm.getMaxId();

服务

@Service
@Transactional
public class Student_mapperImpl {

    @Autowired
    private SqlSession session;

    @Autowired
    Student_mapper mapper = session.getMapper(Student_mapper.class);


    public Integer getMaxId() {

        Integer value = mapper.getMaxId();

        return value;
    }
}

Bean配置文件

 @org.springframework.context.annotation.Configuration
    @EnableTransactionManagement
    @ComponentScan
    public class DataSourceStudent_Mapper {

        @Bean
        public SqlSession getDataSource() {

         String user = "postgres";
         String password = "postgres";
         String databasenameURL = "jdbc:postgresql://localhost:5432/postgres";
         String dbDriver = "org.postgresql.Driver";
         DataSource dataSource = new org.apache.ibatis.datasource.pooled.PooledDataSource(
                 dbDriver, databasenameURL, user, password);
         TransactionFactory transactionFactory = new JdbcTransactionFactory();
         Environment environment = new Environment("development",
                 transactionFactory, dataSource);
         Configuration configuration = new Configuration(environment);
         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                 .build(configuration);
         SqlSession session = sqlSessionFactory.openSession();
         session.getConfiguration().addMapper(Student_mapper.class);

        return session;
        }
    }

Student_mapper - 查询界面

@Repository
public interface Student_mapper {
    @Select("select max(id) from student")
    @Result(property = "id", column = "ID")
    Integer getMaxId();
}

实体

public class Student {
    private int id;
    private String name;
    private String branch;
    private int percentage;
    private int phone;
    private String email;
    //(setters,getters, allArgs constructor are ommited)
}

我不明白怎么了。有任何例子如何实现这一点?我想在任何地方执行我的查询,而无需不断初始化会话、数据源等。提前致谢

mybatis-spring Getting Started 应该有用。