前言
雖然mybatis已經有了代碼生成,可是對於SpringBoot 項目來講生成的仍是須要改動,並且也沒得邏輯層,和控制層。可是這些東西是逃避不了,因此我就針對單表,作了一個代碼生成器。javascript
mybatis-dsc-generator
根據完善的數據庫表結構,一鍵生成dao.java,mapper.xml,service.java,serviceImpl.java,controller.java,完成單表的增刪改查、組合條件集合查詢,組合條件分頁查詢。java
源碼地址
- GitHub:https://github.com/flying-cattle/mybatis-dsc-generator
- 碼雲:https://gitee.com/flying-cattle/mybatis-dsc-generator
MAVEN地址
<dependency> <groupId>com.github.flying-cattle</groupId> <artifactId>mybatis-dsc-generator</artifactId> <version>1.0.0.RELEASE</version> </dependency>
數據表結構樣式
CREATE TABLE `order` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `order_no` varchar(50) NOT NULL COMMENT '訂單編號', `uid` bigint(20) NOT NULL COMMENT '用戶ID', `source` varchar(50) NOT NULL COMMENT '來源', `product_id` bigint(20) NOT NULL COMMENT '產品ID', `product_name` varchar(100) NOT NULL COMMENT '產品名字', `unit_price` int(10) unsigned NOT NULL COMMENT '單價', `number` int(10) unsigned NOT NULL COMMENT '數量', `selling_price` int(11) DEFAULT NULL COMMENT '賣價', `state` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '0等待支付,1支付成功,2支付失敗,3撤銷', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間', `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '交易變化時間', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='訂單信息';
要求必須有表註釋,要求必須有主鍵爲id,切爲bigint,全部字段必須有註釋(便於生成java註釋)。git
生成的實體類
生成方法參考源碼中的:https://github.com/flying-cattle/mybatis-dsc-generator/blob/master/src/main/java/com/github/mybatis/test/TestMain.javagithub
生成的實體類
/** * @filename:Order 2018年7月5日 * @project deal-center V1.0 * Copyright(c) 2018 BianP Co. Ltd. * All right reserved. */ package com.xin.dealcenter.entity; import java.io.Serializable; import java.util.Date; import org.springframework.format.annotation.DateTimeFormat; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.ToString; import lombok.NoArgsConstructor; import lombok.AllArgsConstructor; /** * * @Description: 訂單 * @Author: BianP * @CreateDate: 2018年7月5日 * @Version: V1.0 * */ @Data @ToString @AllArgsConstructor @NoArgsConstructor public class Order implements Serializable { private static final long serialVersionUID = 1531104207412L; @ApiModelProperty(name = "id" , value = "ID") private Long id; @ApiModelProperty(name = "orderNo" , value = "訂單編號") private String orderNo; @ApiModelProperty(name = "uid" , value = "用戶ID") private Long uid; @ApiModelProperty(name = "source" , value = "來源") private String source; @ApiModelProperty(name = "productId" , value = "產品ID") private Long productId; @ApiModelProperty(name = "productName" , value = "產品名字") private String productName; @ApiModelProperty(name = "unitPrice" , value = "單價") private Integer unitPrice; @ApiModelProperty(name = "number" , value = "數量") private Integer number; @ApiModelProperty(name = "sellingPrice" , value = "賣價") private Integer sellingPrice; @ApiModelProperty(name = "state" , value = "0等待支付,1支付成功,2支付失敗,3撤銷") private Integer state; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @ApiModelProperty(name = "createTime" , value = "建立時間") private Date createTime; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @ApiModelProperty(name = "updateTime" , value = "交易變化時間") private Date updateTime; }
生成的DAO
/** * @filename:OrderDao 2018年7月5日 * @project deal-center V1.0 * Copyright(c) 2018 BianP Co. Ltd. * All right reserved. */ package com.xin.dealcenter.dao; import java.util.List; import org.apache.ibatis.annotations.Mapper; import com.xin.dealcenter.entity.Order; /** * * @Description: 訂單——DAO * @Author: BianP * @CreateDate: 2018年7月5日 * @Version: V1.0 * */ @Mapper public interface OrderDao { public Order selectByPrimaryKey(Long id); public int deleteByPrimaryKey(Long id); public int insertSelective(Order order); public int updateByPrimaryKeySelective(Order order); public List<Order> queryOrderList(Order order); }
生成的XML
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xin.dealcenter.dao.OrderDao"> <resultMap id="BaseResultMap" type="com.xin.dealcenter.entity.Order"> <id column="id" jdbcType="BIGINT" property="id" /> <id column="order_no" jdbcType="VARCHAR" property="orderNo" /> <id column="uid" jdbcType="BIGINT" property="uid" /> <id column="source" jdbcType="VARCHAR" property="source" /> <id column="product_id" jdbcType="BIGINT" property="productId" /> <id column="product_name" jdbcType="VARCHAR" property="productName" /> <id column="unit_price" jdbcType="INTEGER" property="unitPrice" /> <id column="number" jdbcType="INTEGER" property="number" /> <id column="selling_price" jdbcType="INTEGER" property="sellingPrice" /> <id column="state" jdbcType="INTEGER" property="state" /> <id column="create_time" jdbcType="TIMESTAMP" property="createTime" /> <id column="update_time" jdbcType="TIMESTAMP" property="updateTime" /> </resultMap> <sql id="Base_Column_List"> id, order_no, uid, source, product_id, product_name, unit_price, number, selling_price, state, create_time, update_time </sql> <!-- 查詢 --> <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from order where id = #{id,jdbcType=BIGINT} </select> <!-- 刪除 --> <delete id="deleteByPrimaryKey" parameterType="java.lang.Long"> delete from order where id = #{id,jdbcType=BIGINT} </delete> <!-- 選擇添加 --> <insert id="insertSelective" parameterType="com.xin.dealcenter.entity.Order"> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long"> SELECT LAST_INSERT_ID() </selectKey> insert into order <trim prefix="(" suffix=")" suffixOverrides=","> <if test="id != null"> id, </if>