SpringBoot整合JpaMapper实现基于mybatis的快速开发

SpringBoot整合JpaMapper实现基于mybatis的快速开发

官方主页

Jpa-Mapper

概述

Jpa-Mapper是一款基于Mybatis的快速开发工具,能将jpa-hibernate的书写风格基于mybatis实现,同时保留mybatis的特性。基于Jpa-Mapper,我们可以使用mybatis的同时,方便快捷地生成我们的CRUD代码。

本篇主要介绍SpringBoot基于Jpa-Mapper实现CRUD功能。

开始搭建

pom.xml文件

首先引入maven的依赖jar包



    4.0.0
    spring-boot-example
    jar
    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.4.RELEASE
    
    spring-boot-example
    Demo project for Spring Boot
    
        UTF-8
        UTF-8
        1.8
        UTF-8
        3.4.6
        1.3.2
        1.3.0
        1.0
        2.0
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            mysql
            mysql-connector-java
        
        
            org.apache.commons
            commons-dbcp2
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            ${mybatis-spring.version}
        
        
            cn.pomit
            jpa-mapper-spring-boot-starter
            ${jpa-mapper.version}
        
        
        
        
            javax.persistence
            persistence-api
            1.0
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    




SpringBoot配置文件application.properties

server.port=8080

spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/feiyun?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
spring.datasource.username=cff
spring.datasource.password=123456

spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource
spring.datasource.dbcp2.max-wait-millis=60000
spring.datasource.dbcp2.min-idle=20
spring.datasource.dbcp2.initial-size=2
spring.datasource.dbcp2.validation-query=SELECT 1
spring.datasource.dbcp2.connection-properties=characterEncoding=utf8
spring.datasource.dbcp2.validation-query=SELECT 1
spring.datasource.dbcp2.test-while-idle=true
spring.datasource.dbcp2.test-on-borrow=true
spring.datasource.dbcp2.test-on-return=false

mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

SpringBoot启动文件


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;

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

到这里,SpringBoot的环境已经建好了,下面可以引入JpaMapper了。

JpaMapper引入

建表sql

首先建好表,如建表语句为:

CREATE TABLE `f_personal_info` (
  `domain` varchar(16) NOT NULL DEFAULT '',
  `user_name` varchar(64) DEFAULT NULL,
  `real_name` varchar(64) DEFAULT NULL,
  `mobile` varchar(13) DEFAULT NULL,
  `web_name` varchar(100) DEFAULT NULL,
  `email` varchar(64) DEFAULT NULL,
  `content` text,
  `file_id` bigint(20) DEFAULT NULL,
  `status` int(4) DEFAULT NULL COMMENT '0:通过 1:待审核 2:拒绝',
  `edit_type` int(1) unsigned zerofill DEFAULT NULL COMMENT '0:文件修改 1:文件无修改',
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`domain`)
)

建表语句可以直接从navcat复制。

生成实体

