Spring-shiro-Boot-12 JDBC方式-自动生成代码

本文介绍了如何从Mysql表结构出发,通过SQL查询获取列信息,然后自动化组装成Java Bean类(如SysUser),并生成对应的DAO、Controller代码,包括数据操作接口和HTML页面。

1、获取表结构

select column_name, data_type, column_comment, column_default 
FROM information_schema.columns 
WHERE table_name= "sys_user" 
and table_schema = (select database())

2、转换组装为java数据结构 --- 【BeanField】 

    public class BeanField implements Serializable {

	private static final long serialVersionUID = 4279960350136806659L;

	//列名
	private String columnName;
    //列类型
	private String columnType;
    //列备注
	private String columnComment;
    //列默认值
	private String columnDefault;
	//将SQL列名转换为驼峰---java列名
	private String name;
	//将SQL列类型转换---java类型
	private String type;

    }

================================================================

    /**
	 * mysql类型与java类型部分对应关系
	 */

	private static Map<String, String> map = Maps.newHashMap();

	static {
		map.put("int", Integer.class.getSimpleName());
		map.put("tinyint", Integer.class.getSimpleName());
		map.put("double", Double.class.getSimpleName());
		map.put("float", Float.class.getSimpleName());
		map.put("decimal", BigDecimal.class.getSimpleName());
		map.put("date", Date.class.getSimpleName());
		map.put("timestamp", Date.class.getSimpleName());
		map.put("datetime", Date.class.getSimpleName());
		map.put("varchar", String.class.getSimpleName());
		map.put("text", String.class.getSimpleName());
		map.put("longtext", String.class.getSimpleName());

	}

3、准备基本参数

路径:d:/generate

bean类名:表名---驼峰化

bean包名:固定值---com.x.x.model

bean类名:SysUser(sys_user表)

dao包名: 固定值---com.x.x.dao

dao类名:SysUserDao

controller包名:固定值---com.x.x.controller

controller类名:SysUserController

4、反显展示相关字段信息

 5、准备JavaBean类模板

package {beanPackageName};

{import}

public class {beanName} extends BaseEntity<Long> {

{filelds}
{getset}
}

6、生成Bean.java

(1)将{beanPackageName}-------> beanPackageName

(2)将{beanName}------->beanName

  (3)   处理生成imports:BigDecimal、Date

(4)将{import}------->imports

(5)处理生成filelds:

跳过字段父类中的id、createTime、updateTime

"\tprivate "+Bean字段类型+" "+Bean字段名+";\n"

(6)将{filelds}------->filelds

(7)处理生成getset

跳过字段父类中的id、createTime、updateTime

"\tpublic "+Bean字段类型+" get"+Bean字段名首字母大写+Bean字段名剩余字母小写+"() {\n"+"\t\treturn "+Bean字段名+";\n"+"\t}\n"
+"\tpublic void set"+Bean字段名首字母大写+Bean字段名剩余字母小写+"("+Bean字段类型+" "+Bean字段名+") {\n"+"\t\tthis."+Bean字段名+" = "+Bean字段名+";\n"+"\t}\n"

(8)将{getset}------->getset

(9)将文件保存为beanName+".java"

		FileUtil.saveTextFile(text, path + File.separator + getPackagePath(beanPackageName) + beanName + ".java");

7、准备controller模板

package {controllerPkgName};

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.zw.admin.server.page.table.PageTableRequest;
import com.zw.admin.server.page.table.PageTableHandler;
import com.zw.admin.server.page.table.PageTableResponse;
import com.zw.admin.server.page.table.PageTableHandler.CountHandler;
import com.zw.admin.server.page.table.PageTableHandler.ListHandler;
import {daoPackageName}.{daoName};
import {beanPackageName}.{beanName};

import io.swagger.annotations.ApiOperation;

@RestController
@RequestMapping("/{beanParamName}s")
public class {controllerName} {

    @Autowired
    private {daoName} {daoParamName};

    @PostMapping
    @ApiOperation(value = "保存")
    public {beanName} save(@RequestBody {beanName} {beanParamName}) {
        {daoParamName}.save({beanParamName});

        return {beanParamName};
    }

    @GetMapping("/{id}")
    @ApiOperation(value = "根据id获取")
    public {beanName} get(@PathVariable Long id) {
        return {daoParamName}.getById(id);
    }

    @PutMapping
    @ApiOperation(value = "修改")
    public {beanName} update(@RequestBody {beanName} {beanParamName}) {
        {daoParamName}.update({beanParamName});

        return {beanParamName};
    }

    @GetMapping
    @ApiOperation(value = "列表")
    public PageTableResponse list(PageTableRequest request) {
        return new PageTableHandler(new CountHandler() {

            @Override
            public int count(PageTableRequest request) {
                return {daoParamName}.count(request.getParams());
            }
        }, new ListHandler() {

            @Override
            public List<{beanName}> list(PageTableRequest request) {
                return {daoParamName}.list(request.getParams(), request.getOffset(), request.getLimit());
            }
        }).handle(request);
    }

    @DeleteMapping("/{id}")
    @ApiOperation(value = "删除")
    public void delete(@PathVariable Long id) {
        {daoParamName}.delete(id);
    }
}

8、生成controller

9、准备dao模板

package {daoPackageName};

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import {beanPackageName}.{beanName};

@Mapper
public interface {daoName} {

    @Select("select * from {table_name} t where t.id = #{id}")
    {beanName} getById(Long id);

    @Delete("delete from {table_name} where id = #{id}")
    int delete(Long id);

    int update({beanName} {beanParamName});
    
    @Options(useGeneratedKeys = true, keyProperty = "id")
    @Insert("insert into {table_name}({insert_columns}) values({insert_values})")
    int save({beanName} {beanParamName});
    
    int count(@Param("params") Map<String, Object> params);

    List<{beanName}> list(@Param("params") Map<String, Object> params, @Param("offset") Integer offset, @Param("limit") Integer limit);
}

10、生成dao

11、准备mapper.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="{daoPackageName}.{daoName}">

	<sql id="where">
		<where>
{where}		
		</where>
	</sql>

	<select id="count" resultType="int">
		select count(1) from {table_name} t
		<include refid="where" />
	</select>

	<select id="list" resultType="{beanName}">
		select * from {table_name} t
		<include refid="where" />
		${params.orderBy}
		limit #{offset}, #{limit}
	</select>

	<update id="update">
		update {table_name} t
		<set>
{update_sets}
		</set>

		where t.id = #{id}
	</update>

</mapper>

12、同样准备htmlAdd、htmlList、htmlUpdate,并生成相应文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

良之才-小良

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值