当前位置:   article > 正文

Javaee spring jdbctemplate查询数据库,基于纯注解实现_jdbctemplate使用注解怎末使用

jdbctemplate使用注解怎末使用

为啥要用纯注解方式呢?因为xml中代码还是有点多,纯注解可以解决该问题

现在要做的很简单,就是用新建的SpringConfig这个类去替代xml

在测试类中加载核心配置类
SpringConfig类中
@Configuratio   Spring.xml配置类
@ComponentScan  <!--开启注解扫描-->
@PropertySource <!--加载属性配置文件-->
<!--数据源-->
<!--JdbcTempalte层-->

@Bean注解

//@Bean注解的作用,将@Bean放到一个有返回值为的方法上面,@Bean注解会将该方法的返回值放到ioc容器中,拿这个数据的时候要通过id找他。可自己指定id 格式:  @Bean("指定的id名字")

举个例子:创建一个返回值类型为DataSource的方法,此时@Bean注解会将该方法的返回值dataSource放到ioc容器中,当要使用dataSource,可通过指定的id

  1. @Bean("dataSource")
  2. public DataSource getDataSource() {
  3. ComboPooledDataSource dataSource=new ComboPooledDataSource();
  4. return dataSource;
  5. }

@Value注解:

Value注解的作用,是将资源文件中的数据,赋值给类中的成员属性

举个例子:此时,driver=com.mysql.cj.jdbc.Driver

  1. @Value("${jdbc.driver}")
  2. private String driver;

@Qualifier("id名")

@Qualifier("")的作用:多个数据源时,指定要用的数据源

jar包

项目结构:

源码:

SpringConfig
  1. package wwx.config;
  2. import com.mchange.v2.c3p0.ComboPooledDataSource;
  3. import org.springframework.beans.factory.annotation.Qualifier;
  4. import org.springframework.beans.factory.annotation.Value;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.context.annotation.ComponentScan;
  7. import org.springframework.context.annotation.Configuration;
  8. import org.springframework.context.annotation.PropertySource;
  9. import org.springframework.jdbc.core.JdbcTemplate;
  10. import javax.sql.DataSource;
  11. import java.beans.PropertyVetoException;
  12. @Configuration //加上@Configuration就相当于Spring.xml配置类
  13. @ComponentScan("wwx")
  14. @PropertySource("classpath:jdbc.properties")
  15. public class SpringConfig {
  16. @Value("${jdbc.driver}")
  17. private String driver;
  18. @Value("${jdbc.url}")
  19. private String url;
  20. @Value("${jdbc.username}")
  21. private String username;
  22. @Value("${jdbc.password}")
  23. private String password;
  24. //@Bean注解的作用,将@Bean放到一个返回值为DataSource的方法中,@Bean注解会将该方法的返回值放到ioc容器中,拿这个数据的时候
  25. //要通过id找他。可自己指定id 格式为@Bean("指定的id名字")
  26. // <!--数据源-->
  27. @Bean("dataSource")
  28. public DataSource getDataSource() throws Exception {
  29. ComboPooledDataSource dataSource=new ComboPooledDataSource();
  30. dataSource.setDriverClass(driver);
  31. dataSource.setJdbcUrl(url);
  32. dataSource.setUser(username);
  33. dataSource.setPassword(password);
  34. return dataSource;
  35. }
  36. //容器中有一个数据源了,当用到以下模板时,容器会自动注入该数据源
  37. //若容器中有多个数据源,可以在方法中添加注解@Qualifier("id名")指定要用的数据源
  38. @Bean("jdbcTemplate")
  39. public JdbcTemplate getJDBCTemplate(@Qualifier("dataSource") DataSource dataSource){
  40. JdbcTemplate jdbcTemplate=new JdbcTemplate();
  41. jdbcTemplate.setDataSource(dataSource);
  42. return jdbcTemplate;
  43. }
  44. }

jdbc.properties

  1. jdbc.driver=com.mysql.cj.jdbc.Driver
  2. jdbc.url=jdbc:mysql://localhost:3306/wwx?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&characterEncoding=utf-8
  3. jdbc.username=root
  4. jdbc.password=123456

