`
Mr_Tank_
  • 浏览: 22550 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

java实现从实体到SQL语句的转换(二)

 
阅读更多

前面写过一篇生成insert语句的博客,今天把CRUD的都完善了一下,需要的上次写的获取实体信息的类,这里就不贴出来了【点击打开查看

下面是完整的代码:

package tan.code.utils;

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

/**
 * 简单的SQL语句拼装类 ;要求数据库表名及列命和实体保持一致;
 * 
 * @author Mr_Tank_
 * 
 * @param <T>
 */
public class SQLStringHelper<T> {

	private EntityHelper entityHelper = new EntityHelper();

	/**
	 * 根据传入的实体生成Insert SQL語句
	 * 
	 * @param entity
	 * @return 拼接好的sql语句
	 */
	@SuppressWarnings("unchecked")
	public String createInsert(T entity) {
		String sql = "Insert into ";
		String column = ""; // 列
		String c_values = ""; // 列值
		List<Map<String, Object>> list = entityHelper.getFiledsInfo(entity);
		sql += list.get(0).get("obj_name").toString() + " ";
		for (int i = 0; i < list.size(); i++) {

			// 約定id在數據庫自動生成-20130807

			if (String.valueOf(list.get(i).get("f_name")).equals("id")) {
				i++;
			} else if (list.get(i).get("f_value") != null) {
				column += list.get(i).get("f_name") + ",";
				c_values += "'" + list.get(i).get("f_value") + "',";
			}

		}
		sql += "(" + column.substring(0, column.length() - 1) + ") values ("
				+ c_values.substring(0, c_values.length() - 1) + ");";

		return sql;

	}

	/**
	 * 拼裝Delete SQL語句
	 * 
	 * @param entity
	 * @param id
	 *            实体id
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public String createDelete(T entity, int id) {
		String sql = "delete from ";
		List<Map<String, Object>> list = entityHelper.getFiledsInfo(entity);
		sql += list.get(0).get("obj_name").toString() + " where id=" + id + ";";
		return sql;
	}

	/**
	 * 查找
	 * 
	 * @param entity
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public String createSelect(T entity) {
		String sql = "select * from ";
		String column = ""; // 列
		List<Map<String, Object>> list = entityHelper.getFiledsInfo(entity);
		sql += list.get(0).get("obj_name").toString() + " where ";
		for (int i = 0; i < list.size(); i++) {

			// 約定id在數據庫自動生成-20130807

			// id計數不能從0開始
			// 如果知道id直接根据id生成sql语句就可以了
			if (String.valueOf(list.get(i).get("f_name")).equals("id")
					&& !String.valueOf(list.get(i).get("f_value")).equals("0")) {
				sql += "id=" + list.get(i).get("f_value");
				return sql;
			} else if (list.get(i).get("f_value") != null) {

				column += list.get(i).get("f_name") + " like %"
						+ list.get(i).get("f_value") + "% or ";
			}
		}
		return sql += column.substring(0, column.length() - 4) + ";";

	}

	/**
	 * 根据id更新实体数据
	 * 
	 * @param entity
	 * @param id
	 *            实体id
	 * @return 拼装好的 Update SQL语句
	 */
	@SuppressWarnings("unchecked")
	public String createUpdate(T entity, int id) {
		String sql = "update ";
		String column = ""; // 列
		List<Map<String, Object>> list = entityHelper.getFiledsInfo(entity);
		sql += list.get(0).get("obj_name").toString() + " set ";
		for (int i = 0; i < list.size(); i++) {

			// id不能修改
			if (String.valueOf(list.get(i).get("f_name")).equals("id")) {
				i++;
			} else if (list.get(i).get("f_value") != null) {
				column += list.get(i).get("f_name") + "='"
						+ list.get(i).get("f_value")+"',";
			}

		}
		return sql +=column.substring(0, column.length()-1) + " where id='" + id+"'";

	}
}

测试【其中可以使用任意实体类替代测试代码里面的的Tutor类】:

	@Test
	public void test() {
		// fail("Not yet implemented");
		Tutor tutor = new Tutor();
		tutor.setId(3);
		//tutor.setTitle("寻找一個初三物理長期家教");
		tutor.setProvince("广西壮族自治区");
		tutor.setCity("桂林");
		tutor.setRegion("朝阳区");
		//tutor.setPatriarch("王先生");
		tutor.setPhone("139772109981");
		tutor.setGrade("初三");
		tutor.setSubject("物理");
		tutor.setPay(50);
		
		SQLStringHelper<Tutor> sqlStringHelper = new SQLStringHelper<Tutor>();
		System.out.println(sqlStringHelper.createInsert(tutor));
		System.out.println(sqlStringHelper.createDelete(tutor, 1));
		System.out.println(sqlStringHelper.createSelect(tutor));
		System.out.println(sqlStringHelper.createUpdate(tutor, 2));
	}

测试结果:

Insert into Tutor (subject,grade,pay,phone,browse,province,city,region,wb_num) values ('物理','初三','50.0','139772109981','0','广西壮族自治区','桂林','朝阳区','0');
delete from Tutor where id=1;
select * from Tutor where id=3
update Tutor set subject='物理',grade='初三',pay='50.0',phone='139772109981',browse='0',province='广西壮族自治区',city='桂林',region='朝阳区',wb_num='0' where id='2'

以上只是本人的一些尝试,如有不足之处,请指出。

分享到:
评论

相关推荐

    java实体转mysql建表语句

    在Java开发中,将Java实体类转换为MySQL数据库的建表语句是一项常见的任务,它有助于快速构建数据库模型,尤其在使用ORM(对象关系映射)框架如Hibernate、MyBatis时更为便捷。本篇文章将深入探讨这个过程,并提供...

    Sqlbean是一款通过Java语法生成SQL语句的ORM插件

    Sqlbean是一款通过Java语法生成SQL语句的ORM插件,其理念是弱化在开发阶段对数据库的操作,无需先建表再开发,可直接编写实体类和业务代码,项目启动后自动创建表和维护表结构。内置大量常用方法,支持灵活的条件...

    实体类&SQL生成工具

    实体类和SQL生成工具是一种高效开发辅助工具,它能够帮助程序员快速地生成各种编程语言(如VB、C#、Java)中的实体类,并自动生成对应的SQL语句,极大地提高了开发效率,减少了手动编写代码的工作量。 实体类是面向...

    sql server数据库表自动转换成java实体类

    给一个表名,自动生成java实体类,方便实用容易上手。前提,表中至少有一条数据。

    Java实现的一个idea插件,用于实体转Mysql、oracle建表语句和json请求体的工具

    Java实现的一个idea插件,用于实体转Mysql、oracle建表语句和json请求体的工具 使用 1、安装 下载发行版,打开idea:settings-&gt;plugins-&gt;intall plugin from disk 2、使用 打开实体类,右键选择ToMysql/ToOracle/To...

    java的sql解析器jsqlparser

    这个库允许开发者分析SQL语句的结构,提取出其中的关键元素,如列名、表名、别名以及查询条件,从而在Java应用程序中实现对SQL的深入理解和操作。以下是对JSQLPaser的一些详细解释和应用示例。 首先,JSQLPaser基于...

    excel生成sql语句和实体类代码生成器

    "Excel生成SQL语句和实体类代码生成器"就是一个这样的实用工具,它允许开发者通过Excel表格来快速构建数据库操作所需的SQL语句以及与之对应的Java实体类代码,大大减少了手动编写这些代码的时间。 这个工具的核心...

    MySql转Java实体类

    `SqlToBean.jar`可能是一个用于将MySQL的SQL脚本转换为Java实体类的工具。这样的工具可以自动解析SQL创建语句,生成相应的Java源代码,极大地提高了开发效率。通过输入SQL脚本或连接到数据库获取表结构,工具能够...

    Hibernate调用配置文件中的sql语句

    本篇将深入探讨如何在Hibernate中调用配置文件中的SQL语句,以此提高代码的可维护性和灵活性。 首先,理解Hibernate的核心概念至关重要。Hibernate是一个对象关系映射(ORM)框架,它将Java对象与关系数据库中的...

    Java反射 JavaBean对象自动生成插入,更新,删除,查询sql语句操作

    Java反射 JavaBean 对象自动生成插入、更新、删除、查询 SQL 语句操作 Java 反射是 Java 语言中一个强大的功能,它允许开发者在运行时检查和修改类、方法、字段的行为。Java 反射机制可以动态地创建对象、调用方法...

    sql2entity:MySQL转换成Java实体类的小公举

    一款开源SQL语句转换成Java 实体类的小工具 需求起源 因为公司之前使用JPA,先写实体类再生产数据库建表语句,这样会有一个问题,数据建表语句都是没有注释的,对于新来的同事非常不友好,同时在开发中需要看字段...

    实体类转换成数据库表

    5. **数据库迁移(Database Migration)**: 当需要在不同类型的数据库之间迁移时,如从SQL Server到Oracle,实体类可以作为一个中间桥梁。通过已有的实体类,我们可以根据Oracle数据库的特性调整映射,然后生成相应...

    mybatis根据数据库表自动生成SQL、实体类、mapper文件工具

    在SSM项目中,MyBatis的Mapper文件是关键组成部分,它定义了SQL语句和Java方法之间的映射关系。实体类则对应数据库中的表,用于存储和传递数据。而SQL语句则负责数据的查询、插入、更新和删除等操作。这个工具能够...

    java实现多层嵌套循环参数转换

    在实际项目中,文件`InterfaceAuthManageServiceImpl.java`可能包含了服务层的接口授权管理实现,它可能会使用到上述的多层嵌套循环、参数转换以及数据库操作。而`model_manage_response_group_config.sql`可能是...

    自动生成sql语句.rar

    实体类通常是对数据库表的面向对象表示,每个属性对应表的列,这样就能通过反射机制轻松地将Java对象转换为SQL语句。 在标签“实体类转sql”中,我们可以理解为通过Java的注解或者ORM(Object-Relational Mapping)...

    快速生生成sql语句,反编译.class文件,java代码生成……

    这些工具可以从现有的数据库模式自动生成Java实体类,大大减少了编码的工作量。例如,当你连接到数据库后,可以选中表,生成对应的Java类,这些类通常包含了字段和getter/setter方法,对应数据库中的列。这种方式...

    MySQL表自动生成Java实体类

    7. **运行脚本/工具**: 执行这个自动化过程,生成的Java实体类文件将被放置在指定的输出路径下,可以直接引入到Java项目中使用。 通过这样的自动化过程,开发者可以从繁琐的手动编码工作中解脱出来,专注于业务逻辑...

    基于Java实现根据数据库表生成对应的mapper,实体类,仓储服务以及service

    2. 实体类生成:根据解析得到的表结构信息,生成对应的Java实体类代码。实体类通常包含表中所有字段的成员变量、构造函数、getter和setter方法,以及可能的业务注解(如@Entity、@Table等)。 3. Mapper生成:根据...

    基于Druid的SqlParser模块解析create table语句创建java POJO和DAO类的效率工具.zip

    它基于词法分析和语法分析的原理,将SQL语句转换为抽象语法树(AST),从而方便对SQL进行深度处理。通过这个模块,开发者可以轻松获取SQL的结构信息,例如表名、字段名、数据类型等,这对于自动化代码生成非常有帮助...

    Excel转sql(只需要生成实体类即可)

    "Excel转sql"这个话题涉及到将Excel中的数据转换为SQL语句,以便于导入到数据库中创建相应的表结构或者更新已有数据。下面我们将详细探讨这个过程以及如何实现。 首先,Excel作为一种灵活的电子表格软件,广泛用于...

Global site tag (gtag.js) - Google Analytics