SpringBoot-JPA入门

SpringBoot-JPA入门

JPA就是Spring集成了hibernate感觉。

注解,方法仓库(顾名思义的方法,封装好了,还有自定义的方法)。

案例:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
    #指定数据库连接池类型
    type: org.apache.commons.dbcp2.BasicDataSource
    dbcp2:
      #最大等待连接中的数量,设0位没有限制
      max-idle: 10
      #最大连接活动数
      max-total: 50
      #最大等待毫秒数,单位为ms,超过时间会出错误信息
      max-wait-millis: 10000
      #数据库连接初始化连接数
      initial-size: 5
  jpa:
    database-platform: org.hibernate.dialect.MySQLDialect
    show-sql: true
    hibernate:
      ddl-auto: update
package com.lanqiao.springbootjdbc.pojo;

import com.lanqiao.springbootjdbc.converter.SexConverter;
import com.lanqiao.springbootjdbc.enumeration.SexEnum;
import lombok.Data;

import javax.persistence.*;

/**
 * @author DeepSleeping
 * @date 2019/5/28 16:17
 * @description
 */
@Data
@Entity(name = "user")
@Table(name = "t_user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id = null;
    @Column(name = "user_name")
    private String userName = null;
    @Convert(converter = SexConverter.class)
    private SexEnum sex = null;
    private String note = null;
}
package com.lanqiao.springbootjdbc.dao;

import com.lanqiao.springbootjdbc.pojo.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.List;

public interface JpaUserRepository extends JpaRepository<User, Long> {

    @Query("from user where user_name like concat('%',?1,'%') and note like concat('',?2,'%') ")
    public List<User> findUsers(String userName, String note);

    /**
     * @description 按用户名称模糊查询
     * @author DeepSleeping
     * @date 2019/5/28 19:40
     */
    List<User> findByUserNameLike(String userName);

    /**
     * @description 根据主键查询
     * @author DeepSleeping
     * @date 2019/5/28 19:41
     */
    User getUserById(Long id);

    /**
     * @description 按照用户名称或者备注进行模糊查询
     * @author DeepSleeping
     * @date 2019/5/28 19:42
     */
    List<User> findByUserNameLikeOrNoteLike(String userName, String note);
}
package com.lanqiao.springbootjdbc.service.impl;

import com.lanqiao.springbootjdbc.enumeration.SexEnum;
import com.lanqiao.springbootjdbc.pojo.User;
import com.lanqiao.springbootjdbc.service.JdbcTmplUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Service;

import java.sql.ResultSet;
import java.sql.Statement;
import java.util.List;

/**
 * @author DeepSleeping
 * @date 2019/5/28 16:28
 * @description
 */
@Service
public class JdbcTmplUserServiceImpl implements JdbcTmplUserService {


    @Autowired
    private JdbcTemplate jdbcTemplate;

    /**
     * @description 获取映射关系
     * @author DeepSleeping
     * @date 2019/5/28 16:29
     */
    private RowMapper<User> getUserMapper() {
        RowMapper<User> userRowMapper = (ResultSet rs, int rownum) -> {
            User user = new User();
            user.setId(rs.getLong("id"));
            user.setUserName(rs.getString("user_name"));
            int setId = rs.getInt("sex");
            SexEnum sex = SexEnum.getEnumById(setId);
            user.setSex(sex);
            user.setNote(rs.getString("note"));
            return user;
        };
        return userRowMapper;
    }


    @Override
    public User getUser(Long id) {
        String sql = "select id,user_name,sex,note from t_user where id = ?";
        //参数
        Object[] params = new Object[]{id};
        User user = jdbcTemplate.queryForObject(sql, params, getUserMapper());
        return user;
    }

    @Override
    public List<User> findUsers(String userName, String note) {
        String sql = "select id,user_name,sex,note from t_user where user_name like concat('%',?,'%') and note like concat('%',?,'%')";
        Object[] params = new Object[]{userName, note};
        List<User> userList = jdbcTemplate.query(sql, params, getUserMapper());
        return userList;
    }