JDBCTest

  1. package wwx.test;
  2. import org.junit.Test;
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.annotation.AnnotationConfigApplicationContext;
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;
  6. import wwx.config.SpringConfig;
  7. import wwx.dao.AccountDao;
  8. import wwx.domain.Account;
  9. import wwx.service.AccountService;
  10. import wwx.service.AccountServiceImpl;
  11. import java.util.List;
  12. public class JDBCTest {
  13. @Test
  14. public void test01()
  15. { //test中创建了一个业务层对象,用业务层对象调用业务层中的调用方法,
  16. // 此时业务层方法中创建了Dao对象,调用了Dao方法
  17. //这样写的话,类与类直接耦合度太高了,
  18. // 举个例子,假设Dao包下的AccountDaoImpl突然没有了,AccountServiceImpl中代码就会报错
  19. //该如何解决呢,使用Spring:解耦,降低类内之间的联系,
  20. //也就是不用在AccountServiceImpl中去new Dao ,让Spring去new,如果要用到,通过注入方式注入进来
  21. // AccountService accountService=new AccountServiceImpl();
  22. // accountService.findAll();
  23. //加载配置文件
  24. // ApplicationContext app=new ClassPathXmlApplicationContext("Spring.xml");
  25. //获得bean
  26. //spring容器中id唯一
  27. //加载核心配置类
  28. ApplicationContext app=new AnnotationConfigApplicationContext(SpringConfig.class);
  29. //需要强转
  30. AccountService accountService = (AccountService) app.getBean("accountService");
  31. //调用方法
  32. List<Account> list = accountService.findAll();
  33. System.out.println(list+"在test里输出的哦");
  34. //此时删除AccountServiceImpl,编译不会报错,但是无法运行,耦合不能消除,但能降低
  35. }
  36. }

AccountDaoImpl
  1. package wwx.dao;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.beans.factory.annotation.Qualifier;
  4. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  5. import org.springframework.jdbc.core.JdbcTemplate;
  6. import org.springframework.stereotype.Repository;
  7. import org.springframework.stereotype.Service;
  8. import wwx.domain.Account;
  9. import java.util.List;
  10. @Repository("accountDao")
  11. public class AccountDaoImpl implements AccountDao {
  12. //创建jdbcTemplate成员变量,及set方法
  13. @Autowired
  14. @Qualifier("jdbcTemplate")
  15. private JdbcTemplate jdbcTemplate;
  16. //使用注解不需要使用set方法,可把set方法注释掉
  17. //public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
  18. // this.jdbcTemplate = jdbcTemplate;
  19. // }
  20. //查询所有
  21. @Override
  22. public List<Account> findAll() {
  23. System.out.println("我是Dao...");
  24. // JdbcTemplate jdbcTemplate=new JdbcTemplate();
  25. // jdbcTemplate.query();不用这种方式
  26. List<Account> list
  27. = jdbcTemplate.query("select * from account", new BeanPropertyRowMapper<Account>(Account.class));
  28. return list;
  29. }
  30. }
AccountServiceImpl
  1. package wwx.service;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.beans.factory.annotation.Qualifier;
  4. import org.springframework.stereotype.Service;
  5. import wwx.dao.AccountDao;
  6. import wwx.dao.AccountDaoImpl;
  7. import wwx.domain.Account;
  8. import java.util.List;
  9. //在xml中<!--开启注解扫描-->
  10. // <context:component-scan base-package="wwx"></context:component-scan>
  11. //在类名上面添加@Servie注解,相当于spring.xml中的<bean id="accountService" class="wwx.service.AccountServiceImpl">
  12. //相当于在这个容器中创建有一个AccountServiceImpl这个类的对象,这个对象的id是类名首字母小写
  13. //如果想指定类名,格式为@Service("指定名字"),在AccountDaoImpl中,执行与这里相同步骤,不过注解为@Repository,此时已经实现配置
  14. //再接着进行注入,使用@Autowired注解,此注解是根据类型注入的,看容器中是否有这个接口类型配合使用@Qualifier
  15. //使用注解不需要使用set方法,可把set方法注释掉
  16. //此时实现我们自己写的类,用注解,jar包中的类用xml,将xml中的Service层,Dao层注释掉
  17. @Service("accountService")
  18. public class AccountServiceImpl implements AccountService {
  19. @Autowired //<property name="accountDao" ref="accountDao"></property>
  20. @Qualifier("accountDao")
  21. private AccountDao accountDao;//创建accountDao
  22. // public void setAccountDao(AccountDao accountDao) {
  23. // this.accountDao = accountDao;
  24. // }
  25. @Override
  26. public List<Account> findAll() {
  27. System.out.println("我是service...");
  28. // AccountDao accountDao=new AccountDaoImpl();
  29. List<Account> list = accountDao.findAll();
  30. return list;
  31. }
  32. }

AccountDao

  1. package wwx.dao;
  2. import wwx.domain.Account;
  3. import java.util.List;
  4. public interface AccountDao {
  5. //查询所有
  6. public List<Account> findAll();
  7. }

AccountService

  1. package wwx.service;
  2. import wwx.domain.Account;
  3. import java.util.List;
  4. public interface AccountService {
  5. //查询所有
  6. public List<Account> findAll();
  7. }

运行效果图: 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/576707
推荐阅读
相关标签
  

闽ICP备14008679号