生成实体domain。(可以在网站https://www.pomit.cn/java/java/sqlToSpringboot.html一站式生成实体、DAO、Service、Controller)

在网站上生成的实体是Jpa-hibernate的实体,我们需要做下简单调整,将所有映射到数据库的实体都要加上@Column。

实体PersonalInfo:


import javax.persistence.Table;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Id;

@Table(name = "f_personal_info")
public class PersonalInfo {
    @Id
    @Column()
    private String domain;
    @Column(name = "user_name")
    private String userName;
    @Column(name = "real_name")
    private String realName;
    @Column()
    private String mobile;
    @Column(name = "web_name")
    private String webName;
    @Column()
    private String email;
    @Column()
    private String content;
    @Column(name = "file_id")
    private long fileId;
    @Column(name = "edit_type")
    private long editType;
    
    private String webUrl;
    
    @Column()
    private Integer status;
    
    @Column(name = "create_time")
    private Date createTime;

    public void setDomain(String domain) {
        this.domain = domain;
    }

    public String getDomain() {
        return domain;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserName() {
        return userName;
    }

    public void setRealName(String realName) {
        this.realName = realName;
    }

    public String getRealName() {
        return realName;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getMobile() {
        return mobile;
    }

    public void setWebName(String webName) {
        this.webName = webName;
    }

    public String getWebName() {
        return webName;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEmail() {
        return email;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getContent() {
        return content;
    }

    public void setFileId(long fileId) {
        this.fileId = fileId;
    }

    public long getFileId() {
        return fileId;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getWebUrl() {
        return webUrl;
    }

    public void setWebUrl(String webUrl) {
        this.webUrl = webUrl;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public long getEditType() {
        return editType;
    }

    public void setEditType(long editType) {
        this.editType = editType;
    }
}

生成DAO

生成Dao(或者说Mapper)。(可以在网站https://www.pomit.cn/java/java/sqlToSpringboot.html一站式生成实体、DAO、Service、Controller)

在网站上生成的Dao是Jpa-hibernate的Dao,我们需要做下简单调整,直接将CrudRepository改为CrudMapper即可,另外加上注解@Mapper。

如,PersonalInfoDao:


import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import com.cff.feiyun.api.domain.PersonalInfo;
import cn.pomit.jpamapper.core.mapper.CrudMapper;

@Mapper
public interface PersonalInfoDao extends CrudMapper {
    List findByStatus(int status);
    
    @Select({
        ""})
    public PersonalInfo findByUserNameNewest(@Param("userName") String userName);
}

生成Service

生成Service。(可以在网站https://www.pomit.cn/java/java/sqlToSpringboot.html一站式生成实体、DAO、Service、Controller)

如,PersonalInfoService:


import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.cff.feiyun.api.dao.PersonalInfoDao;
import com.cff.feiyun.api.domain.PersonalInfo;

@Service
public class PersonalInfoService {
    @Autowired
    PersonalInfoDao personalInfoDao;

    public void save(PersonalInfo personalInfo) {
        personalInfoDao.save(personalInfo);
    }

    public void delete(PersonalInfo personalInfo) {
        personalInfoDao.deleteEntity(personalInfo);
    }

    public void update(PersonalInfo personalInfo) {
        personalInfoDao.update(personalInfo);
    }

    public List findAll() {
        return (List) personalInfoDao.findAll();
    }
    
    public PersonalInfo findById(String id) {
        return personalInfoDao.findOne(id);
    }
}

生成Controller

生成Controller。(可以在网站https://www.pomit.cn/java/java/sqlToSpringboot.html一站式生成实体、DAO、Service、Controller)

如,PersonalInfoWeb:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.cff.feiyun.api.domain.PersonalInfo;
import com.cff.feiyun.api.dto.ResultModel;
import com.cff.feiyun.api.service.PersonalInfoService;


@RestController
@RequestMapping("/personalInfo")
public class PersonalInfoWeb {
    @Autowired
    PersonalInfoService fPersonalInfoService;

    @RequestMapping(value = "/add", method = { RequestMethod.POST })
    public ResultModel add(@RequestBody PersonalInfo fPersonalInfo) {
        fPersonalInfoService.save(fPersonalInfo);
        return ResultModel.ok();
    }
    
    @RequestMapping(value = "/delete", method = { RequestMethod.POST })
    public ResultModel delete(@RequestBody PersonalInfo fPersonalInfo) {
        fPersonalInfoService.delete(fPersonalInfo);
        return ResultModel.ok();
    }
    
    @RequestMapping(value = "/update", method = { RequestMethod.POST })
    public ResultModel update(@RequestBody PersonalInfo fPersonalInfo) {
        fPersonalInfoService.save(fPersonalInfo);
        return ResultModel.ok();
    }
    
    @RequestMapping(value = "/getAll", method = { RequestMethod.GET })
    public ResultModel getAll() {
        return ResultModel.ok(fPersonalInfoService.findAll());
    }
    
    @RequestMapping(value = "/getOne", method = { RequestMethod.GET })
    public ResultModel getOne(@RequestParam("id") String id) {
        return ResultModel.ok(fPersonalInfoService.findById(id));
    }
    
}
/**
 * @author cff
 */
public class ResultModel {

    private int code;
    private String msg;
    private Object data;
    
    public ResultModel(){
        
    }

    public ResultModel(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public ResultModel(int code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    public int getcode() {
        return code;
    }

    public void setcode(int code) {
        this.code = code;
    }

    public String getmsg() {
        return msg;
    }

    public void setmsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public static ResultModel ok() {
        return new ResultModel(0,'成功');
    }

    public static ResultModel ok(Object data) {
        return new ResultModel(0,'成功', data);
    }

    public static ResultModel error() {
        return new ResultModel(1,'失败');
    }

    public static ResultModel error(String msg) {
        return new ResultModel(1, msg);
    }
}

至此SpringBoot和JpaMppaer整合可以正常使用了。

你可能感兴趣的:(SpringBoot整合JpaMapper实现基于mybatis的快速开发)