声明使用 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);
}
}
运行如下: