1.1 Directorio de proyectos
1.2 Ejemplo de código
Clase de entidad de cliente
package cn.guardwhy.domain;
/**
* 客户实体类
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Customer {
// 成员变量
private Long custId;
private String custName;
private String custSource;
private String custIndustry;
private String custLevel;
private String custAddress;
private String custPhone;
}
Mapeo del conjunto de resultados
package cn.guardwhy.resources;
import cn.guardwhy.domain.Customer;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
public class CustomerRowMapper implements RowMapper<Customer> {
/**
* 结果集映射的方法:
* 结果集中的每一行记录,都会调用一次该方法
*/
public Customer mapRow(ResultSet rs, int index) throws SQLException{
// 创建客户对象
Customer customer = new Customer();
customer.setCustId(rs.getLong("cust_id"));
customer.setCustName(rs.getString("cust_name"));
customer.setCustSource(rs.getString("cust_source"));
customer.setCustIndustry(rs.getString("cust_industry"));
customer.setCustLevel(rs.getString("cust_level"));
customer.setCustAddress(rs.getString("cust_address"));
customer.setCustPhone(rs.getString("cust_phone"));
return customer;
}
}
Dao de la capa de persistencia
CustomerDao
package cn.guardwhy.dao;
import cn.guardwhy.domain.Customer;
import java.util.List;
public interface CustomerDao {
/**
* 查询全部客户
*/
List<Customer> findAllCustomers();
}
CustomerDaoImpl
package cn.guardwhy.dao.impl;
import cn.guardwhy.dao.CustomerDao;
import cn.guardwhy.domain.Customer;
import cn.guardwhy.resources.CustomerRowMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 客户dao实现类
*/
@Repository("customerDao")
public class CustomerDaoImpl implements CustomerDao {
// 定义JdbcTemplate
@Autowired
private JdbcTemplate jdbcTemplate;
/**
* 查询全部客户列表
*/
@Override
public List<Customer> findAllCustomers() {
// 定义sql
String sql = "select t.cust_id, t.cust_name, t.cust_source, "+
"t.cust_industry, t.cust_level, t.cust_address, t.cust_phone "+
"from cst_customer t";
// 执行查询操作
List<Customer> list = jdbcTemplate.query(sql, new CustomerRowMapper());
return list;
}
}
Servicio de capa empresarial
Servicio al Cliente
package cn.guardwhy.service;
import cn.guardwhy.domain.Customer;
import java.util.List;
/**
* 客户service接口
*/
public interface CustomerService {
/**
* 查询全部客户列表
*/
List<Customer> findAllCustomers();
}
CustomerServiceImpl
package cn.guardwhy.service.impl;
import cn.guardwhy.dao.CustomerDao;
import cn.guardwhy.domain.Customer;
import cn.guardwhy.service.CustomerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 客户service实现类
*/
@Service("customerService")
public class CustomerServiceImpl implements CustomerService {
// 定义客户dao
@Autowired
private CustomerDao customerDao;
/**
* 查询全部客户的列表
*/
@Override
public List<Customer> findAllCustomers() {
return customerDao.findAllCustomers();
}
}
Clase de configuración de anotación
SpringConfiguration
package cn.guardwhy.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
/**
* @Configuration:这个也会交给Spring容器托管,注册到容器中。因为他本来就是一个@Component
* 它代表一个配置类,就和我们之前看到的beans.xml
*/
@Configuration
@ComponentScan(value = {
"cn.guardwhy"}) // @ComponentScan:配置扫描包。相当于xml配置中<context:component-scan/>标签
public class SpringConfiguration {
/**
* @Bean: 注册一个bean,就相当于xml的一个bean标签。
* 这个方法的名字,相当于bean标签中的id属性。
* 这个方法的返回值,就相当于bean标签中的class属性。
*/
@Bean(value = "jdbcTemplate")
public JdbcTemplate createJdbcTemplate(DataSource dataSource){
// 创建JbdcTemplate对象
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource);
return jdbcTemplate; // 就是返回要注入到bean的对象中
}
/**
* 配置数据源对象DateSource
*/
@Bean(value = "dataSource")
public DataSource createDataSource(){
// 创建DataSource
DruidDataSource dataSource = new DruidDataSource();
// 注入属性
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/spring");
dataSource.setUsername("root");
dataSource.setPassword("root");
dataSource.setInitialSize(6);
dataSource.setMinIdle(3);
dataSource.setMaxActive(50);
dataSource.setMaxWait(60000);
dataSource.setTimeBetweenEvictionRunsMillis(60000);
return dataSource;
}
}
Capa de presentación (controlador)
CustomerController
package cn.guardwhy.controller;
import cn.guardwhy.config.SpringConfiguration;
import cn.guardwhy.domain.Customer;
import cn.guardwhy.service.CustomerService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
/**
* 客户表现层
*/
public class CustomerController {
public static void main(String[] args) {
// 1.如果完全使用了配置类方式去做,只能通过AnnotationConfig 上下文来获取容器,通过配置类的class对象加载。
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class);
// 2.获取客户service对象
CustomerService customerService = (CustomerService) context.getBean("customerService");
// 3.查询全部客户列表数据
List<Customer> list = customerService.findAllCustomers();
// 4.遍历操作
for(Customer customer : list){
System.out.println(customer);
}
}
}