最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatisPlus之高級查詢用法及說明

 更新時間:2026年05月14日 10:17:02   作者:北執(zhí)南念  
本文詳細介紹了MyBatisPlus的高級查詢函數(shù),包括eq、ne、gt、gte、lt、lte、between、notBetween等、like、notLike等、inLeft、isNull、isNotNull、in、NotIn、InSql、NotInSql、GroupBy、OrderBy、Having、Apply、Exists、NotExists、Nested等等查詢

MyabtisPlus之高級查詢

函數(shù)名說明例子
eq等于 =例:eq(“name”,“張三”) :name = ‘張三’
ne不等于<>例: eq(“name”,“老王”)—>name = ‘老王’
gt大于>例:gt(“age”,18)—>age > 18
ge大于等于>=例:ge(“age”,18)—>age >= 18
lt小于<例:lt(“age”,18)—>age < 18
le小于<=例:le(“age”,18)—>age <= 18
betweenBETWEEN值1 AND值2例:between(“age”,18,30)—>age between 18 and 30
notBetweenNOT BETWEEN值1 AND值2例: notBetween(“age”,18,30)—>age not between 18 and 30
likeLIKE ‘%值%’例: like(“name”,“王”)—–>name like '%王%’
notLikeNOT LIKE ‘%值%’例: notLike (“name”,“王”)—>name not like '%王%’
likeLeftLIKE '%值’例:likeLeft (“name”,“王”)—–>name like '%王’
likeRightLIKE’值%’例: likeRight(“name”,“王”)—>name like ‘王%’
isNull字段IS NULL例: isNul1 (“name”)—>name is null
isNotNull字段IS NOT NULL例: isNotNull(“name”)—>name is not null
in字段IN (v0, v1,…)例: in(“age”,{1,2,3} )—–>age in (1,2,3)
notIn字段NOT IN (v0, v1,…)例: notIn(“age”,1,2,3)—>age not in (1,2,3)
inSql字段IN ( sql語句)inSql(“id”, “select id from table where id < 3”) —–>id in (select id from table where id < 3)
notInSql字段NOT IN ( sql語句)notInSql(“id”, “select id from table where id < 3”) —–>age not in (select id from table where id < 3)
groupBy分組:GROUP BY 字段,…例: groupBy(“id”, “name”)—>group by id, name
orderByAsc排序:ORDER BY字段,… ASC例: orderByAsc(“id”, “name”)—>order by id ASC, name ASC
orderByDesc排序:ORDER BY 字段,…DESC例: orderByDesc(“id”, “name”)—>order by id DESC, name DESC
orderBy排序:ORDER BY字段,…例: orderBy(true,true,“id”,“name”)—–>order by id ASC, name ASC
havingHAVING ( sql語句)having(“sum(age) >{0}”,11)—>having sum(age) > 11
or拼接OR主動調(diào)用or表示緊接著下一個方法不是用and連接!(不調(diào)用or則默認為使用and連接)例:eq(“id”,1).or().eq(“name”,“老王”)—>id = 1 or name = '老王
andAND嵌套例: and(i -> i.eq(“name”,“李白”).ne(“status”,“活著”))—>and (name ='李白’ and status ’活著’)
apply拼接sql該方法可用于數(shù)據(jù)庫函數(shù)動態(tài)入?yún)⒌膒arams對應(yīng)前面sqlHaving內(nèi)部的{index}部分.這樣是不會有sql注入風險的,反之會有! 例: apply(“date_format(dateColumn, ‘%Y一%m-%d’) ={0}”, “2023-08-08”)—>date_format(dateColumn,’%Y一%m-%d’) = ‘2023-08-08’")
last無視優(yōu)化規(guī)則直接拼接到sql 的最后無視優(yōu)化規(guī)則直接拼接到sql 的最后只能調(diào)用一次,多次調(diào)用以最后一次為準有sql注入的風險,請謹慎使用例: last(“limit 1”)
exists拼接EXISTS ( sql語句)exists (select id from table where age = 1) 例: notExists(“select id from table where age = 1”) —>exists (select id from table where age = 1)
notExists拼接NOT EXISTS ( sql語句)例: notExists(“select id from table where age = 1”)—–>not exists (select id from table where age = 1)
nested正常嵌套不帶AND或者 OR正常嵌套不帶AND或者OR例: nested(i -> i.eq(“name”,“李白”).ne(“status”,“高興”))—>(name = '李白’and status 高興’)

一、列投影(select)

? 只想看到查詢到的數(shù)據(jù)中部分字段數(shù)據(jù)。

例: 查詢所有學(xué)生信息,返回name age 列。
    QueryWrapper<USer> wrapper = new QueryWrapper<>();

	1.wrapper.select("name","age");//---------->查詢列集合,將查詢數(shù)據(jù)作為兩例。
	
	2.wrapper.select("name,age");//---------->查詢列集合,將查詢數(shù)據(jù)作為一例。

    usermapper.selectlist(wrapper)
          

二、排序與分組

1.1、排序(orderByAsc/orderByDesc)

orderByAsc: 正序排序
   等價SQL: select ..from table   ORDER BY 字段, ... ASC

orderByDesc :倒序排序
        
wrapper方法:
orderByAsc(R... columns)
orderByAsc(boolean condition, R... columns)
    
效果: 
orderByAsc("id", "name")--->order by id ASC,name ASC
       
列:查詢所有員工信息按age正序排, 如果age一樣, 按id正序排
    @Test
    public void Test0(){
        QueryWrapper<Employee> wrapper = new QueryWrapper<>();
        wrapper.orderByAsc("age", "id");
        employeeMapper.selectList(wrapper);
    }

//對應(yīng)sql語句:
    SELECT id,name,password,email,age,admin,dept_id FROM employee ORDER BY age ASC,id ASC
        orderByDesc 跟 orderByAsc用法一樣, 不過是倒序排

1.2、定制排序(orderBy)

orderBy:定制排序
等價SQL: select ..from table   ORDER BY 字段,

//參數(shù)1:布爾表達式:控制是否進行排序操作
//參數(shù)2:控制是不是正序
orderBy(boolean condition, boolean isAsc, R... columns)

 排序:ORDER BY 字段, ...
 &效果:  
 orderBy(true, true, "id", "name")--->order by id ASC,name ASC
    
例:查詢所有員工信息按age正序排, 如果age一樣, 按id正序排
    @Test
    public void Test1(){
        QueryWrapper<Employee> wrapper = new QueryWrapper<>();
        //apper.orderByAsc("age", "id");
        //等價于:
        wrapper.orderBy(true, true, "age", "id");
        employeeMapper.selectList(wrapper);
    }
//sql語句
SELECT id,name,password,email,age,admin,dept_id FROM employee ORDER BY age ASC,id ASC

列:查詢所有員工信息按age正序排, 如果age一樣, 按id倒序排
    @Test
    public void Test2(){
        QueryWrapper<Employee> wrapper = new QueryWrapper<>();
        wrapper.orderByAsc("age");
        wrapper.orderByDesc("id");
        employeeMapper.selectList(wrapper);
    }

//對應(yīng)sql語句
SELECT id,name,password,email,age,admin,dept_id FROM employee ORDER BY age ASC,id DESC

三、分組查詢(groupBy)

方法:
(1):groupBy : 分組:GROUP BY 字段, ...
(2):groupBy(R... columns)
(3):groupBy(boolean condition, R... columns)
    
&效果:
 groupBy("id", "name")--->group by id,name
 
例: 以部門id進行分組查詢,查每個部門員工個數(shù)
    @Test
    public void Test3(){
        QueryWrapper<Employee> wrapper = new QueryWrapper<>();
        wrapper.groupBy("dept_id");
        wrapper.select("dept_id", "count(id) count");
        employeeMapper.selectMaps(wrapper);
    }
//對應(yīng)sql語句
SELECT dept_id,count(id) count FROM employee GROUP BY dept_id 

四、過濾條件(having)

方法:
(1): having : HAVING ( sql語句 ) 
(2): having(String sqlHaving, Object... params)
   
   //參數(shù)1:布爾表達式:控制是否進行過濾操作
   //參數(shù)2:以哪個字段為過濾
   //參數(shù)3:以哪個條件作為過濾條件
(3): having(boolean condition, String sqlHaving, Object... params)
   
  例: having("sum(age) > 10")--->having sum(age) > 10
  例: having("sum(age) > {0}", 11)--->having sum(age) > 11

   需求: 以部門id進行分組查詢,查每個部門員工個數(shù), 將大于3人的部門過濾出來
   @Test
   public void test5(){
       QueryWrapper<Employee> wrapper = new QueryWrapper<>();
       wrapper.groupBy("dept_id")
               .select("dept_id", "count(id) count")
               //.having("count > {0}", 3)
               .having("count >3");
       employeeMapper.selectMaps(wrapper);
   }
//對應(yīng)sql語句:
 SELECT dept_id,count(id) count FROM employee GROUP BY dept_id HAVING count >3

五、比較運算符

1. 等于 不等于

1):allEq:全能匹配;即:所有條件都得等;

  例 查詢 name='張三‘ age='18‘的學(xué)生信息

	步驟:
  	(1): Map(string ,object)mp = new HashMap();
          		mp.put("name","張三");
	      		mp.put("age","18");

  	(2):  QueryWrapper<Employee> wrapper = new QueryWrapper<>();
		 		wrapper.allEq(mp);

  	(3):userMapper.selelist(wrapper);



