我在Java Spring中创建了一个简单的应用程序,它应该读取和写入具有两个varchar字段的数据库。
package learn.spring.example.dao;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
@Component
public class PersonStoreDao implements PersonInter{
@Autowired
private JdbcTemplate jdbc;
public Long saveData(Person person){
final String querySample="insert into PersonName(first_name, last_name) values (?, ?)";
jdbc.update(new PreparedStatementCreator() {
public PreparedStatement prepStatement(Connection c) throws SQLException {
PreparedStatement prep = c.prepareStatement(querySample);
prep.setString(1, person.getFirstName());
prep.setString(2, preson.getSecondName());
return prep;
}
,key}
}
}
Class Person只是一个简单的bean类,PersonName是来自数据库的表,有两个字段。我有几个问题。
第一个问题是,如果出现问题
在jdbc变量和@Component前使用@Autowired有什么影响?
如何在与此项目相关的xml文件中正确嵌入?
我可以连接到数据库,但不能写它。应该做什么才能使数据库不仅被读取而且还被写入?
答案 0 :(得分:1)
在jdbc变量和@Component前使用@Autowired有什么影响?
这使得基于Spring注释的布线处理器意识到这是一个需要连接的类,并且应该将值注入jdbc
变量。
如何在与此项目相关的xml文件中正确嵌入?
可以。接线由注释处理器完成。据推测,它会注入一个你在XML文件中声明的类型为JdbcTemplate
的bean。
我可以连接到数据库,但不能写它。应该做什么才能使数据库不仅被读取而且还被写入?
您没有向我们展示XML,但我怀疑问题就在那里。据推测,您已经使用DataSource指定了一个JdbcTemplate bean,并且DataSource正在连接到仅允许读取访问的数据库帐户。如果是这种情况,您需要使用其他数据库帐户,或者授予您正在使用的帐户所需的访问权限。
答案 1 :(得分:1)
@AutoWired是定义当前bean所需的其他bean的注释方式。例如,请查看以下内容;
<bean id="person" class="com.Person">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="myDataSource" />
</bean>
如您所见,我们必须在Person类中定义一个ref bean。但是当我们使用@AutoWired时,我们可以消除这种情况,因为jdbcTemplate会自动注入Person类。
你需要注意的一件事是,如果你试图通过接口类型自动连接并且你的应用程序有很多实现,那么你应该使用@Qualifier的概念来告诉Spring你实现哪个版本的实现想要注入你当前的bean。
对于@Component,通过将bean定义为@Component,您可以告诉Spring容器扫描注释带注释的所有bean,并使它们在Spring Context中可用。通过这样做,您不必在XML文件中定义您的bean。有关@Component和@Configuration的更多或更少相似的更多信息可以在以下thread中找到。
关于无法连接到数据库的问题,请提供您正在使用的当前应用程序上下文XML文件,以便我们了解如何连接JDBCTemplate。