Template模版类的使用能大大简化开发过程,以下为常用的一些模板类介绍:
- RestTemplate
- JdbcTemplate
- MongoTemplate
- RedisTemplate
- *ElasticsearchTemplate
- 引申:HiveTemplate、HbaseTemplate、…
借助 RestTemplate,我们能够方便地使用REST资源,常用的方法有:
使用示例如下:
// 通过RestTemplate的post方法实现登录,并获取cookie
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap map = new LinkedMultiValueMap<>();
map.add("prama1", prama1);
map.add("prama2", prama2);
HttpEntity> request = new HttpEntity<>(map, headers);
ResponseEntity response = restTemplate.postForEntity(loginUrl, request, String.class);
List cookie = response.getHeaders().get("Set-Cookie");
logger.info("获得cookie : " + cookie);
JbbcTemplate在Spring框架中进行使用时,只需在properties文件中配置好连接,即可通过Autowire注解实现参数注入,properties文件配置如下:
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/db?characterEncoding=utf-8
spring.datasource.username=dev
spring.datasource.password=dev
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
示例代码如下:
@Autowired
private JdbcTemplate jdbc;
public List query(){
String sql = "select * from table where status = 1";
List list = jdbc.query(sql, new RowMapper(){
@Override
public Entity mapRow(ResultSet resultSet, int i) throws SQLException {
Entity Entity = new Entity();
Entity.setId(resultSet.getLong("id"));
Entity.setA(resultSet.getString("a"));
Entity.setB(resultSet.getString("b"));
Entity.setC(resultSet.getString("c"));
return Entity;
}
});
return list;
}
@Transactional
public int update(Entity entity){
String sql="update table set " +
"a = ? ," +
"b = ? , " +
"c = ? ," +
"where id = ?";
return jdbc.update(sql, new Object[] {
entity.getA(),
entity.getB(),
entity.getC(),
entity.getId()}
);
}
MongoTemplate在Spring框架中进行使用时,同样只需在properties文件中配置好连接,即可通过Autowire注解实现参数注入,properties文件配置如下:
spring.data.mongodb.host = 127.0.01
spring.data.mongodb.port = 27017
spring.data.mongodb.database = DEV
示例代码如下:
@Autowired
private MongoTemplate mongoTemplate;
public Map queryByGroup(Date fromDate){
Date date = DateUtil.getBenginOfToday(fromDate);
// 聚合查询 group by
Criteria query = Criteria.where("crawlerTime").gte(date);
GroupOperation groupOperation = Aggregation.group("channelID")
.count().as("count");
Aggregation agg = Aggregation.newAggregation(
BadOffline.class,Aggregation.match(query),groupOperation);
AggregationResults a = mongoTemplate.aggregate(
agg, Entity.class, Document.class);
Iterator iterator = a.iterator();
Map result = new HashMap<>();
while (iterator.hasNext()){
Document temp = iterator.next();
result.put(temp.get("_id").toString(),temp.get("count").toString());
// System.out.println("id====>" + temp.get("_id") + " count====>" + temp.get("count") );
}
return result;
}
RedisTemplate在Spring框架中进行使用时,同样只需在properties文件中配置好连接,即可通过Autowire注解实现参数注入,properties文件配置如下:
# Redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=pass
spring.redis.pool.max-active=200
spring.redis.pool.max-wait=1000
spring.redis.pool.max-idle=60
#spring.redis.pool.min-idle=0
spring.redis.timeout=100000
示例代码如下:
@Repository
public class RedisDao {
@Autowired
private StringRedisTemplate template;
public void setKey(String key,String value){
ValueOperations ops = template.opsForValue();
// ops.set(key,value,1, TimeUnit.MINUTES);//1分钟过期
ops.set(key,value);//永久保存
}
public Long getValue(String key){
ValueOperations ops = this.template.opsForValue();
return Long.parseLong(ops.get(key));
}
}
目前,ElasticsearchTemplate只支持到ES5.0版本,对高版本暂不支持。