2): eq:當個參數(shù)判斷是否相等。---------->對應(yīng)SQL中 “等于=”

	列:eq("name","zhnagsan")----------->name="zhangsanE"


3): ne: 不等于---------->對應(yīng)SQL中 “不等于< >”
      
   列:ne("name","張三")------------->name< >'張三嗯'

2.大于 等于 小于

(1):get :大于 >
    列:get("age",18)----------->age>18  

(2):ge :大于等于 >=
    列:ge("age",18)----------->age>=18 

(3):lt :小于 <
    列:lt("age",18)----------->age<18 

(4):le :小于等于 <=
    列:le("age",18)----------->age<=18 
    

六、批量插入或更新數(shù)據(jù)

方式一:mybatis-plus 的saveOrUpdateBatch方法

繼承BaseMapper即可,泛型使用當前要操作類

@Mapper
public interface HhChainCustomerInfoMapper extends BaseMapper<HhChainCustomerInfo> {
    
 
    /**
    * 使用mybatis-plus方式調(diào)用saveOrUpdateBatch不需要寫這個接口
    boolean saveOrUpdateBatch(@Param("entities") Collection<HhChainCustomerInfo> hhChainCustomerInfos);
    */
 
}

Service 層繼承 IService即可,泛型使用當前要操作類

