Mybatis dao pattern не поле для автоматической разводки - PullRequest
0 голосов
/ 02 марта 2020

Попытка сделать шаблон дао для mybatis и весны. Я хочу использовать эти sql запросы где угодно, просто используя внедрение зависимостей. Когда я пытаюсь использовать этот метод (.getMaxId ()), он дает мне «исключение нулевого указателя». Почему поле SqlSession не имеет автопроводки (дает ноль)? Идея Intellige показывает это поле как кандидатуру для автопроводки.

Я думаю, что есть 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;
    }
}

Файл конфигурации компонента

 @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();
}

Entity

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)
}

Я не понимаю, в чем дело. Есть какие-нибудь примеры, как это реализовать? Я хотел бы выполнять свои запросы в любом месте без постоянной инициализации сеанса, источник данных и т. Д. c. Заранее спасибо

1 Ответ

1 голос
/ 02 марта 2020

mybatis-spring Начало работы должно быть полезно.

...