spring-mybatis代碼生成插件,與實例展示


前段時間看了張開濤寫的代碼生成插件,感覺思路很好,通過連接庫然后獲取數據庫表信息,然后用戶在界面中勾選要映射的策略,映射的字段,然后可以自動生成業務代碼.

基於開濤的思路,自己寫了一個簡易插件,去掉了連接庫操作,改用注解,使用時需要先自行定義實體類,然后使用注解定義那部分映射,如何映射,然后啟動生成,進而生成業務代碼

功能描述:

支持

1.注解自定義映射,.

2.掃描實體類生成對應的業務代碼(業務層、事務層、持久層[接口+接口對應的映射mapper.xml文件])

3.編碼自定義,支持生成注解

4.支持模塊擴展,可以自己定義生成哪個模塊,也可以擴展生成模塊(這塊沒有設計好,擴展代碼比較復雜)

不支持

復雜結構對象映射

目前生成映射xml中的SQL腳本為mysql,只是為了練手而寫,所以后期有時間的話,擴展自定義數據庫

使用實體:

定義實體如下:

//映射表別名
@GeneratorTable(name = "tb_member") public class Member implements Serializable{ //映射該字段,並且為主鍵,自定義字段別名
    @GeneratorField(primaryKey = true, name = "m_Id") private Integer id; @GeneratorField(name = "member_name") private String memberName; //映射時不映射該字段
 @AbolishedField private String address; //不使用注解,默認為使用屬性名進行映射
    private String zipCode; //getter and setter
}

生成配置

public static void main(String [] args){ GeneratorConfig config = new GeneratorConfig(); //代碼根路徑
        config.setSrcRoot("src/main/java"); //掃描的包,默認支持遞歸掃描該包下的東西
        config.setScanBaseModelPackage("com.dobby.code.make.model"); config.setEncoding("UTF-8"); //生成的代碼存放的包
        config.setCodeGeneratorPackage("com.dobby.autocode"); //如果生成的類文件已經存在,是否覆蓋
        config.setCodeExistsOverride(false); //生成注解代碼
        config.setAnnotationSupport(true); //使用插件生成
        new Generator(config).generatorCode(); }

生成前的代碼結構:

生成的代碼模塊,下圖標紅區域

生成的業務層代碼:

package com.dobby.autocode.service; import java.util.List; import com.dobby.common.base.BaseService; import com.dobby.code.make.model.Member; /** * * User: dobby * Date: 2014-11-26 * Time: 21:10:06 * Version: 1.0 * */
public interface MemberService extends BaseService<Member,java.lang.Integer>{ }
View Code
package com.dobby.autocode.service.impl;

import java.util.List;

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

import com.dobby.common.page.Page;

import com.dobby.autocode.service.MemberService;
import com.dobby.autocode.manager.MemberManager;
import com.dobby.code.make.model.Member;

/**
 *
 * User: dobby
 * Date: 2014-11-26
 * Time: 21:10:06
 * Version: 1.0
 *
 */
@Service(value = "memberService")
public class MemberServiceImpl implements MemberService{

    @Autowired
    private MemberManager memberManager;


    /**
     * save  member <br/>
     *
     * @param member
     *         member
     * @return
     *         effect of row number
     */
    @Override
    public int save(Member member){
        return this.memberManager.save(member);
    }


    /**
     * update member <br/>
     *
     * @param member
     *         member
     * @return
     *         effect of row number
     */
    @Override
    public int update(Member member) {
        return this.memberManager.update(member);
    }


    /**
     * delete member by primary key <br/>
     *
     * @param primaryKey
     *         primaryKey
     * @return
     *         effect of row number
     */
    @Override
    public int delete(java.lang.Integer primaryKey){
        return this.memberManager.delete(primaryKey);
    }


    /**
     * delete  member by condition <br/>
     *
     * @param member
     *         condition member
     * @return
     *         effect of row number
     */
    @Override
    public int deleteObjects(Member member) {
        return  this.memberManager.deleteObjects(member);
    }


    /**
     * select  member by primary key <br/>
     *
     * @param primaryKey
     *         primaryKey
     * @return
     *         with the conditions of the one object
     */
    @Override
    public Member select(java.lang.Integer primaryKey) {
        return  this.memberManager.select(primaryKey);
    }

