Spring Boot JPA

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还提供thymeleaffreemaker等)。这里需要配置其静态资源(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, 分页等等一系列的查询了,直接拿来用,都不需要二次开发的了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值