Template模板类使用

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 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);

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 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

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

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

目前,ElasticsearchTemplate只支持到ES5.0版本,对高版本暂不支持。

你可能感兴趣的:(Template模板类使用)