SpringBoot Jpa操作

JPA简介:JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中,Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。

1、构建Spring Boot基础项目,引入JPA依赖和数据库连接支持

添加pom文件的依赖:

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
 </dependency>
<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
</dependency>

2、添加application.ym的配置文件【注意格式】

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/yh01_boot_jpa?serverTimezone=GMT%2B8
    username: root
    password: 123456
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

3.编写实体类User

/*
    @Entity 表示当前类为实体类
    @Table  表示和数据库中哪张表对应,name的值表示数据库中的表名,如果没有系统会使用默认值(实体的短类名)
    @Id     表示主键
    @GeneratedValue 表示主键生成策略,在此使用的是主键自增
    @Column 表示类属性和表里面的那个列映射关系
    @ManyToOne  指User实体和Department实体是多对一的关系
    @JoinColumn 与ManyToOne配合使用,说明外键字段是department_id
    @JsonIgnoreProperties  防止Controller控制层直接返回实体json串报错
 */
@Entity
@Table(name = "user")
@JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @Column(name = "name")
    private String name;
    @Column(name = "password")
    private String password;
    @Column(name = "createdate")
    private Date   createDate;
    //部门
    @Column(name = "partname")
    private String partName;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name=‘" + name + ‘\‘‘ +
                ", password=‘" + password + ‘\‘‘ +
                ", createDate=" + createDate +
                ", partName=‘" + partName + ‘\‘‘ +
                ‘}‘;
    }

    。。。。。此处省略get/set方法
}

4.实现Repository 接口

public interface UserRepository extends JpaRepository<User,Integer> {

    // 以下: 自定义查询方法

    /*
        描述:通过名字查询用户信息
        相当于 select * from user where name= ? 1
     */
    List<User> findByName(String name);

    /*
        描述:通过Like查询 ,参数位为name 注意 ?1 之间没有空格
        相当于:select * from user where name like ?1
        也可以写成:select * from user where name like :name   注意name与参数名一致

        JPQL语句 :注意from后面跟的是实体类名,?1表示第一个参数
        nativeQuery默认false,表示不是标准sql语句,将自动做转换处理
     */

    List<User> findByNameLike(String name);

    //SQL查询
    //@Query(value = "select * from user where name like ?1",nativeQuery =true)
    @Query(value = "select * from user where name like :name",nativeQuery =true)
    List<User> findByNameLike2(String name);

    //JPQL查询 对应实体类[必须与实体类同名区分大小写]
    //@Query("select  u from User u where u.name like ?1")
    @Query("select  u from User u where u.name like :name")
    List<User> findByNameLike3(String name);

    /*
        描述:通过主键id集合查询,参数为id集合

     */
    List<User> findByIdIn(Collection<Integer> ids);

    /*
        更新语句 :
        @Query还允许更新、删除语句,此时必须搭配@Modifying使用
        注意调用方法前需加上@Transactional 事务注解,不然go调用会出错
     */
    @Modifying
    @Query("update User u set u.name = ?1 where u.id = ?2 ")
    int updateUser(String name,Integer id);

}

5.创建服务层UserService接口

public interface UserService {

    User save(User user);
    void deleteUserById(Integer id);
    User findUserById(Integer id);
    List<User> findAllUser();

    /*
        分页,查询时只需要传入一个Pageable接口实现的类,
        指定pageNumber和pageSize即可。
     */
    Page<User> findAllUserPage(Pageable pageable);

    //自定义方法查询
    List<User> findByName(String name);
    List<User> findByNameLike(String name);
    List<User> findByNameLike2(String name);
    List<User> findByNameLike3(String name);
    List<User> findByIdIn(Collection<Integer> ids);

    int updateUserNameById(String name,Integer id);
}

6.实现服务层接口UserServiceImpl

/*
    @Service    Spring Boot会自动扫描@Component注解的类,并且把这些类纳入Spring容器中管理。
    也可以使用@Compoent注解,只是@Service注解更能表明该类是服务层类
 */
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public User findUserById(Integer id) {
        return userRepository.getOne(id);
    }

    @Override
    public List<User> findAllUser() {
        return userRepository.findAll();
    }

    @Override
    public User save(User user) {
        return userRepository.save(user);
    }

    @Override
    public void deleteUserById(Integer id) {
        userRepository.deleteById(id);
    }

    @Override
    public Page<User> findAllUserPage(Pageable pageable) {
        return userRepository.findAll(pageable);
    }

    @Override
    public List<User> findByName(String name) {
        return userRepository.findByName(name);
    }

    @Override
    public List<User> findByNameLike(String name) {
        return userRepository.findByNameLike(name);
    }

    @Override
    public List<User> findByNameLike2(String name) {
        return userRepository.findByNameLike2(name);
    }

    @Override
    public List<User> findByNameLike3(String name) {
        return userRepository.findByNameLike3(name);
    }

    @Override
    public List<User> findByIdIn(Collection<Integer> ids) {
        return userRepository.findByIdIn(ids);
    }

    @Override
    public int updateUserNameById(String name, Integer id) {
        return userRepository.updateUser(name,id);
    }
}

