Template模版类
Template模版类的使用能大大简化开发过程,以下为常用的一些模板类介绍:
- RestTemplate
- JdbcTemplate
- MongoTemplate
- RedisTemplate
- *ElasticsearchTemplate
- 引申:HiveTemplate、HbaseTemplate、…
RestTemplate
借助 RestTemplate,我们能够方便地使用REST资源,常用的方法有:
- getForEntity() 发送一个HTTP GET请求,返回的ResponseEntity包含了响应体所映射成的对象
- getForObject() 发送一个HTTP GET请求,返回的请求体将映射为一个对象
- postForEntity() POST 数据到一个URL,返回包含一个对象的ResponseEntity,这个对象是从响应体中映射得
到的 - postForObject() POST 数据到一个URL,返回根据响应体匹配形成的对象
使用示例如下:
// 通过RestTemplate的post方法实现登录,并获取cookie
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
map.add("prama1", prama1);
map.add("prama2", prama2);
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
ResponseEntity<String> response = restTemplate.postForEntity(loginUrl, request, String.class);
List<String> cookie = response.getHeaders().get("Set-Cookie");
logger.info("获得cookie : " + cookie);
JdbcTemplate
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<Entity> query(){
String sql = "select * from table where status = 1";
List<Entity> 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
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<String,String> 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<Document> a = mongoTemplate.aggregate(
agg, Entity.class, Document.class);
Iterator<Document> iterator = a.iterator();
Map<String, String> 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
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<String, String> ops = template.opsForValue();
// ops.set(key,value,1, TimeUnit.MINUTES);//1分钟过期
ops.set(key,value);//永久保存
}
public Long getValue(String key){
ValueOperations<String, String> ops = this.template.opsForValue();
return Long.parseLong(ops.get(key));
}
}
ElasticsearchTemplate
目前,ElasticsearchTemplate只支持到ES5.0版本,对高版本暂不支持。