spring boot初步学习
目录结构
pom.xml
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.3.RELEASE</version> <relativePath /> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> </dependencies>
p.s 一开始,maven下载jar包的速度实在是太慢了。
后来查资料重新配了一下maven,速度有所提升。
具体操作:maven/config目录下的settings.xml文件中添加镜像地址。
<mirror> <id>daocloud-lbp0200</id> <name>daocloud-lbp0200</name> <url>http://lbp0200-maven.daoapp.io/maven2</url> <mirrorOf>central</mirrorOf> </mirror> <mirror> <id>clojars.org</id> <name>clojars-daocloud</name> <url>http://lbp0200-maven.daoapp.io/repo</url> <mirrorOf>clojars</mirrorOf> </mirror>
Application.java
提供主入口,启动程序
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
Example.java
控制器,具体实现
@RestController @EnableAutoConfiguration public class Example { @RequestMapping("/") String home() { return "Hello World!"; //地址栏输入localhost:8080 即可访问 } @RequestMapping("/hello/{myName}") String index(@PathVariable String myName) { return "Hello "+myName+"!!!"; //地址栏输入 localhost:8080/hello/{myName} 即可访问 } @RequestMapping("/hello/{myName}/{age}") String register(@PathVariable String myName, @PathVariable String age){ return myName + "is" + age; } }
结合数据库(mySql)
添加依赖
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
application.properties
# =============================== # = DATA SOURCE # =============================== # Set here configurations for the database connection # Connection url for the database "XXX" spring.datasource.url = jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=UTF-8 # Username and password spring.datasource.username = 用户名 spring.datasource.password = 密码 # 配置一个连接在池中最小生存的时间 spring.datasource.testWhileIdle = true spring.datasource.validationQuery = SELECT 1 # =============================== # = JPA / HIBERNATE # =============================== # Use spring.jpa.properties.* for Hibernate native properties (the prefix is # stripped before adding them to the entity manager). # Show or not log for each sql query spring.jpa.show-sql = true # Hibernate DDL自动(创建,更新):“更新数据库” # 根据项目中发现的实体类自动更新 spring.jpa.hibernate.ddl-auto = update # Naming strategy spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy # Allows Hibernate to generate SQL optimized for a particular DBMS spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect # 更改代码后不需要重新启动 spring.thymeleaf.cache=false
Entity层
@Entity //标记实体?? @Table(name = "locations") //表名 public class Locations { @Id @GeneratedValue(strategy = GenerationType.AUTO) //标记自增 private long id; private String device_id; //加上@NotNull 表示为非空 private String lat_stream; private String lng_stream; private String heading; private String velocity; @Column(name = "TIME") @Temporal(TemporalType.DATE) private Date time; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getDevice_id() { return device_id; } public void setDevice_id(String device_id) { this.device_id = device_id; } public String getLat_stream() { return lat_stream; } public void setLat_stream(String lat_stream) { this.lat_stream = lat_stream; } public String getLng_stream() { return lng_stream; } public void setLng_stream(String lng_stream) { this.lng_stream = lng_stream; } public String getHeading() { return heading; } public void setHeading(String heading) { this.heading = heading; } public String getVelocity() { return velocity; } public void setVelocity(String velocity) { this.velocity = velocity; } public Date getTime() { return time; } public void setTime(Date time) { this.time = time; } public String toString(){ return "Locations{" + "id=" + id + ", device_id='" + device_id + '\'' + ", lat_stream='" + lat_stream + '\'' + ", lng_stream='" + lng_stream + '\'' + ", heading='" + heading + '\'' + ", velocity='" + velocity + '\'' + ", time=" + time + '}'; } }
Dao层
@Transactional public interface LocationsDao extends CrudRepository<Locations, Long>{ public Locations findById(long id); }
继承CrudRepository接口, 新增简单的增删改查操作。
我发现根据某一条件查询时,方法命名必须为findByXXX(XXX为在数据库中的名字),否则就会报错。(也许有改进的方法??)
写注解的方式
@Query("SELECT t FROM User t WHERE " + "LOWER(t.email) LIKE LOWER(CONCAT('%',:searchTerm, '%')) OR "
+ "LOWER(t.name) LIKE LOWER(CONCAT('%',:searchTerm, '%'))") List<User> findBySearchTerm(@Param("searchTerm") String searchTerm);
p.s 使用这种方式进行update 或者 delete 语句时,需要添加 modifying 注解修饰
@Query(value="delete from Locations",nativeQuery=true) @Modifying
public void deleteAllBySql();
结合页面
js,css等静态文件放在src/main/resources下面的static目录下,就可直接访问。
路径控制
@Controller public class PageController { @RequestMapping("/heatMap") public String heatMap(ModelMap map){ return "heatMap"; } }
这样在地址栏输入localhost:8080/heatMap 可以访问到src/main/resources/templates下的heatMap.html页面
另一种方法:直接将页面放在src/main/webapp目录下在地址栏输localhost:8080/heatMap.html也可访问