Spring--JDBCTemplate使用的问题
使用JDBCTemplate
首先创建一个Dao接口和实现类,添加注解创建对象,然后创建一个数据库表和实体类
创建service层代码,并注入Dao接口的bean对象,调用接口方法
配置文件中【有错】
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="xlw.com.jdbcTemplate"></context:component-scan> <context:property-override location="classpath:jdbc.properties"></context:property-override> <bean id="jdbc" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${druid.DriverClassname}"></property> <property name="url" value="${druid.url}"></property> <property name="username" value="${druid.username}"></property> <property name="password" value="${druid.password}"></property> </bean> <!--创建JDBCTemplate bean对象--> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="jdbc"></property> </bean> </beans>
Dao中
@Component public interface UserDao { void add(User user); }
DaoImpl中
@Repository public class UserDaoImpl implements UserDao { @Autowired private JdbcTemplate jdbcTemplate; @Override public void add(User user) { String sql = "insert into o_User values (?,?,?)"; int update = jdbcTemplate.update(sql, null, user.getUsername(), user.getPassword()); System.out.println(update); } }
Service中【没建立接口】
@Service public class UserService { @Autowired private UserDao userDao; public void addUser(User user){ userDao.add(user); } }
随便建一个测试类
ApplicationContext context = new ClassPathXmlApplicationContext("hao.xml"); @Test public void testJDBCTemplate(){ UserService userService = context.getBean("userService", UserService.class); User user = new User(); user.setUsername("老王"); user.setPassword("123abc"); System.out.println(user.getPassword()); userService.addUser(user); }
问题出现了,本来输出一个影响行数但是报错了
Could not process key 'url' in PropertyOverrideConfigurer; nested exception is org.springframework.beans.factory.BeanInitializationException: Invalid key 'url': expected 'beanName.property'
这种的还有另一种说是jdbcTemplate建立的bean找不到,或者创建DaoImpl的bean出错,还有就是说表达式指向的内容找不到。其实这都是借口,问题是这个【DruidDataSource】类的bean对象的id他在上面叫jdbc,现在我改成了druid,然后在JDBCTemplate中注入这个bean就行,他就行了。神奇吧,神奇死了。
他半天一直在叫找不到jdbc这个bean在哪里,过一会又叫找不到druid这个bean在哪里。
<context:component-scan base-package="xlw.com.jdbcTemplate"></context:component-scan> <context:property-override location="classpath:jdbc.properties"></context:property-override> <bean id="druid" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="url" value="${druid.url}"></property> <property name="username" value="${druid.username}"></property> <property name="password" value="${druid.password}"></property> <property name="driverClassName" value="${druid.driverClassName}"></property> </bean> <!--创建JDBCTemplate bean对象--> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="druid"></property> </bean>
这时jdbc.properties文件【名字就叫这个】,mysql是8.0.21版本,可以自己去找对应的8.0.21的驱动jar包
druid.driverClassName=com.mysql.cj.jdbc.Driver druid.url=jdbc:mysql://localhost:3308/o_user?characterEncoding=utf8&useSSL=true&serverTimezone=UTC druid.username=root druid.password=123456

浙公网安备 33010602011771号