7.创建UserControlle控制类测试

Controller测试:

@Controller
@RequestMapping("/user")
public class UserController {
    //模糊查询
    @RequestMapping("/getUserListByNameLike")
    public @ResponseBody List<User> getUserListByNameLike(){
        return userService.findByNameLike("%杨%");
    }
}

 运行结果:

 其他的请自行测试

原文地址:https://www.cnblogs.com/yanghe123/p/10963541.html

时间: 2024-08-30 16:50:39

SpringBoot Jpa操作的相关文章

【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础认证权限

开发环境搭建参见<[原]无脑操作:IDEA + maven + SpringBoot + JPA + Thymeleaf实现CRUD及分页> 需求: ① 除了登录页面,在地址栏直接访问其他URL,均跳转至登录页面 ② 登录涉及帐号和密码,帐号错误提示帐号错误,密码错误提示密码错误 ③ 登录成功跳转至首页,首页显示登录者帐号信息,并有注销帐号功能,点击注销退出系统 ------------------------------------------------------------------

SpringBoot + Jpa(Hibernate) 架构基本配置

1.基于springboot-1.4.0.RELEASE版本测试 2.springBoot + Hibernate + Druid + Mysql + servlet(jsp) 一.maven的pom文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52

SpringBoot JPA + H2增删改查示例

下面的例子是基于SpringBoot JPA以及H2数据库来实现的,下面就开始搭建项目吧. 首先看下项目的整体结构: 具体操作步骤: 打开IDEA,创建一个新的Spring Initializr项目,填写好groupID等信息,依赖勾选web和H2,一路next: pom.xml关键依赖: <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactI

SpringBoot JPA懒加载异常 - com.fasterxml.jackson.databind.JsonMappingException: could not initialize proxy

问题与分析 某日忽然发现在用postman测试数据时报错如下: com.fasterxml.jackson.databind.JsonMappingException: could not initialize proxy [com.cbxsoftware.cbx.attachment.entity.RefAttachment#c109ec36e60c4a89a10eabc72416d984] - no Session (through reference chain: com.cbxsoftw

spring-boot jpa mysql emoji utfmb4 异常处理

spring-boot jpa mysql utf8mb4 emoji 写入失败 mysql database,table,column 默认为utf8mb4 Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\xAD' for column 'title' at row 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)

一篇搞定spring Jpa操作数据库

开始之前你必须在项目配置好数据库,本文使用的spring boot,相比spring,spring boot省去了很多各种对以来组件复杂的配置,直接在pom配置组件,完后会自动帮我们导入组件 <!-- 导入SpringDataJPA的坐标 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa<

springboot+jpa+mysql+redis+swagger整合步骤

springboot+jpa+MySQL+swagger框架搭建好之上再整合redis: 在电脑上先安装redis: 一.在pom.xml中引入redis 二.在application.yml里配置redis,单独说明:redis刚一开始安装好是没有设置密码的.否则,会报connection错误. 三.在service配置Redis,需要说明的在方法前配置@Cacheable中只有value没有可以,key默认跟value一样. 四.在controller里实现Redis的一种方式 原文地址:h

SpringBoot Jpa 自定义查询

SpringBoot Jpa 自定义查询 持久层Domain public interface BaomingDao extends JpaRepository<BaomingBean,Integer> { @Query(value = "select distinct t.actid from BaomingBean t where t.belongs=?1") List<String> findDistinctActid(String belongs); /

SpringBoot JPA实现增删改查、分页、排序、事务操作等功能

今天给大家介绍一下SpringBoot中JPA的一些常用操作,例如:增删改查.分页.排序.事务操作等功能.下面先来介绍一下JPA中一些常用的查询操作: //And --- 等价于 SQL 中的 and 关键字,比如 findByHeightAndSex(int height,char sex): public List<User> findByHeightAndSex(int height,char sex); // Or --- 等价于 SQL 中的 or 关键字,比如 findByHeig