当前位置 博文首页 > m0_53222768的博客:61.SpringBoot
@一贤不穿小鞋
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 将上述内容修改为下面的效果 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
@RestController
public class TestController {
@GetMapping("/test")
public String test(){
return "Hello SpringBoot!";
}
}
@Configuration // 代表当前类是一个配置类
public class UserConfig {
@Bean(name = "user1") // 构建一个实例,放到spring容器中
public User user(){
User user = new User();
user.setId(1);
user.setName("张三");
return user;
}
/*
<beans ....> @Configuration
<bean id="user1" class="com.qf.firstspringboot.entity.User" />
</beans>
*/
}
@Configuration
@ComponentScan(basePackages = "com.qianfeng.springannotation") //包扫描.用于扫描并创建我们自己指定了spring注解的类对象,当我们没有指定具体的包的时候,会扫描当前类所在的包以及子包,用于代替xml文件中的<context:component-scan base-package=""
public class SpringConfig {
}
spring:
profiles:
active: 环境名
// Java程序
@ConfigurationProperties(prefix = "aliyun")
@Component
@Data
public class AliyunProperties {
private String xxxx;
private ... ...;
}
// 配置文件
aliyun:
xxxx: xxxxxxxxx
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!-- mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid连接-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!-- mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
// 准备实体类
@Data
public class Air implements Serializable {
private Integer id;
private Integer districtId;
private java.util.Date monitorTime;
private Integer pm10;
private Integer pm25;
private String monitoringStation;
private java.util.Date lastModifyTime;
}
// ================================================
@Data
public class District implements Serializable {
private Integer id;
private String name;
}
// 1. 接口
public interface AirMapper {
List<Air> findAll();
}
// 2. 在启动类中添加直接,扫描Mapper接口所在的包
@MapperScan(basePackages = "com.qf.firstspringboot.mapper")
// 3. 准备映射文件
<?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.qf.firstspringboot.mapper.AirMapper">
<!-- List<Air> findAll();-->
<select id="findAll" resultType="Air">
select * from air
</select>
</mapper>
//4. yml文件
<!-- 添加yml文件配置信息 -->
# mybatis配置
mybatis:
# 扫描映射文件
mapper-locations: classpath:mapper/*.xml
# 配置别名扫描的包
type-aliases-package: com.qf.firstspringboot.entity
configuration:
# 开启驼峰映射配置
map-underscore-to-camel-case: true
# 连接数据库的信息
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///air?serverTimezone=UTC
username: root
password: 123
type: com.alibaba.druid.pool.DruidDataSource
class AirMapperTest extends FirstSpringbootApplicationTests {
@Autowired
private AirMapper airMapper;
@Test
void findAll() {
List<Air> list = airMapper.findAll();
for (Air air : list) {
System.out.println(air);
}
}
}
public interface DistrictMapper {
List<District> findAll();
}
@Select("select * from district")
List<District> findAll();
@Select("select * from district where id = #{id}")
District findOneById(@Param("id") Integer id);
// yml文件
logging:
level:
com.qf.firstspringboot.mapper: DEBUG
class DistrictMapperTest extends FirstSpringbootApplicationTests {
@Autowired
private DistrictMapper mapper;
@Test
void findAll() {
List<District> list = mapper.findAll();
for (District district : list) {
System.out.println(district);
}
}
@Test
void findOneById() {
District district = mapper.findOneById(5);
System.out.println(district);
}
}
<!-- pageHelper依赖-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
@Test
public void findByPage(){
//1. 执行分页
PageHelper.startPage(1,5);
//2. 执行查询
List<Air> list = airMapper.findAll();
//3. 封装PageInfo对象
PageInfo<Air> pageInfo = new PageInfo<>(list);
//4. 输出
for (Air air : pageInfo.getList()) {
System.out.println(air);
}
}
<!-- JSP核心引擎依赖-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<!-- JSTL-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
// Controller
@Controller
public class JspController {
@GetMapping("/index")
public String index(Model model){
model.addAttribute("name","张三");
return "index";
}
}
spring:
mvc:
# 视图的前缀和后缀
view:
prefix: /WEB-INF/
suffix: .jsp
<a th:text="${url}">百度</a>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
spring:
thymeleaf:
cache: false
<html xmlns:th="http://www.thymeleaf.org">
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"></meta>
<title>Insert title here</title>
</head>
<body>
Hello Spring Boot!!!!
</body>
</html>
<html xmlns:th="http://www.thymeleaf.org">
欢迎:<span th:text="${username}"></span><br/>
欢迎:<span th:text="超级VIP+${username}"></span><br/>
欢迎:<span th:text="|超级VIP,${username}|"></span><br/>
<span th:if="${age > 33}">老腊肉</span>
<span th:if="${age <= 18}">小鲜肉</span>
<span th:unless="${age>18}" th:text="未超过18岁"></span>
<span th:text="${age>18 ? '长大了':'未成年'}"></span>
<table>
<tr>
<td>id</td>
<td>姓名</td>
</tr>
<tr th:each="stu : ${stus}">
<td th:text="${stu.id}">id</td>
<td th:text="${stu.name}">姓名</td>
</tr>
</table>
<input th:value="${#dates.format(now,'yyyy-MM-dd HH:mm:ss')}"/>
@Data
public class Customer implements Serializable {
private static final long serialVersionUID = 1586034423739L;
/**
* 主键
*
* isNullAble:0
*/
private Integer id;
/**
* 公司名
* isNullAble:1
*/
private String username;
/**
*
* isNullAble:1
*/
private String password;
/**
*
* isNullAble:1
*/
private String nickname;
/**
* 金钱
* isNullAble:1
*/
private Long money;
/**
* 地址
* isNullAble:1
*/
private String address;
/**
* 状态
* isNullAble:1
*/
private Integer state;
}
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.5.4</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.5.4</version>
</dependency>
elasticsearch:
host: 192.168.206.142
port: 9200
@Configuration
public class ElasticSearchConfig {
@Value("${elasticsearch.host}")
private String host;
@Value("${elasticsearch.port}")
private int port;
@Bean
public RestHighLevelClient client(){
HttpHost httpHost = new HttpHost(host,port);
RestClientBuilder builder = RestClient.builder(httpHost);
RestHighLevelClient client = new RestHighLevelClient(builder);
return client;
}
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class SearchDemoApplicationTests {
@Autowired
private RestHighLevelClient client;
String index = "openapi_customer";
String type = "customer";
@Test
public void createIndex() throws IOException {
//1. 准备关于索引的settings
Settings.Builder settings = Settings.builder()
.put("number_of_shards", 5)
.put("number_of_replicas", 1);
//2. 准备关于索引的结构mappings
XContentBuilder mappings = JsonXContent.contentBuilder()
.startObject()
.startObject("properties")
.startObject("id")
.field("type", "integer")
.endObject()
.startObject("username")
.field("type", "keyword")
.endObject()
.startObject("password")
.field("type", "keyword")
.endObject()
.startObject("nickname")
.field("type", "text")
.endObject()
.startObject("money")
.field("type", "long")
.endObject()
.startObject("address")
.field("type", "text")
.endObject()
.startObject("state")
.field("type", "integer")
.endObject()
.endObject()
.endObject();
//3. 将settings和mappings封装到一个Request对象
CreateIndexRequest request = new CreateIndexRequest(index)
.settings(settings)
.mapping(type, mappings);
//4. 通过client对象去连接ES并执行创建索引
CreateIndexResponse resp = client.indices().create(request, RequestOptions.DEFAULT);
//5. 输出
System.out.println("resp:" + resp.toString());
}
@Test
public void testAddData() throws IOException {
//1. 准备多个json数据
Customer c1 = new Customer();
c1.setId(1);
c1.setUsername("haier");
c1.setPassword("111111");
c1.setNickname("海尔集团");
c1.setMoney(2000000L);
c1.setAddress("青岛");
c1.setState(1);
Customer c2 = new Customer();
c2.setId(2);
c2.setUsername("lianxiang");
c2.setPassword("111111");
c2.setNickname("联想");
c2.setMoney(1000000L);
c2.setAddress("联想");
c2.setState(1);
Customer c3 = new Customer();
c3.setId(3);
c3.setUsername("google");
c3.setPassword("111111");
c3.setNickname("谷歌");
c3.setMoney(1092L);
c3.setAddress("霉果");
c3.setState(1);
ObjectMapper mapper = new ObjectMapper();
String json1 = mapper.writeValueAsString(c1);
String json2 = mapper.writeValueAsString(c2);
String json3 = mapper.writeValueAsString(c3);
//2. 创建Request,将准备好的数据封装进去
BulkRequest request = new BulkRequest();
request.add(new IndexRequest(index, type, c1.getId().toString()).source(json1, XContentType.JSON));
request.add(new IndexRequest(index, type, c2.getId().toString()).source(json2, XContentType.JSON));
request.add(new IndexRequest(index, type, c3.getId().toString()).source(json3, XContentType.JSON));
//3. 用client执行
BulkResponse resp = client.bulk(request, RequestOptions.DEFAULT);
//4. 输出结果
System.out.println(resp.toString());
}
}
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.22</version>
</dependency>
server:
port: 80
#连接数据库的配置
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///openapi_2001
username: root
password: 123
type: com.alibaba.druid.pool.DruidDataSource
#mybatis的配置
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.qf.open.customer_demo.entity
configuration:
map-underscore-to-camel-case: true
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
public interface SearchService {
String searchByCondition(Map<String,Object> map);
}
@Service
public class SearchServiceImpl implements SearchService{
@Autowired
private RestHighLevelClient client;
private String index = "openapi_customer";
private String type = "customer";
@Override
public String searchByCondition(Map<String, Object> map) {
//创建request对象
SearchRequest request = new SearchRequest(index);
request.types(type);
//构建查询条件
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.sort("id", SortOrder.ASC);
Object name = map.get("name");
Object state = map.get("state");
if(!StringUtils.isEmpty(name)){
builder.query(QueryBuilders.termQuery("username",name));
}
if(state!=null){
builder.query(QueryBuilders.termQuery("state",state));
}
Integer page = Integer.parseInt(map.get("page").toString());
Integer limit = Integer.parseInt(map.get("limit").toString());
builder.from((page-1)*limit);
builder.size(limit);
request.source(builder);
try {
//执行查询
SearchResponse searchResponse = client.search(request, RequestOptions.DEFAULT);
TableDataVo<Customer> dataVo = new TableDataVo<>();
List<Customer> data = new ArrayList<>();
//设置总条数
dataVo.setCount(searchResponse.getHits().getTotalHits());
for (SearchHit hit : searchResponse.getHits().getHits()) {
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
Customer customer = new Customer();
BeanUtils.populate(customer,sourceAsMap);
data.add(customer);
}
//给vo对象中的集合赋值
dataVo.setData(data);
//把集合转成json数据,并返回
return JSON.toJson(dataVo);
} catch (Exception e) {
e.printStackTrace();
}
//返回结果
return null;
}
}
public class JSON {
public static String toJson(Object value){
ObjectMapper objectMapper = new ObjectMapper();
try {
return objectMapper.writeValueAsString(value);
} catch (JsonProcessingException e) {
e.printStackTrace();
return "";
}
}
}
@Data
public class TableDataVo<T> {
private Integer code = 0;
private String msg = "";
private Long count;
private List<T> data;
}
@RestController
@RequestMapping("/search/customer")
public class SearchController {
@Autowired
private SearchService searchService;
@PostMapping(value = "/table",produces = "application/json;charset=utf-8")
public String table(@RequestBody Map<String,Object> map){
//调用方法
String json = searchService.searchByCondition(map);
//返回结果
return json;
}
}
{
"page":1,
"limit":10,
"name":"google"
}
{
"code": 0,
"msg": "",
"count": 1,
"data": [
{
"id": 3,
"username": "google",
"password": "111111",
"nickname": "谷歌",
"money": 1092,
"address": "没过",
"state": 1
}
]
}
public interface CustomerService {
String findByCondition(Map<String,Object> map);
}
@Service
public class CustomerServiceImpl implements CustomerService {
@Autowired
private RestTemplate restTemplate;
@Override
public String findByCondition(Map<String, Object> map) {
//准备请求参数和请求头
String json = JSON.toJson(map);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.parseMediaType("application/json;charset=utf-8"));
//组合 json和httpHeaders
HttpEntity entity = new HttpEntity(json,httpHeaders);
//通过restTemplate调用search模块
String result = restTemplate.postForObject("http://localhost:8080/sys/customer/table", entity, String.class);
return result;
}
}
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class CustomerServiceTest {
@Autowired
private CustomerService customerService;
@Test
public void findByCondition() throws Exception {
Map<String, Object> map = new HashMap<>();
map.put("page",1);
map.put("limit",10);
map.put("name","haier");
String s = customerService.findByCondition(map);
System.out.println(s);
}
}