1. application.yml
server.port=8080
server.tomcat.uri-encoding=utf-8
2. 引入依赖
MySQL连接驱动 ,Spring Data JPA,thymeleaf模板引擎
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>1.4.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>1.5.1.RELEASE</version>
</dependency>
3. 配置MySQL,JPA
#MySQL
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8
spring.datasource.username=****
spring.datasource.password=****
# Spring Data JPA
spring.jpa.database=MYSQL
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
# 命名策略
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# 在将它们添加到实体管理器之前剥离它们
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
4. 编写实体类User
@Table标签,指定数据库中对应的表名,id配置为主键,生成策略为自动生成
@Entity
@Table(name = "tbl_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String name;
private String password;
}
5. 基于JPA,设计DAO层
//新建`UserRepositoty.java`接口文件
@Repository
public interface UserRepositoty extends JpaRepository<User,Long>{
@Query("select t from User t where t.name = :name")
User findByUserName(@Param("name") String name);
}
Spring Data JPA提供了很多持久层接口,
例如Repository, CrudRepositoty,PagingAndSortingRepository 以及JpaRepository 接口。
我们创建自己的数据库操作接口时,只需继承上述JPA提供的某个接口,即可自动继承相关数据操作方法,而不需要再次实现。
例如CrudRepositoty
提供了对增删改查操作的实现,PagingAndSortingRepository提供了分页查询方法的实现。
另外JPA提供了一套命名规则例如readBy**()等,这些方法也只需要用户申明而由JPA自动实现了。
如果这仍不能满足业务需求,也可以自定义SQL查询语句,例如上述代码所示,采用 @Query 标签, 其中 :*语法为引用下面用@Param标识的变量,需要注意的是其中User不是表面而是Java POJO类名。
6. 设计Service层、Controller层
新建UserService
类,其源代码如下:
@Service
public class UserService {
@Autowired
private UserRepositoty userRepositoty;
public User findUserByName(String name){
User user = null;
try{
user = userRepositoty.findByUserName(name);
}catch (Exception e){}
return user;
}
}
新建UserController.java,提供两个接口,/user/index 返回页面,/user/show返回数据。其源代码如下:
@Controller
@RequestMapping(value = "/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/index")
public String index(){
return "user/index";
}
@RequestMapping(value = "/show")
@ResponseBody
public String show(@RequestParam(value = "name")String name){
User user = userService.findUserByName(name);
if(null != user)
return user.getId()+"/"+user.getName()+"/"+user.getPassword();
else return "null";
}
}
7. 配置页面引擎、前端页面
这里采用SpringMVC(SpringBoot还提供thymeleaf
,freemaker
等)。这里需要配置其静态资源(js、css文件、图片文件等)路径,以及html页面文件路径,参考SpringMVC在Spring下的配置。
#视图层控制
spring.mvc.view.prefix=classpath:/templates/
spring.mvc.view.suffix=.html
spring.mvc.static-path-pattern=/static/**
在resource目录下新建templates(html文件)以及static(js、css文件、图片文件)目录
返回了一个“user/index”页面,所以在templates下新建user目录,在user目录下新建index.html页面,这里就不写什么了,默认页面,通过相对路径引入js文件,js文件里只做示意,弹出一个alert()。
user/index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<script src="../static/scripts/jquery.min.js"></script>
<script src="../static/scripts/test.js"></script>
<title>Title</title>
</head>
<h1>TEST PAGE</h1>
<body>
</body>
</html>
static/scripts/test.js
$(document).ready(function (){
alert("OK TEST");
});
8. 配置JPA类
config目录中,jpa配置类
@Order(Ordered.HIGHEST_PRECEDENCE)
@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
@EnableJpaRepositories(basePackages = "com.song.repository")
@EntityScan(basePackages = "com.song.entity")
public class JpaConfiguration {
@Bean
PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor(){
return new PersistenceExceptionTranslationPostProcessor();
}
}
9. 配置项目启动入口
@ComponentScan(basePackages = “com.song”) /根据定义的扫描路径,把符合扫描规则的类装配到spring容器中
@SpringBootApplication
@ComponentScan(basePackages = "com.song")
public class Entry {
public static void main(String[] args) throws Exception {
SpringApplication.run(Entry.class, args);
}
}
http://localhost:8080/user/index :显示测试页面,并弹出alert(),
http://localhost:8080/user/show?name=**:显示user信息。
jpa介绍
hibernate底层默认,
实体类:
@Entity注解表示为实体类
@Table(name="")这个类对应的表名,主要有下划线
@Id表明主键
@GeneratedValue(Strategy=GenerationType.IDENTITY)表明自增长
@Column(name=“id”)对应数据库字段名
dao接口
继承了JpaRepository,并且提供泛型<Category,Integer> 表示这个是针对Category类的DAO,Integer表示主键是Integer类型。
JpaRepository 这个父接口,就提供了CRUD, 分页等等一系列的查询了,直接拿来用,都不需要二次开发的了。