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("%杨%");
    }
}

 运行结果:

 

 

 其他的请自行测试

 

posted @ 2019-06-02 17:22  Cool_Yang  阅读(538)  评论(0编辑  收藏  举报