/**
 * 鏈路客戶信息Service接口
 *
 * @author js
 * @date 2023-09-10
 */
public interface IHhChainCustomerInfoService extends IService<HhChainCustomerInfo> {
    

}

Service 實現(xiàn)類 層繼承 ServiceImpl即可,泛型使用當前要操作類

@Service
public class HhChainCustomerInfoServiceImpl extends ServiceImpl<HhChainCustomerInfoMapper, HhChainCustomerInfo> implements IHhChainCustomerInfoService {
 
 
    /*@Override
    public boolean saveOrUpdateBatch(Collection<HhChainCustomerInfo> entityList) {
        return hhChainCustomerInfoMapper.saveOrUpdateBatch(entityList);
    }*/
 
}

七、(單表)分頁+高級查詢

步驟

第一步:定義一個QueryObject類:

@Setter
@Getter
public class QueryObject {
    private int CurrentPage=1;
    private int PageSize=1;
    
}

第二步:定義一個QueryObject類:

@Setter
@Getter
public class EmployeeQuery extends QueryObject{
}

第三步:在啟動類中配置分頁插件:

步驟:配置分頁插件
//分頁
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
        paginationInnerInterceptor.setOverflow(true); //合理化
        interceptor.addInnerInterceptor(paginationInnerInterceptor);
       return interceptor;
    }