    /**
     * select list  member by condition <br/>
     *
     * @param member
     *         condition member
     * @return
     *         with the conditions of the result set
     */
    @Override
    public List<Member> selectObjects(Member member){
        return this.memberManager.selectObjects(member);
    }


    /**
     * select list  member by condition for page show<br/>
     *
     * @param member
     *          query condition
     * @param pageNow
     *          get data for which page
     * @param pageSize
     *          pageSize for each page
     * @return
     *         with the conditions of the result set
     */
    @Override
    public Page<Member> selectPage(Member member, Integer pageNow, Integer pageSize){
        return this.memberManager.selectPage(member , pageNow , pageSize);
    }


    public void setMemberManager (MemberManager memberManager) {
        this.memberManager = memberManager;
    }

}

生成的事物層代碼

package com.dobby.autocode.manager; import com.dobby.common.base.BaseManager; import com.dobby.code.make.model.Member; /** * * User: dobby * Date: 2014-11-26 * Time: 21:10:06 * Version: 1.0 * */
public interface MemberManager extends BaseManager<Member,java.lang.Integer> { }
View Code
package com.dobby.autocode.manager.impl;

import java.util.List;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;

import org.springframework.stereotype.Component;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.Resource;

import com.dobby.common.page.Page;

import com.dobby.autocode.manager.MemberManager;
import com.dobby.autocode.dao.MemberDao;
import com.dobby.code.make.model.Member;


/**
*
* User: dobby
* Date: 2014-11-26
* Time: 21:10:06
* Version: 1.0
*
*/
@Component(value = "memberManager")
public class MemberManagerImpl implements MemberManager{

    @Resource( name = "transactionMemberManager")
    private PlatformTransactionManager transactionMemberManager;

    @Autowired
    private MemberDao memberDao;

    public void setTransactionMemberManager (PlatformTransactionManager transactionMemberManager) {
        this.transactionMemberManager = transactionMemberManager;
    }
    public void setMemberDao (MemberDao memberDao) {
        this.memberDao = memberDao;
    }

    @Override
    public int save(final Member member){
        int result = 0;
        TransactionTemplate template = new TransactionTemplate(this.transactionMemberManager);
        result = (Integer)template.execute(new TransactionCallback() {
            @Override
            public Object doInTransaction(TransactionStatus status) {
                return memberDao.insert(member);
            }
        });
        return result;
    }

    @Override
    public int update(final Member member) {
        int result = 0;
        TransactionTemplate template = new TransactionTemplate(this.transactionMemberManager);
        result = (Integer)template.execute(new TransactionCallback() {
            @Override
            public Object doInTransaction(TransactionStatus status) {
                return memberDao.update(member);
            }
        });
        return result;
    }

    @Override
    public int delete(final java.lang.Integer primaryKey){
        int result = 0;
        TransactionTemplate template = new TransactionTemplate(this.transactionMemberManager);
        result = (Integer)template.execute(new TransactionCallback() {
            @Override
            public Object doInTransaction(TransactionStatus status) {
                return memberDao.delete(primaryKey);
            }
        });
        return result;
    }

    @Override
    public int deleteObjects(final Member member) {
        int result = 0;
        TransactionTemplate template = new TransactionTemplate(this.transactionMemberManager);
        result = (Integer)template.execute(new TransactionCallback() {
            @Override
            public Object doInTransaction(TransactionStatus status) {
                return  memberDao.deleteObjects(member);
            }
        });
        return result;
    }

    @Override
    public Member select(java.lang.Integer primaryKey) {
        return  this.memberDao.select(primaryKey);
    }

    @Override
    public List<Member> selectObjects(Member member){
        return this.memberDao.selectObjects(member);
    }

    @Override
    public Page<Member> selectPage(Member member, Integer pageNow, Integer pageSize){
        Page<Member> page  = null;
        try {
            List<Member> list = this.memberDao.selectPagination(member, (pageNow - 1) * pageSize, pageSize);
            int recordTotal = this.memberDao.selectPageCount(member);
            page = new Page<Member>(list,recordTotal,pageNow);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return page;
    }


}

生成的持久層代碼

package com.dobby.autocode.dao; import java.util.List; import com.dobby.common.base.BaseCudDao; import com.dobby.common.base.BaseReadDao; import com.dobby.code.make.model.Member; /** * * User: dobby * Date: 2014-11-26 * Time: 21:10:06 * Version: 1.0 * */
public interface MemberDao extends BaseReadDao<Member,java.lang.Integer>,BaseCudDao<Member,java.lang.Integer>{ }
View Code
<?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.dobby.autocode.dao.MemberDao">

