[英]Connecting Spring Boot JDBCTemplate to SQL Server (MSSQL)
我是Spring Boot的新手,我在嘗試設置我的項目時遇到了麻煩,因此它可以與SQL Server進行通信 - 更具體地說,我的JDBCTemplate實例變量為null,並且由於某種原因沒有'自動裝配'我在application.properties文件中指定的數據源。 這些是我到目前為止采取的步驟:
我將首先顯示我的'application.properties'文件的內容:
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=testdb
spring.datasource.username=sa
spring.datasource.password=myPassword
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerConnection
spring.datasource.initialize=true
下面是我的'JDBCTemplate.java'類,其中包含我的CRUD方法:
package demo;
import java.util.List;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
public class BranchJDBCTemplate implements BranchDAO {
private DataSource dataSource;
@Autowired
protected JdbcTemplate jdbcTemplateObject;
@Autowired
@Override
public void setDataSource(DataSource ds) {
this.dataSource = ds;
this.jdbcTemplateObject = new JdbcTemplate(dataSource);
}
@Override
public void create(String name) {
String SQL = "insert into branches (name) values (?)";
jdbcTemplateObject.update(SQL, name);
System.out.println("Created Record Name = " + name);
return;
}
@Override
public Branch getBranch(Integer id) {
String SQL = "select * from branches where id = ?";
Branch student = jdbcTemplateObject.queryForObject(SQL,
new Object[]{id}, new BranchMapper());
return student;
}
@Override
public List<Branch> listBranches() {
String SQL = "select * from branches";
List <Branch> branches = jdbcTemplateObject.query(SQL, new BranchMapper());
return branches;
}
@Override
public void delete(Integer id) {
String SQL = "delete from branches where id = ?";
jdbcTemplateObject.update(SQL, id);
System.out.println("Deleted Record with ID = " + id );
return;
}
@Override
public void update(Integer id, String name) {
String SQL = "update Student set name = ? where id = ?";
jdbcTemplateObject.update(SQL, id);
System.out.println("Updated Record with ID = " + id );
return;
}
}
最后,這是我的'CustController.java'類,它包含請求映射,其中我使用JDBCTemplate類來執行數據庫操作:
package demo;
import java.util.List;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CustController {
@RequestMapping("/customer")
public Cust customer(@RequestParam(value="name", required=false, defaultValue="World") String name) {
BranchJDBCTemplate branchTemplate = new BranchJDBCTemplate();
List<Branch> branchesList = branchTemplate.listBranches();
for (Branch branch : branchesList) {
System.out.print("ID : " + branch.getId());
}
return new Cust(12, "Test", "Test");
}
}
我之前提到的問題是我的jdbcTemplateObject實例......
protected JdbcTemplate jdbcTemplateObject;
為null,因此在以下行中拋出異常:
List <Branch> branches = jdbcTemplateObject.query(SQL, new BranchMapper());
它沒有自動初始化,任何人都可以指出我做錯了什么?
非常感謝!
托尼
你是對的,你需要在其中配置帶有數據源的beans.xml。
在CustController類customer()方法中,您使用new運算符:
BranchJDBCTemplate branchTemplate = new BranchJDBCTemplate();
所以這個branchTemplate實例不是spring manged因此數據源不是自動裝配的,因此導致jdbctemplate的null值。
而是使用annotatioan作為:
@Repository("branchDao")
public class BranchJDBCTemplate implements BranchDAO {
...
}
並在CustController中訪問branchTemplate:
@RestController
public class CustController {
@Autowired
@Qualifier("branchDao")
BranchJDBCTemplate branchTemplate;
...
}
嘗試在application.properties文件中使用以下內容
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=testdb;integratedSecurity=false;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.