第四步:在Service接口層中定義分頁方法:

public interface  IEmployeeService extends IService<Employee>{//----------->泛型里為實體類
    //------->必須繼承 IService<T>
	//分頁方法:
    public IPage<Employee> query(EmployeeQuery qo);
} 

第五步:在Service接口實現(xiàn)類中實現(xiàn)分頁方法:

public class EmployeeServiceImpl extends Service<EmployeeMapper,Employee> implements IEmployeeService{
    //------------>Service<EmployeeMapper,Employee>:實體類Mapper接口;實體類
    //------->必須繼承 Service<TMapper,T>
   @Override
    public IPage<Employee> query(EmployeeQuery qo) {
        IPage<Employee> page = new Page<>(qo.getCurrentPage(), qo.getPageSize());  //設(shè)置分頁信息
        QueryWrapper<Employee> wrapper = Wrappers.<Employee>query();  //拼接條件
      
        //有條件約束寫在這里:
    	
        return super.page(page,wrapper);
    }
   }


列:查詢第2頁員工信息, 每頁顯示3條, 按id排序
    @Test
    public void testPage(){
        EmployeeQuery qo = new EmployeeQuery();
        qo.setPageSize(3);
        qo.setCurrentPage(2);
        IPage<Employee> page = employeeService.query(qo);
        System.out.println("當前頁:" + page.getCurrent());
        System.out.println("總頁數(shù):" + page.getPages());
        System.out.println("每頁顯示條數(shù):" + page.getSize());
        System.out.println("總記錄數(shù):" + page.getTotal());
        System.out.println("當前頁顯示記錄:" + page.getRecords());
    }
//sql語句
SELECT id,name,password,email,age,admin,dept_id FROM employee where (name like ?) LIMIT ?,?

八、聯(lián)表分頁查詢+條件查詢

對于一對一,一對多,多對一,還是兩表之間通過主外鍵關(guān)聯(lián)查詢,都可以;

總結(jié):

  • ?第一步:不管是那種情況,首先將響應(yīng)給前端的數(shù)據(jù)封裝成一個類并繼承(PageQuery)
  • 第二步:按以下步驟做

步驟:

1.編寫:請求Dto層:

import lombok.Data;

@Data
public class PageQuery  {
    /**
     * 當前頁
     */
    private Integer curPage;

    /**
     * 頁大小
     */
    private Integer pageSize;

}

2.編寫封裝響應(yīng)給前端數(shù)據(jù)to

import com.baomidou.mybatisplus.annotation.TableId;
import com.zhecre.jx.business.model.index.request.PageQuery;
import lombok.Data;

import java.util.Date;
@Data
public class CompensateInfo extends PageQuery {

    /**
     * 方案狀態(tài)(1:未提交|2:已提交|3:已駁回|4:已審核)
     */
    private String status;

    /**
     * 方案編號
     */
    @TableId
    private String caseid;


    /**
     * 方案名稱
     */
    private String casename;

    /**
     * 醫(yī)院名稱
     */
    private String hosname;

    private String casetype;

    private String remark;
    
    private Date commitdate;
    
    private String type;

}

3.定義controller層:

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zhecre.jx.business.model.index.response.CompensateInfo;
import com.zhecre.jx.business.service.cases.ICompensateInfoService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;


