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 制作一个 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)
}
我不明白怎么了。有任何例子如何实现这一点?我想在任何地方执行我的查询,而无需不断初始化会话、数据源等。提前致谢