前面写过一篇生成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建表语句,非常实用,不好使你找我!
一款开源SQL语句转换成Java 实体类的小工具 需求起源 因为公司之前使用JPA,先写实体类再生产数据库建表语句,这样会有一个问题,数据建表语句都是没有注释的,对于新来的同事非常不友好,同时在开发中需要看字段...
给一个表名,自动生成java实体类,方便实用容易上手。前提,表中至少有一条数据。
通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...
通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...
第1章 Java应用分层架构及软件模型 1.1 应用程序的分层体系结构 1.1.1 区分物理层和逻辑层 1.1.2 软件层的特征 1.1.3 软件分层的优点 1.1.4 软件分层的缺点 1.1.5 Java应用的持久化层 1.2 软件的模型 ...
16.1.1 SQL语句分类 16.1.2 SELECT 16.1.3 INSERT 16.1.4 UPDATE 16.1.5 DELETE 16.1.6 CREATE 16.1.7 ALTER 16.1.8 DROP 16.2 MySQL概述 16.2.1 MySQL简介 16.2.2 下载并安装MySQL 16.2.3 MySQL使用 ...
4.8 SQL语句 4.8.1 Statement对象 4.8.2 PreparedStatement语句 4.8.3 CallableStatement 4.9 事务 4.9.1 事务独立性等级 4.9.2 事务存储点 4.9.3 多线程 4.10 批更新 4.11 ResultSet 4.12 可滚动的...
使用本地sql语句查询后,无需再使用Object对查询结果进行强制转换,而是直接将查询结果放到实体Bean里了。 PS: 其实只有一版,这里只所以叫最终版是因为该附件我上传了好几天传不上去,到最后报告说‘资源已经存在...
通过书写sql语句,返回map或list结构表示单条记录或多条记录. sqlit-tools-android V0.1不能做的事: 不提供多表关系与实体类进行映射的功能,sqlit-tools并不是一个orm框架. 不提供修改表结构功能,如果想要实现,...
多数DBMS不需要在单条SQL语句后加分号,但特定的DBMS可能必须在单条SQL语句后加分号。 SQL语句的最后一句要以 “;”号结束 二、写子句顺序 Select column,group_function From table [Where condition] ...
4.8 SQL语句 4.8.1 Statement对象 4.8.2 PreparedStatement语句 4.8.3 CallableStatement 4.9 事务 4.9.1 事务独立性等级 4.9.2 事务存储点 4.9.3 多线程 4.10 批更新 4.11 ResultSet 4.12 可滚动的...
4.8 SQL语句 4.8.1 Statement对象 4.8.2 PreparedStatement语句 4.8.3 CallableStatement 4.9 事务 4.9.1 事务独立性等级 4.9.2 事务存储点 4.9.3 多线程 4.10 批更新 4.11 ResultSet 4.12 可滚动的...
* @param sql sql语句 * @param param 参数列表 * @return 修改记录行数 */ public int update(String sql,List param){ int row = -1; Connection conn = null; PreparedStatement update = null; try { ...
115.hibernate 中如何在控制台查看打印的 sql 语句? 116.hibernate 有几种查询方式? 117.hibernate 实体类可以被定义为 final 吗? 118.在 hibernate 中使用 Integer 和 int 做映射有什么区别? 119.hibernate 是...
4.8 SQL语句 4.8.1 Statement对象 4.8.2 PreparedStatement语句 4.8.3 CallableStatement 4.9 事务 4.9.1 事务独立性等级 4.9.2 事务存储点 4.9.3 多线程 4.10 批更新 4.11 ResultSet 4.12 可滚动的...
更重要的是所有的配置都能被保存到本地,只要配置过一次,下次使用只要点一下生成JavaBean,下一秒就能拿到你想要的JavaBean了,完全实现秒生成。并且集成各种实用工具,使得工作效率瞬间爆棚,生产力瞬间爆表! ...