@RestController
@RequiredArgsConstructor
@RequestMapping("/Compensation")
public class CompensationSchemesController {
    @Autowired
    private final ICompensateInfoService compensateInfoService;

    @GetMapping("/index/query")
    public IPage<CompensateInfo> CompensatePage( CompensateInfo Info){
        
		//調(diào)用service層
        IPage<CompensateInfo> query = compensateInfoService.query(Info,Info.getCasename(),Info.getCasetype());
        return query;
    }

}

4.編寫service 層:

public interface ICompensateInfoService extends IService<CompensateInfo> {

    //分頁方法:
    IPage<CompensateInfo> query(CompensateInfo info, String casename, String casetype);
}

5.實現(xiàn)service層:

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhecre.jx.business.mapper.cases.CompensateInfoMapper;
import com.zhecre.jx.business.model.index.response.CompensateInfo;
import com.zhecre.jx.business.service.cases.ICompensateInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class CompensateInfoServiceImpl extends ServiceImpl<CompensateInfoMapper, CompensateInfo> implements ICompensateInfoService {
    @Autowired
    private CompensateInfoMapper compensateInfoMapper;
    
    @Override
    public IPage<CompensateInfo> query(CompensateInfo qo, String casename, String casetype) {
        
        Page<CompensateInfo> Page = new Page<>(qo.getCurPage(), qo.getPageSize());//調(diào)用mybatisplus分頁插件
        
        IPage<CompensateInfo> queryVoPage = compensateInfoMapper.findByPage(Page, qo,casename,casetype);//定義分頁方法

        return queryVoPage;
    }
}

6.定義Mapper層:

public interface CompensateInfoMapper extends BaseMapper<CompensateInfo> {
	//自定義分頁方法
    IPage<CompensateInfo> findByPage(Page<CompensateInfo> page, CompensateInfo qo,
                                     @Param("casename") String casename,@Param("casetype") String casetype);//這是條件查詢參數(shù)
}

7.編寫Mapper.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhecre.jx.business.mapper.cases.CompensateInfoMapper">
    //將查尋結(jié)果對象字段屬性和數(shù)據(jù)庫字段對應(yīng)
    <resultMap id="CompensateInfoMapper" type="com.zhecre.jx.business.model.index.response.CompensateInfo">
        <id property="caseid" column="CASEID"></id>
        <result property="status" column="STATUS"></result>
        <result property="casename" column="CASENAME"></result>
        <result property="casetype" column="CASETYPE"></result>
        <result property="remark" column="REMARK"></result>
        <result property="hosname" column="HOSNAME"></result>
        <result property="commitdate" column="COMMITDATE"></result>
        <result property="type" column="TYPE"></result>
    </resultMap>
    //查詢語句:得到結(jié)果集
    <select id="findByPage" parameterType="com.zhecre.jx.business.model.index.response.CompensateInfo" resultMap="CompensateInfoMapper">
            SELECT
            c.STATUS,
            c.CASEID,
            c.CASENAME,
            c.CASETYPE,
            p.HOSNAME,
            c.REMARK,
            c.COMMITDATE,
            c.TYPE
            FROM
            PAS_CASE c,
            PAS_CASE_HOSPITAL p
        <where>
         and c.CASEID = p.CASEID
        <if test="casename !=null and casename != ''">
            and c.CASENAME = #{casename}//傳入的條件查數(shù);如果傳入的參數(shù)是對象的話要取對象中的某個屬性,這個地方參數(shù)直接寫成屬性名即可,但是對象所屬的類                                            必須提供getter方法;如果是普通變量字段,條件直接寫成傳入得字段
        </if>
        </if>
        <if test="casetype !=null and casetype != ''">
            and c.CASETYPE = #{casetype}
        </if>
        </where>
        </select>
</mapper>

九、事務(wù)操作