    @Override
    public int insertUser(User user) {
        String sql = "insert into t_user (user_name,sex,note) values(?,?,?)";
        return jdbcTemplate.update(sql, user.getNote(), user.getSex().getId(), user.getNote());
    }

    @Override
    public int updateUser(User user) {
        String sql = "update t_user set user_name = ?,sex=?,note=? where id = ?";
        return jdbcTemplate.update(sql, user.getUserName(), user.getSex().getId(), user.getNote(), user.getId());
    }

    @Override
    public int deleteUser(Long id) {
        String sql = "delete from t_user where id = ?";
        return jdbcTemplate.update(sql, id);
    }

    public User getUser2(Long id) {
        User result = this.jdbcTemplate.execute((Statement stmt) -> {
            String sql1 = "select count(*) total from t_user where id = " + id;
            ResultSet rs1 = stmt.executeQuery(sql1);
            while (rs1.next()) {
                int total = rs1.getInt("total");
                System.out.println(total);
            }

            String sql2 = "select id,user_name,sex,note from t_user where id = " + id;
            ResultSet rs2 = stmt.executeQuery(sql2);
            User user = null;
            while (rs2.next()) {
                int rowNum = rs2.getRow();
                user = getUserMapper().mapRow(rs2, rowNum);
            }
            return user;
        });
        return result;
    }
}
package com.lanqiao.springbootjdbc.controller;

import com.lanqiao.springbootjdbc.dao.JpaUserRepository;
import com.lanqiao.springbootjdbc.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import sun.nio.cs.US_ASCII;

import java.util.List;
import java.util.Optional;

/**
 * @author DeepSleeping
 * @date 2019/5/28 17:05
 * @description
 */
@Controller
@RequestMapping("/jpa")
public class JpaController {
    //注入jpa接口,这里不需要使用实现类

    @Autowired
    private JpaUserRepository jpaUserRepository = null;

    @RequestMapping("/getUser")
    @ResponseBody
    public User getUser(Long id) {
        //使用JPA接口查询对象
        Optional<User> user = jpaUserRepository.findById(id);
        return user.get();
    }

    @RequestMapping("/getUserById")
    @ResponseBody
    public User getUserById(Long id) {
        //使用JPA接口查询对象
        User user = jpaUserRepository.getUserById(id);
        return user;
    }

    @RequestMapping("/findByUserNameLike")
    @ResponseBody
    public List<User> findByUserNameLike(String userName) {
        //使用JPA接口查询对象
        List<User> userList = jpaUserRepository.findByUserNameLike("%" + userName + "%");
        return userList;
    }

    @RequestMapping("/findByUserNameOrNoteLike")
    @ResponseBody
    public List<User> findByUserNameOrNoteLike(String userName, String note) {
        String userNameLike = "%" + userName + "%";
        String noteLike = "%" + note + "%";
        //使用JPA接口查询对象
        List<User> userList = jpaUserRepository.findByUserNameLikeOrNoteLike(userNameLike, noteLike);
        return userList;
    }
}

package com.lanqiao.springbootjdbc.converter;

import com.lanqiao.springbootjdbc.enumeration.SexEnum;

import javax.persistence.AttributeConverter;

/**
 * @author DeepSleeping
 * @date 2019/5/28 17:00
 * @description
 */
public class SexConverter implements AttributeConverter<SexEnum, Integer> {

    /**
     * @description 将枚举转换为数据库列
     * @author DeepSleeping
     * @date 2019/5/28 17:01
     */
    @Override
    public Integer convertToDatabaseColumn(SexEnum sex) {
        return sex.getId();
    }

    @Override
    public SexEnum convertToEntityAttribute(Integer id) {
        return SexEnum.getEnumById(id);
    }
}
package com.lanqiao.springbootjdbc;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@SpringBootApplication
@EnableJpaRepositories(basePackages = "com.lanqiao.springbootjdbc.dao")
@EntityScan(basePackages = "com.lanqiao.springbootjdbc.pojo")
public class SpringbootJdbcApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootJdbcApplication.class, args);
    }

}

 参考书籍:《深入浅出SpringBoot2.x》

原文地址:https://www.cnblogs.com/deepSleeping/p/10939860.html