Попытка сделать шаблон дао для 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. Заранее спасибо