在service層實現(xiàn)類上面加一個@Thansaction注解。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Springboot 2.x集成kafka 2.2.0的示例代碼

    Springboot 2.x集成kafka 2.2.0的示例代碼

    kafka近幾年更新非???,也可以看出kafka在企業(yè)中是用的頻率越來越高。本文主要為大家介紹了Springboot 2.x集成kafka 2.2.0的示例代碼,需要的可以參考一下
    2022-04-04
  • SpringBoot中使用Servlet三大組件的方法(Servlet、Filter、Listener)

    SpringBoot中使用Servlet三大組件的方法(Servlet、Filter、Listener)

    這篇文章主要介紹了SpringBoot中使用Servlet三大組件的方法(Servlet、Filter、Listener),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Java實現(xiàn)敏感數(shù)據(jù)內(nèi)存清理的代碼詳解

    Java實現(xiàn)敏感數(shù)據(jù)內(nèi)存清理的代碼詳解

    Java的自動內(nèi)存管理機制并不能保證敏感數(shù)據(jù)的徹底銷毀,本文將通過真實代碼、內(nèi)存監(jiān)控方案和安全擦除策略,展現(xiàn)如何用Java實現(xiàn)敏感數(shù)據(jù)的物理級清除,讓敏感信息在內(nèi)存中不留痕跡,需要的朋友可以參考下
    2025-10-10
  • Spring中獲取Bean對象的三種注入方式與兩種注入方法詳解

    Spring中獲取Bean對象的三種注入方式與兩種注入方法詳解

    平常的Java開發(fā)中程序員在某個類中需要依賴其它類的方法,下面這篇文章主要給大家介紹了關(guān)于Spring中獲取Bean對象的三種注入方式與兩種注入方法的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • Java+swing實現(xiàn)抖音上的表白程序詳解

    Java+swing實現(xiàn)抖音上的表白程序詳解

    這篇文章主要為大家詳細介紹了如何利用Java?swing實現(xiàn)抖音上的表白程序,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-06-06
  • java身份證驗證代碼實現(xiàn)

    java身份證驗證代碼實現(xiàn)

    java身份證驗證代碼實現(xiàn),需要的朋友可以參考一下
    2013-02-02
  • RocketMQ設(shè)計之主從復(fù)制和讀寫分離

    RocketMQ設(shè)計之主從復(fù)制和讀寫分離

    這篇文章主要介紹了RocketMQ設(shè)計之主從復(fù)制和讀寫分離,RocketMQ提高消費避免Broker發(fā)生單點故障引起B(yǎng)roker上的消息無法及時消費,下文關(guān)于了RocketMQ的相關(guān)內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03
  • SpringBoot結(jié)合Redis哨兵模式的實現(xiàn)示例

    SpringBoot結(jié)合Redis哨兵模式的實現(xiàn)示例

    這篇文章主要介紹了SpringBoot結(jié)合Redis哨兵模式的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Java通過URL獲取公眾號文章生成HTML的方法

    Java通過URL獲取公眾號文章生成HTML的方法

    這篇文章主要介紹了Java通過URL獲取公眾號文章生成HTML的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Quarkus集成apollo配置中心

    Quarkus集成apollo配置中心

    這篇文章主要介紹了Quarkus集成apollo配置中心,文中詳細的講解了Quarkus的config構(gòu)成,以及apollo集成實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-02-02

最新評論

靖远县| 广水市| 宁化县| 政和县| 泽普县| 苏州市| 富裕县| 巨鹿县| 咸阳市| 萝北县| 宜都市| 宿松县| 扎赉特旗| 阿图什市| 策勒县| 万宁市| 海伦市| 鸡西市| 浦东新区| 黄陵县| 阿克苏市| 麻阳| 广昌县| 江口县| 洪泽县| 仙居县| 宾阳县| 天峨县| 赤城县| 临安市| 孟津县| 柘荣县| 运城市| 怀来县| 云龙县| 堆龙德庆县| 甘肃省| 灌阳县| 旅游| 都匀市| 保德县|