    <!-- all table column-->
    <sql id="allColumns">
         zipCode, memberName
    </sql>

    <!-- query entity by id  -->
    <select id="select" parameterType="java.lang.Integer" resultType="member" useCache="true">
        SELECT
          <include refid="allColumns" />
        FROM
          tb_member
        WHERE
          m_Id=#{pKey}
    </select>

    <!-- query entity by condition for page -->
    <select id="selectPagination" resultType="member" useCache="true">
        SELECT
          <include refid="allColumns" />
        FROM
          tb_member
        WHERE
          1 = 1
        <if test="object.zipCode!= null and ''!=object.zipCode">
            <![CDATA[ AND zipCode = #{object.zipCode} ]]>
        </if>
        <if test="object.memberName!= null and ''!=object.memberName">
            <![CDATA[ AND member_name = #{object.memberName} ]]>
        </if>
        
          LIMIT #{start},#{size}
    </select>

    <!-- query entity collection by condition for page total -->
    <select id="selectPageCount" parameterType="member" resultType="java.lang.Integer" useCache="true">
        SELECT
          count(0)
        FROM
          tb_member
        WHERE
          1 = 1
        <if test="object.zipCode!= null and ''!=object.zipCode">
            <![CDATA[ AND zipCode = #{object.zipCode} ]]>
        </if>
        <if test="object.memberName!= null and ''!=object.memberName">
            <![CDATA[ AND member_name = #{object.memberName} ]]>
        </if>
        
    </select>

    <!-- query entity by condition -->
    <select id="selectObjects" parameterType="member" useCache="true">
        SELECT
          <include refid="allColumns" />
        FROM
          tb_member
        WHERE
          1 = 1
        <if test="object.zipCode!= null and ''!=object.zipCode">
            <![CDATA[ AND zipCode = #{object.zipCode} ]]>
        </if>
        <if test="object.memberName!= null and ''!=object.memberName">
            <![CDATA[ AND member_name = #{object.memberName} ]]>
        </if>
        
    </select>

    <!-- insert entity  -->
    <insert id="insert" parameterType="member" flushCache="true">
        INSERT INTO
          tb_member(<include refid="allColumns"/>)
        VALUES
          (#{zipCode}, #{memberName})
    </insert>

    <!-- insert entity by primary key-->
    <delete id="delete" parameterType="java.lang.Integer" flushCache="true">
        DELETE FROM
          tb_member
        WHERE
          m_Id=#{pKey}
    </delete>

    <!-- delete entity by object condition-->
    <delete id="deleteObjects" parameterType="member" flushCache="true">
        DELETE FROM
          tb_member
        WHERE
          1 = 1
        <if test="object.zipCode!= null and ''!=object.zipCode">
            <![CDATA[ AND zipCode = #{object.zipCode} ]]>
        </if>
        <if test="object.memberName!= null and ''!=object.memberName">
            <![CDATA[ AND member_name = #{object.memberName} ]]>
        </if>
        
    </delete>

    <!-- update entity by primary key-->
    <update id="update" parameterType="member" flushCache="true">
        UPDATE
          tb_member
        <set>
            <if test="object.zipCode!= null and ''!=object.zipCode">
                <![CDATA[ AND zipCode = #{object.zipCode} ]]>
            </if>
            <if test="object.memberName!= null and ''!=object.memberName">
                <![CDATA[ AND member_name = #{object.memberName} ]]>
            </if>
            
        </set>
        WHERE
          m_Id=#{pKey}
    </update>

</mapper>

說明:生成代碼並沒有做真正的業務測試,可能某些地方有問題,后續有時間會完善.

附件:

插件包: http://files.cnblogs.com/dennisit/%E7%94%9F%E6%88%90%E6%8F%92%E4%BB%B6%E5%8C%85.zip

注解模塊實現說明:http://www.cnblogs.com/dennisit/p/4125103.html


轉載請注明出處:[http://www.cnblogs.com/dennisit/p/4125000.html]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM