zoukankan      html  css  js  c++  java
  • 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》

  • 相关阅读:
    TPM Key相关概念
    (转)eclipse报错及解决说明 "XX cannot be resolved to a type "
    (转)Bat Command
    (转)Linux下查看文件和文件夹大小 删除日志
    (转)每天一个linux命令(50):crontab命令
    (转)Vi命令详解
    (转)maven打包时跳过测试
    (转)mybatis常用jdbcType数据类型
    (转)MyBatis在插入的数据有空值时,可能为空的字段都要设置jdbcType
    (转)mybatis:动态SQL
  • 原文地址:https://www.cnblogs.com/deepSleeping/p/10939860.html
Copyright © 2011-2022 走看看