聲明使用 spring5.0.7 版本,JDK8
使用純注解的方式 完成 crud ,首先以查詢所有的使用者資訊為例,進行純注解測試:
子工程的目錄結構如下:
1、準備工作:建立目錄結構,配置pom.xml;導入依賴以及jdbc.properties 、log4j.properties ;
2、完成資料庫 table 建立,資料準備;
3、建立 SpringConfig 和 JdbcConfig 配置類;完成 domain、dao、service、以及實作類;
4、建立測試類,完成spring整合Junit ;
5、測試;
資料庫表如下:
實體類;
package com.baidu.domain;
/**
* @auther SyntacticSugar
* @data 2018/11/7 0007下午 8:19
*/
public class Customer {
private Long cust_id;
private String cust_name;
private String cust_source;
private String cust_industry;
private String cust_level;
private String cust_address;
private String cust_phone;
// get set tostring
......
}
JdbcConfig配置類:
package com.baidu.config;
import javax.sql.DataSource;
/**
* @auther SyntacticSugar
* @data 2018/11/7 0007下午 9:38
* @PropertySource 引入jdbc.properties
* @Configuration 聲明這是一個配置類
*/
@PropertySource("classpath:jdbc.properties")
@Configuration
public class JdbcConfig {
// @value 注入字段,字段指派
@Value("${jdbc.driverClass}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
// @Bean 隻能作用在method上,name指定id
@Bean(name = "dataSource")
public DataSource createDataSource(){
DruidDataSource source = new DruidDataSource();
source.setDriverClassName(driver);
source.setUrl(url);
source.setUsername(username);
source.setPassword(password);
return source;
}
@Bean
public JdbcTemplate getJdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
CustomerConfig配置類:
package com.baidu.config;
/**
* @auther SyntacticSugar
* @data 2018/11/7 0007下午 9:35
*/
// @ComponentScan 掃包
//@Import 把JdbcConfig 配置類導入 SpringConfig 主配置類;
@Configuration
@ComponentScan(basePackages = "com.baidu")
@Import(JdbcConfig.class)
public class SpringConfig {
}
dao層,以及daoImpl實作類:
// dao層接口
public interface CustomerDao {
List<Customer> findAll();
}
// daoImpl實作類
/**
* @auther SyntacticSugar
* @data 2018/11/7 0007下午 8:27
* 注解 @Repository("customerDao") 作用于持久層,指定id為customerDao
*/
@Repository("customerDao")
public class CustomerDaoImpl implements CustomerDao {
//@Autowired 屬性注入,提供setter方法
@Autowired
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Override
public List<Customer> findAll() {
List<Customer> list = jdbcTemplate.query("select * from cst_customer", new BeanPropertyRowMapper<>(Customer.class));
return list;
}
}
service層,以及 serviceImpl實作類:
/**
* @auther SyntacticSugar
* @data 2018/11/7 0007下午 8:24
*/
public interface CustomerService {
List<Customer> findAllCustomer();
}
// serviceImpl實作類 如下
/**
* @auther SyntacticSugar
* @data 2018/11/7 0007下午 8:26
* 注解 @Service 作用于業務邏輯層
*/
@Service("customerService")
public class CustomerServiceImpl implements CustomerService {
@Autowired
private CustomerDao customerDao;
//注入dao,提供setter 方法
public void setCustomerDao(CustomerDao customerDao) {
this.customerDao = customerDao;
}
//調用dao層的方法
@Override
public List<Customer> findAllCustomer() {
List<Customer> all = customerDao.findAll();
return all;
}
}
單元測試:
/**
* @auther SyntacticSugar
* @data 2018/11/7 0007下午 9:49
* 使用全注解 完成查詢所有customer
*/
//@RunWith 以單元測試運作
// @ContextConfiguration 把配置類加載
@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration("classpath:applicationContext.xml")
@ContextConfiguration(classes = SpringConfig.class)
public class CustomerTest01 {
//要測試的目标,直接注入進來
@Autowired
private CustomerService customerService;
@Test
public void test(){
List<Customer> allCustomer = customerService.findAllCustomer();
System.out.println(allCustomer);
}
}
運作如下: