文章标题spring-boot + spring-data-jpa 实现简单的增删改查

4 篇文章 0 订阅

JPA(Java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有Hibernate、TopLink等。

  1. 示例环境
    • jdk 1.8
    • spring-boot 2.0.0
    • spring-data-jpa
    • idea2015
    • OS: Windows10
    • mysql (springboot)
    • *
  2. 需求

    请求类型请求路径功能
    GET/girls获取女生列表
    POST/girls创建一个女生
    GET/girls/id通过id查询一个女生
    PUT/girls/id通过id更新一个女生
    DELETE/girls/id通过id删除一个女生
  3. 添加jar包 (在spring-boot helloworld的pom.xml文件中添加以下包)

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.40</version>
    </dependency>
  4. 项目名称: girl

  5. 项目目录结构:

  6. 配置文件 applicatin.yml

    spring:
      datasource:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost/springboot
        username: root
        password: ****
      jpa:
        hibernate:
          # create:表示启动的时候先drop,再create
          # create-drop: 也表示创建,只不过再系统关闭前执行一下drop
          # update: 这个操作启动的时候会去检查schema是否一致,如果不一致会做scheme更新
          # validate: 启动时验证现有schema与你配置的hibernate是否一致,如果不一致就抛出异常,并不做更新
          ddl-auto: update
        # 显示sql语句
        show-sql: true
    
  7. 数据库 springboot

  8. tb_girl 表对应的实体类

    @Entity
    @Table( name = "tb_girl")
    public class Girl {
    
        @Id
        @GeneratedValue
        private Integer id;
    
        private String cupSize;
    
        private Integer age;
    
        public Girl() {
        }
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getCupSize() {
            return cupSize;
        }
    
        public void setCupSize(String cupSize) {
            this.cupSize = cupSize;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    }
  9. tb_girl 表对应的dao接口 (关于主键的增删改查可不写)

    public interface GirlRepository extends JpaRepository<Girl,Integer> {
    
        /**
         * 通过年龄查询
         * @param age
         * @return
         */
        List<Girl> findByAge(Integer age);
    
    }
  10. controller

    @RestController
    public class GirlContrller {
    
        @Autowired
        private GirlRepository girlRepository;
        @Autowired
        private GirlService girlService;
    
        /**
         * 查询所有女生
         * @return
         */
        @GetMapping(value = "/girls")
        @ResponseBody
        public List<Girl> girlList(){
            return girlRepository.findAll();
        }
    
        /**
         * 添加一个女生
         * @param cupSize
         * @param age
         * @return
         */
        @PostMapping(value="/girls")
        public Girl girlAdd(@RequestParam("cupSize") String cupSize,
                              @RequestParam("age") Integer age){
            Girl girl = new Girl();
            girl.setCupSize(cupSize);
            girl.setAge(age);
    
            return girlRepository.save(girl);
        }
    
        /**
         * 查询一个女生
         * @param id
         * @return
         */
        @GetMapping(value="/girls/{id}")
        public Girl girlFindOne(@PathVariable("id") Integer id){
            return girlRepository.findOne(id);
        }
    
        /**
         * 更新一个女生
         * @param id
         * @param cupSize
         * @param age
         * @return
         */
        @PutMapping(value="/girls/{id}")
        public Girl girlUpdate(@PathVariable("id") Integer id,
                               @RequestParam("cupSize") String cupSize,
                               @RequestParam("age") Integer age){
            Girl girl = girlRepository.findOne(id);
            girl.setCupSize(cupSize);
            girl.setAge(age);
            return girlRepository.save(girl);
        }
    
        /**
         * 删除一个女生
         * @param id
         */
        @DeleteMapping(value="/girls/{id}")
        public void girlDelete(@PathVariable("id") Integer id){
            girlRepository.delete(id);
        }
    
        /**
         * 通过年龄查找
         * @param age
         * @return
         */
        @GetMapping(value="/girls/age/{age}")
        public List<Girl> girlListByAge(@PathVariable("age") Integer age){
            return girlRepository.findByAge(age);
        }
    
    }
  11. 启动项目

  12. 测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这里是一个简单Spring-boot+Spring-batch+hibernate+Quartz 的批量读文件数据的例子。 首先,需要在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-batch</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> ``` 在 application.yml 文件中配置数据源和 Quartz: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true username: root password: root jpa: hibernate: ddl-auto: update show-sql: true quartz: job-store-type: jdbc jdbc: initialize-schema: always ``` 接下来,定义实体类 FileData: ```java @Entity @Table(name = "file_data") public class FileData { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "file_name") private String fileName; @Column(name = "line_number") private Integer lineNumber; @Column(name = "line_data") private String lineData; // getter and setter } ``` 定义读取文件的 ItemReader: ```java @Component @StepScope public class FileItemReader implements ItemReader<String> { private static final Logger LOGGER = LoggerFactory.getLogger(FileItemReader.class); private String file; private BufferedReader reader; @Value("#{jobParameters['file']}") public void setFile(String file) { this.file = file; } @BeforeStep public void beforeStep(StepExecution stepExecution) throws Exception { LOGGER.info("Starting to read file: {}", file); reader = new BufferedReader(new FileReader(file)); } @Override public String read() throws Exception { String line = reader.readLine(); if (line != null) { LOGGER.debug("Read line: {}", line); } else { LOGGER.info("Finished reading file: {}", file); reader.close(); } return line; } } ``` 定义处理数据的 ItemProcessor: ```java @Component public class FileItemProcessor implements ItemProcessor<String, FileData> { private static final Logger LOGGER = LoggerFactory.getLogger(FileItemProcessor.class); @Override public FileData process(String line) throws Exception { LOGGER.debug("Processing line: {}", line); String[] parts = line.split(","); FileData fileData = new FileData(); fileData.setFileName(parts[0]); fileData.setLineNumber(Integer.parseInt(parts[1])); fileData.setLineData(parts[2]); return fileData; } } ``` 定义数据的 ItemWriter: ```java @Component public class FileItemWriter implements ItemWriter<FileData> { private static final Logger LOGGER = LoggerFactory.getLogger(FileItemWriter.class); @Autowired private EntityManager entityManager; @Override @Transactional public void write(List<? extends FileData> items) throws Exception { LOGGER.info("Writing {} items", items.size()); for (FileData item : items) { entityManager.persist(item); } entityManager.flush(); } } ``` 定义 Job: ```java @Configuration @EnableBatchProcessing public class BatchConfiguration { @Autowired private JobBuilderFactory jobBuilderFactory; @Autowired private StepBuilderFactory stepBuilderFactory; @Autowired private FileItemReader fileItemReader; @Autowired private FileItemProcessor fileItemProcessor; @Autowired private FileItemWriter fileItemWriter; @Bean public Job fileToDatabaseJob() { return jobBuilderFactory.get("fileToDatabaseJob") .incrementer(new RunIdIncrementer()) .start(step1()) .build(); } @Bean public Step step1() { return stepBuilderFactory.get("step1") .<String, FileData>chunk(10) .reader(fileItemReader) .processor(fileItemProcessor) .writer(fileItemWriter) .build(); } } ``` 定义 Quartz 定时任务: ```java @Component public class FileToDatabaseJobScheduler { @Autowired private SchedulerFactory schedulerFactory; @Autowired private JobDetail fileToDatabaseJobDetail; @Autowired private CronTriggerFactoryBean fileToDatabaseJobTrigger; @PostConstruct public void scheduleFileToDatabaseJob() throws SchedulerException { Scheduler scheduler = schedulerFactory.getScheduler(); scheduler.scheduleJob(fileToDatabaseJobDetail, fileToDatabaseJobTrigger.getObject()); scheduler.start(); } } ``` 最后,启动应用程序并将文件作为参数传递: ```java @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean @StepScope public FileItemReader fileItemReader(@Value("#{jobParameters['file']}") String file) { FileItemReader reader = new FileItemReader(); reader.setFile(file); return reader; } @Bean public JobDetail fileToDatabaseJobDetail() { return JobBuilder.newJob(BatchConfiguration.class) .withIdentity("fileToDatabaseJob") .storeDurably() .build(); } @Bean public CronTriggerFactoryBean fileToDatabaseJobTrigger(@Autowired JobDetail fileToDatabaseJobDetail) { CronTriggerFactoryBean trigger = new CronTriggerFactoryBean(); trigger.setJobDetail(fileToDatabaseJobDetail); trigger.setCronExpression("0 0/1 * 1/1 * ? *"); // 每分钟执行一次 return trigger; } } ``` 以上就是一个简单Spring-boot+Spring-batch+hibernate+Quartz 的批量读文件数据的例子。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值