java 原生态CRUD高级封装

【知识收藏】:Java整体学习路线(完整知识体系) Java学习路线图~~~       在网上找到了几篇Java学习路线图,看了下总结得非常好,但唯一不好就是不怎么清晰,所以将其改造一下,方便以后学习时弥补自身所欠缺的知识点,也算是给自己一个明确的学习方向。至于第一阶段,即JavaSE的基础,这里不在给出。 阅读详情
package xxx;

import java.io.InputStream;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp2.BasicDataSourceFactory;

public class DBHelper {

	private static DataSource dataSource;

	static {
		try { // Class.forName(DRIVER_CLASS_NAME);
			Properties props = new Properties();
			InputStream in = DBHelper.class.getClassLoader()
					.getResourceAsStream("db.properties");
			props.load(in);

			// 使用连接池技术,数据源DBCP
			dataSource = BasicDataSourceFactory.createDataSource(props);
			LogManager.logger.debug("加载数据库属性元素构建数据源成功");
		} catch (Exception e) {
			LogManager.logger.error("加载数据库属性元素构建数据源失败", e);
		}
	}

	/**
	 * 连接数据库
	 * 
	 * @return
	 */
	public static Connection getConn() {
		Connection con = null;
		try {
			con = dataSource.getConnection();
			LogManager.logger.debug("数据库连接成功");
		} catch (Exception e) {
			LogManager.logger.error("数据库连接失败", e);
		}
		return con;
	}


	/**
	 * 关闭数据库连接
	 * 
	 * @param con
	 * @param st
	 * @param rs
	 */
	public static void close(Connection con, Statement st, ResultSet rs) {
		if (rs != null) {
			try {
				rs.close();
				LogManager.logger.debug("关闭结果集完成");
			} catch (SQLException e) {
				LogManager.logger.error("关闭结果集失败", e);
			}
		}

		if (st != null) {
			try {
				st.close();
				LogManager.logger.debug("关闭执行工具完成");
			} catch (SQLException e) {
				LogManager.logger.error("关闭执行工具失败", e);
			}
		}

		if (con != null) {
			try {
				con.close();
				LogManager.logger.debug("关闭数据库连接完成");
			} catch (SQLException e) {
				LogManager.logger.error("关闭数据库连接失败");
			}
		}
	}

	/**
	 * 增、删、改
	 * 
	 * @param sql
	 * @param params
	 * @return
	 */
	public static int doUpdate(String sql, Object... params) {
		Connection con = null;
		PreparedStatement ps = null;
		int result = 0;
		try {
			con = getConn();
			LogManager.logger.debug("要执行的sql语句:" + sql);
			ps = con.prepareStatement(sql);
			setParams(ps, params);
			LogManager.logger.debug("sql执行工具创建成功");
		} catch (SQLException e) {
			LogManager.logger.error("sql执行工具创建失败", e);
		}

		try {
			result = ps.executeUpdate();
			LogManager.logger.debug("处理数据成功,处理数据的条数为:" + result);
		} catch (SQLException e) {
			LogManager.logger.error("处理数据失败", e);
		} finally {
			close(con, ps, null);
		}
		return result;
	}

	/**
	 * 设置参数
	 * 
	 * @param ps
	 * @param params
	 */
	private static void setParams(PreparedStatement ps, Object... params) {

		if (params == null || params.length == 0) {
			return;
		}
		int flag = 0;
		try {
			for (int i = 0; i < params.length; i++) {
				flag = i + 1;
				Object obj = params[i];
				if(obj != null) {
					if (obj instanceof InputStream) {
						ps.setBinaryStream(i + 1, (InputStream) obj);
					} else {
						ps.setObject(i + 1, obj);
					}
				} else {
					ps.setObject(i + 1, obj);
				}
				
			}
		} catch (SQLException e) {
			LogManager.logger.error(String.format("注入第%d个值失败", flag), e);
		}

	}

	/**
	 * 查 单个
	 * 
	 * @param sql
	 * @param objs
	 * @return
	 */
	public static Map<String, Object> doQueryOne(String sql, Object... objs) {
		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		Map<String, Object> results = null;

		try {
			con = getConn();
			ps = con.prepareStatement(sql);
			setParams(ps, objs);
			LogManager.logger.debug("sql执行工具创建成功");
		} catch (SQLException e) {
			LogManager.logger.error("sql执行工具创建失败", e);
		}

		try {
			rs = ps.executeQuery();
			LogManager.logger.debug("执行sql取到返回数据成功");
		} catch (SQLException e) {
			LogManager.logger.error("执行sql取到返回数据失败", e);
		}

		try {
			ResultSetMetaData rsmd = rs.getMetaData();
			int columnCount = rsmd.getColumnCount();

			if (rs.next()) {
				results = new HashMap<String, Object>();
				for (int i = 1; i <= columnCount; i++) {
					Object obj = rs.getObject(i);
					/*
					 * if(obj instanceof BLOB) { BLOB blob = (BLOB)
					 * rs.getBlob(i); obj = blob.getBinaryStream(); }
					 */
					results.put(rsmd.getColumnName(i).toLowerCase(), obj);
				}
			}
			LogManager.logger.debug("取出结果集数据完成");
		} catch (SQLException e) {
			LogManager.logger.error("取出结果集数据失败", e);
		} finally {
			close(con, ps, rs);
		}
		return results;
	}
	
	public static Map<String, Object> doQueryOne(String sql, List<Object> objs) {
		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		Map<String, Object> results = null;

		try {
			con = getConn();
			ps = con.prepareStatement(sql);
			setParams(ps, objs);
			LogManager.logger.debug("sql执行工具创建成功");
		} catch (SQLException e) {
			LogManager.logger.error("sql执行工具创建失败", e);
		}

		try {
			rs = ps.executeQuery();
			LogManager.logger.debug("执行sql取到返回数据成功");
		} catch (SQLException e) {
			LogManager.logger.error("执行sql取到返回数据失败", e);
		}

		try {
			ResultSetMetaData rsmd = rs.getMetaData();
			int columnCount = rsmd.getColumnCount();

			if (rs.next()) {
				results = new HashMap<String, Object>();
				for (int i = 1; i <= columnCount; i++) {
					Object obj = rs.getObject(i);
					/*
					 * if(obj instanceof BLOB) { BLOB blob = (BLOB)
					 * rs.getBlob(i); obj = blob.getBinaryStream(); }
					 */
					results.put(rsmd.getColumnName(i).toLowerCase(), obj);
				}
			}
			LogManager.logger.debug("取出结果集数据完成");
		} catch (SQLException e) {
			LogManager.logger.error("取出结果集数据失败", e);
		} finally {
			close(con, ps, rs);
		}
		return results;
	}

	/**
	 * 查 多个
	 * 
	 * @param sql
	 * @param objs
	 * @return
	 */
	public static List<Map<String, Object>> doQuery(String sql, Object... objs) {
		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		List<Map<String, Object>> results = null;
		try {
			con = getConn();
			ps = con.prepareStatement(sql);
			setParams(ps, objs);
			LogManager.logger.debug("sql执行工具创建成功");
		} catch (SQLException e) {
			LogManager.logger.error("sql执行工具创建失败", e);
		}

		try {
			rs = ps.executeQuery();
			LogManager.logger.debug("执行sql取到返回数据成功");
		} catch (SQLException e) {
			LogManager.logger.error("执行sql取到返回数据失败", e);
		}

		try {
			ResultSetMetaData rsmd = rs.getMetaData();
			int columnCount = rsmd.getColumnCount();
			results = new ArrayList<Map<String, Object>>();
			while (rs.next()) {
				Map<String, Object> record = new HashMap<String, Object>();

				for (int i = 1; i <= columnCount; i++) {
					Object obj = rs.getObject(i);
					/*
					 * if(obj instanceof BLOB) { BLOB blob = (BLOB)
					 * rs.getBlob(i); obj = blob.getBinaryStream(); }
					 */
					record.put(rsmd.getColumnName(i).toLowerCase(), obj);
					// record.put(rsmd.getColumnName(i).toLowerCase(),
					// rs.getObject(i));
				}
				results.add(record);
			}
			LogManager.logger.debug("取出结果集数据完成");
		} catch (SQLException e) {
			LogManager.logger.error("取出结果集数据失败", e);
		} finally {
			close(con, ps, rs);
		}
		return results;
	}
	
	public static List<Map<String, Object>> doQuery(String sql, List<Object> objs) {
		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		List<Map<String, Object>> results = null;
		try {
			con = getConn();
			ps = con.prepareStatement(sql);
			setParams(ps, objs);
			LogManager.logger.debug("sql执行工具创建成功");
		} catch (SQLException e) {
			LogManager.logger.error("sql执行工具创建失败", e);
		}

		try {
			rs = ps.executeQuery();
			LogManager.logger.debug("执行sql取到返回数据成功");
		} catch (SQLException e) {
			LogManager.logger.error("执行sql取到返回数据失败", e);
		}

		try {
			ResultSetMetaData rsmd = rs.getMetaData();
			int columnCount = rsmd.getColumnCount();
			results = new ArrayList<Map<String, Object>>();
			while (rs.next()) {
				Map<String, Object> record = new HashMap<String, Object>();

				for (int i = 1; i <= columnCount; i++) {
					Object obj = rs.getObject(i);
					/*
					 * if(obj instanceof BLOB) { BLOB blob = (BLOB)
					 * rs.getBlob(i); obj = blob.getBinaryStream(); }
					 */
					record.put(rsmd.getColumnName(i).toLowerCase(), obj);
					// record.put(rsmd.getColumnName(i).toLowerCase(),
					// rs.getObject(i));
				}
				results.add(record);
			}
			LogManager.logger.debug("取出结果集数据完成");
		} catch (SQLException e) {
			LogManager.logger.error("取出结果集数据失败", e);
		} finally {
			close(con, ps, rs);
		}
		return results;
	}

	public static <T> List<T> find(String sql, Class<T> c, Object... objs) {
		List<T> list = new ArrayList<T>();
		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			con = getConn();
			ps = con.prepareStatement(sql);
			setParams(ps, objs);
			LogManager.logger.debug("sql执行工具创建成功");
		} catch (SQLException e) {
			LogManager.logger.error("sql执行工具创建失败", e);
		}

		try {
			rs = ps.executeQuery();
			LogManager.logger.debug("执行sql取到返回数据成功");
		} catch (SQLException e) {
			LogManager.logger.error("执行sql取到返回数据失败", e);
		}

		try {
			ResultSetMetaData rsmd = rs.getMetaData();
			int columnCount = rsmd.getColumnCount();

			// 获取返回结果集中每个列的列名,因为java对象中的注值是调用setter来实现的,所以我们需要知道这个列的值要往哪个属性里面注入
			String[] colNames = new String[columnCount];
			for (int i = 0; i < columnCount; i++) {
				colNames[i] = rsmd.getColumnName(i + 1);
			}
			// 获取给定类的所有的方法
			Method[] methods = c.getMethods();

			T t;
			String cname = null;
			String mname = null;
			String ctype = null;
			Object obj = null;
			String colname = null;
			while (rs.next()) {// 判断结果集是否还有数据(数据是一条记录的方式取出)
				// 每循环一次就是一条记录,每条记录对应一个对象,所为我们先实例化一个对象,以便注值
				t = c.newInstance();
				// 循环将每一个列的值注入到对应的属性中,那么此时我们先必须要找到对应的属性的setter方法
				for (int i = 0; i < columnCount; i++) {
					colname = colNames[i];
					cname = "set" + colname;
					if (methods != null && methods.length > 0) {
						for (Method md : methods) {
							// 取出当前循环的方法的方法名
							mname = md.getName();
							// 比较当前循环的方法名是否根cname相等
							if (cname.equalsIgnoreCase(mname)) {
								// 因为java类中的方法存在同名的情况,即有方法重载,我们必须限制参数类型来找到对应的方法进行注入
								obj = rs.getObject(colname);
								if (obj != null) {
									// 获取这个对象的数据类型
									ctype = obj.getClass().getSimpleName();
									if ("BigDecimal".equals(ctype)) {
										md.invoke(t, rs.getInt(colname));
									} else if ("Integer".equals(ctype)) {
										md.invoke(t, rs.getInt(colname));
									} else {
										md.invoke(t, rs.getString(colname));
									}
								} else {

								}
							}
						}
					}
				}
				list.add(t);
			}
			LogManager.logger.debug("取出结果集数据完成");
		} catch (Exception e) {
			LogManager.logger.error("取出结果集数据失败", e);
		} finally {
			close(con, ps, rs);
		}
		return list;
	}

	public static Map<String, String> find(String sql, Object... objs) {
		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		Map<String, String> results = null;

		try {
			con = getConn();
			ps = con.prepareStatement(sql);
			setParams(ps, objs);
			LogManager.logger.debug("sql执行工具创建成功");
		} catch (SQLException e) {
			LogManager.logger.error("sql执行工具创建失败", e);
		}

		try {
			rs = ps.executeQuery();
			LogManager.logger.debug("执行sql取到返回数据成功");
		} catch (SQLException e) {
			LogManager.logger.error("执行sql取到返回数据失败", e);
		}

		try {
			ResultSetMetaData rsmd = rs.getMetaData();
			int columnCount = rsmd.getColumnCount();

			if (rs.next()) {
				results = new HashMap<String, String>();
				for (int i = 1; i <= columnCount; i++) {
					Object obj = rs.getObject(i);
					/*
					 * if(obj instanceof BLOB) { BLOB blob = (BLOB)
					 * rs.getBlob(i); obj = blob.getBinaryStream(); }
					 */
					results.put(rsmd.getColumnName(i).toLowerCase(),
							rs.getString(i));
				}
			}
			LogManager.logger.debug("取出结果集数据完成");
		} catch (SQLException e) {
			LogManager.logger.error("取出结果集数据失败", e);
		} finally {
			close(con, ps, rs);
		}
		return results;
	}

	private static void setParams(PreparedStatement ps, List<Object> params) {

		if (params == null || params.size() == 0) {
			return;
		}
		int flag = 0;
		try {
			for (int i = 0, len = params.size(); i < len; i++) {
				flag = i + 1;
				String paramType = params.get(i).getClass().getName();

				if(params.get(i)!= null ) {
					if (Integer.class.getName().equals(params)) {
						ps.setInt(i + 1, (int) params.get(i));
					} else if (Double.class.getName().equals(paramType)) {
						ps.setDouble(i + 1, (double) params.get(i));
					} else if (String.class.getName().equals(paramType)) {
						ps.setString(i + 1, (String) params.get(i));
					} else {
						ps.setObject(i + 1, params.get(i));
					}
				} else {
					ps.setObject(i + 1, params.get(i));
				}
				

			}
		} catch (SQLException e) {
			LogManager.logger.error(String.format("注入第%d个值失败", flag), e);
		}

	}
	
	public static <T> List<T> find(String sql, Class<T> c, List<Object> objs) {
		List<T> list = new ArrayList<T>();
		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			con = getConn();
			ps = con.prepareStatement(sql);
			setParams(ps, objs);
			LogManager.logger.debug("sql执行工具创建成功");
		} catch (SQLException e) {
			LogManager.logger.error("sql执行工具创建失败", e);
		}

		try {
			rs = ps.executeQuery();
			LogManager.logger.debug("执行sql取到返回数据成功");
		} catch (SQLException e) {
			LogManager.logger.error("执行sql取到返回数据失败", e);
		}

		try {
			ResultSetMetaData rsmd = rs.getMetaData();
			int columnCount = rsmd.getColumnCount();

			// 获取返回结果集中每个列的列名,因为java对象中的注值是调用setter来实现的,所以我们需要知道这个列的值要往哪个属性里面注入
			String[] colNames = new String[columnCount];
			for (int i = 0; i < columnCount; i++) {
				colNames[i] = rsmd.getColumnName(i + 1);
			}
			// 获取给定类的所有的方法
			Method[] methods = c.getMethods();

			T t;
			String cname = null;
			String mname = null;
			String ctype = null;
			Object obj = null;
			String colname = null;
			while (rs.next()) {// 判断结果集是否还有数据(数据是一条记录的方式取出)
				// 每循环一次就是一条记录,每条记录对应一个对象,所为我们先实例化一个对象,以便注值
				t = c.newInstance();
				// 循环将每一个列的值注入到对应的属性中,那么此时我们先必须要找到对应的属性的setter方法
				for (int i = 0; i < columnCount; i++) {
					colname = colNames[i];
					cname = "set" + colname;
					if (methods != null && methods.length > 0) {
						for (Method md : methods) {
							// 取出当前循环的方法的方法名
							mname = md.getName();
							// 比较当前循环的方法名是否根cname相等
							if (cname.equalsIgnoreCase(mname)) {
								// 因为java类中的方法存在同名的情况,即有方法重载,我们必须限制参数类型来找到对应的方法进行注入
								obj = rs.getObject(colname);
								if (obj != null) {
									// 获取这个对象的数据类型
									ctype = obj.getClass().getSimpleName();
									if ("BigDecimal".equals(ctype)) {
										md.invoke(t, rs.getInt(colname));
									} else if ("Integer".equals(ctype)) {
										md.invoke(t, rs.getInt(colname));
									} else {
										md.invoke(t, rs.getString(colname));
									}
								} else {

								}
							}
						}
					}
				}
				list.add(t);
			}
			LogManager.logger.debug("取出结果集数据完成");
		} catch (Exception e) {
			LogManager.logger.error("取出结果集数据失败", e);
		} finally {
			close(con, ps, rs);
		}
		return list;
	}
	
	
	public static Map<String, String> find(String sql, List<Object> objs) {
		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		Map<String, String> results = null;

		try {
			con = getConn();
			ps = con.prepareStatement(sql);
			setParams(ps, objs);
			LogManager.logger.debug("sql执行工具创建成功");
		} catch (SQLException e) {
			LogManager.logger.error("sql执行工具创建失败", e);
		}

		try {
			rs = ps.executeQuery();
			LogManager.logger.debug("执行sql取到返回数据成功");
		} catch (SQLException e) {
			LogManager.logger.error("执行sql取到返回数据失败", e);
		}

		try {
			ResultSetMetaData rsmd = rs.getMetaData();
			int columnCount = rsmd.getColumnCount();

			if (rs.next()) {
				results = new HashMap<String, String>();
				for (int i = 1; i <= columnCount; i++) {
					Object obj = rs.getObject(i);
					/*
					 * if(obj instanceof BLOB) { BLOB blob = (BLOB)
					 * rs.getBlob(i); obj = blob.getBinaryStream(); }
					 */
					results.put(rsmd.getColumnName(i).toLowerCase(),
							rs.getString(i));
				}
			}
			LogManager.logger.debug("取出结果集数据完成");
		} catch (SQLException e) {
			LogManager.logger.error("取出结果集数据失败", e);
		} finally {
			close(con, ps, rs);
		}
		return results;
	}
}

 

Mybatis简单练习注解sql和配置文件sql+注解形式加载+配置文件加载 展示了MyBatis的核心功能和配置方式。项目结构包含lib依赖库、src源码目录和srclib资源,实现了数据库CRUD操作、多种映射方式(注解和XML配置)、高级查询和结果映射等功能。通过Monster实体类与数据库表的映射,演示了动态SQL、条件查询等特性。配置文件中包含MyBatis核心设置、JDBC连接和日志管理。测试类可运行验证功能,适合作为MyBatis学习的基础示例。项目要求预先创建mybatis_monster_和mybatis_monster2表,并正确配置数据库连接信息。 阅读详情

相关推荐

自动生成crud操作的工具

首先配置好数据库和crud各模块包名,然后点击start.bat,开始生成代码

Java instanceof 运算符

该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类 型)。 instanceof 运算符用来判断一个变量所引用的对象的实际类型,注意是它引用的对象的类型,不是变量的类型。请看下面的代码: public final class Demo{ public static void main(String[] args) { // 引用 People 类的实例 People obj = new People(); if(obj instanceof Object){ System.out.pri

weixin_44565959的博客 216

基于elasticsearch的CRUD简单封装java版

简化elasticsearch API的使用方式 使用示例 ApplicationContext context = new AnnotationConfigApplicationContext(TestConfiguration.class); ESBasicService service = context.getBean(ESBasicService.class); /*service.createIndexAndMapping(UserM.class); // 插入数据 List users = new ArrayList(); UserM user = new UserM("张先生", 25); users.add(user); UserM user2 = new UserM("王大姐", 30); users.add(user2); UserM user3 = new UserM("王小二", 25); users.add(user3); int count = service.saveDatas(users); System.out.println(count);*/ QueryRule rule = new QueryRule(); rule.add(Restrictions.ge("age", 20)).add(Restrictions.like("name", "*王*")); System.out.println(JSON.toJSONString(service.list(UserM.class, rule))); 源码链接:https://blog.youkuaiyun.com/u010825190/article/details/106838796

java后端CRUD功能实现

1、springboot框架建立 框架建立可参考以下博客,需要把补充部分也完成 https://blog.youkuaiyun.com/daniaoxp/article/details/119811741 内容稍有不同,还要做以下改变。 改变1: 下面操作不需要 改变2: 在HelloApplication.java文件中新增**@MapperScan(“com.xp.dao”)** 改变3: application.yml文件内容换成以下内容 server: port: 8888 spring: dat

daniaoxp的博客 4202

实例讲解Simulink CAN通讯丢失故障判定模型搭建及仿真测试验证方法

本文通过ABS通讯丢失故障触发、判定条件Simulink模型的搭建和仿真的讲解,介绍了一种控制器CAN通讯丢失故障判定的方法和建模方法,希望能给相关技术人员带来一定参考和帮助。

qq_43011586的博客 3685

基于javaEE的图书管理系统

极简的图书管理系统,无任何样式修饰,适合新手练手(图文并释) 1、实现了用户注册、登录,图书的添加、修改、删除和修改操作 2、工具需要:eclipse、mysql、Tomcat 3、做系统之前在eclipse需要配置Tomcat服务器和导入mysql连接数据库的jar包 4、数据库中建一个user表存用户信息,一个book表存图书信息 一、各种页面 index.html文件,系统运行的首页,有登录...

qq_44357792的博客 2万+

封装CRUD的方法

在上面的代码中,我们创建了一个中间件来设置 HTTP 响应头,包括 Access-Control-Allow-Origin(允许跨域的域名)、Access-Control-Allow-Methods(允许的请求方法)和 Access-Control-Allow-Headers(允许的请求头字段)。需要注意的是,在循环结束后,return() 方法设置的返回值并不会被打印出来,因此要想获取该值,应该在循环内手动调用 return() 方法,并设置返回值。否则,继续处理正常请求。

BradenHan的专栏 1856

我的老款Intel MacBook Pro,如何用OpenVINO把本地大模型推理速度提升10倍?

本文详细介绍了如何在老款Intel MacBook Pro上使用OpenVINO工具包将本地大模型推理速度提升10倍。通过对比Ollama CPU原生、Transformers原生和OpenVINO优化三种方案,展示了OpenVINO在性能优化上的显著优势,并提供了从环境配置到模型转换、性能调优的完整实战指南。

weixin_28694295的博客 303

后台CRUD通用封装(简)

admin后台代码通用封装 #重点封装类 CommonDao /* 如果在mycat分库分表的情况下,可以提供多个方法支持不同分片算法的数据crud,这里演示较为常用的查询,即非复合分片的CRUD实现 @mapper:使用该注解,结合@select等标签来省略配置文件 */ public interface CommonDao{ //不带条件查询所有 @Select("select *from ${tableName} limit #{start} ,#{ size}") @ResultType(

qq_43515662的博客 637

python爬虫豆瓣读书top250+数据清洗+数据库+Java后端开发+Echarts数据可视化(二)

之前的博客已经写了python爬取豆瓣读书top250的相关信息,接下来继续看如何清洗数据。 如果有没看懂的或是不了解上一部分说的是什么内容的,请看https://blog.youkuaiyun.com/qq_45804925/article/details/112848887 现在开始具体内容的复习: 1. 豆瓣读书top250信息预处理 #数据清洗 import pandas as pd import re import time # 先读取数据文件 data = pd.read_csv('E:/Class/商.

qq_45804925的博客 4443

QTableView实现表格加载百万条数据

本文介绍用QTableView实现加载100万条数据显示到表格。 1.创建工程 用Qt Creator创建Qt Widgets Application项目,基类选择QWidget,创建好了,如图: 2.添加QTableView控件 在widget.ui中添加QTableView控件,和QPushButton,采用栅格布局,如图: 3.添加函数 头文件 QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Wid

丁爸的博客 8272

通用封装笔记

一.概述 后台管理系统大部分功能都是对数据进行查改删,少部分功能还有增加功能。在企业开发过程中,常常 封装通用的接口来处理此类功能,以提高开发效率,但其封装过程会涉及以下几个关键点需要注意处 理: 权限的控制(访问、数据、操作) 信息安全控制(SQL注入的问题) 对于部分功能需求归纳总结为以下功能点: 新增:能够通用插入授权的数据表数据 修改:能够通用修改指定的字段数据 删除:能够通用删除指定条件的数据 列表:能够通用加载不同数据表的数据,并支持条件查询、分页等 在通用功能中,对于以上功能可做前后置增

weixin_50648720的博客 528

《Android最全面试题-Offer直通车》目录

如今Android求职是僧多粥少,竞争非常激烈,企业招聘时要求很高,本专栏汇聚android面试各种考点,各大公司Android面试题,《Android 最全面试题》将助你全方位提升,助您脱颖而出,早日拿到满意Offer。本专栏汇聚了海量优质内容,文章数量超过100 篇。凭借过硬的质量,每月新增订阅用户数以百计,如今仅需特惠价 9.9 元,限时抢购,后续将逐步恢复原价,早订阅早开启逆袭之旅。精心筹备,整理出一系列超万字精华篇章,累计数十万的 Android 面试题深度剖析。

大模型大数据攻城狮的专栏 2868

MyBatis深入探索:原生API与注解方式实现CRUD操作

1. 别名是为 Java 类型命名一个短名字。它只和 XML 配置有关,用来减少类名重复的部分2. 如果指定了别名,我们的MappperXxxx.xml 文件就可以做相应的简化处理3. 注意指定别名后,还是可以使用全名的4. 举例说明。

业精于勤,荒于嬉 1251

【微信小程序】微信小程序开发环境搭建:安装微信小程序开发者工具

通过本文的介绍,你应该已经成功安装并配置了微信小程序开发者工具,为微信小程序开发做好了准备。接下来,你可以开始编写你的第一个小程序项目,探索更多有趣的功能和特性。祝你开发顺利,创造更多优秀的作品!

墨夶的博客 2952

Autosar软件组件分析及ARXML文件分析

Autosar软件组件分析及ARXML文件分析

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 3603

java 【spring-data-jpa】【jdbcTemplate】【访问数据库的3种方法】

Spring Tool Suite简称STS,是针对srping开发的集成工具,而且集成了maven,可以直接建立一个maven项目。之后我们使用maven项目整合ssm框架。 在Spring项目中,我们并没有手动创建实例(对象),是Spring通过ApplicationContext帮我们创建的放在IOC容器里。ApplicationContext是一个IOC容器接口,它所创建的对象都称作是b...

Lakeson 505

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Mybatis注解方式CRUD数据库

6. (#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary}) 是从传入的monster对象属性值。5. (`age`, `birthday`, `email`, `gender`, `name`, `salary`) 表的字段。2. parameterType="com.zzy.entity.Monster" 放入的形参的类型。3. namespace 指定该xml文件和哪个接口对应!2. 该文件可以去实现对应的接口的方法。

2301_79724394的博客 472

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

初学如何学习Java(Java整体学习知识路线规划表)

 第一阶段技术名称技术内容Java基础计算机基础知识理解以下这些知识:DOS常用命令、Java概述、JDK环境安装配置、环境变量配置、Java程序入门。编程基础掌握学习常量与变量、数据类型、运算符、流程控制语句、方法、数组知识。面向对象重点学习类与对象、封装、继承、多态、抽象类、接口。常用类常用类介绍、正则表达式等。集合重点学习Collection集合、List集合、Set集合、Map集合。异常异...

El Psy Congroo 471

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

MyBatis(一)原理过程实现crud以及自增主键的返回

MyBatis是一个用在持久层的框架,也就是操作数据库的。 在前面的学习中,我们通过原生jdbc操作数据库。以及spring框架中封装的JdbcTemplate框架来操作数据库。 原生态jdbc程序问题 (1)数据库的连接关闭操作复杂,效率慢 (2)sql语句的编写和preparedStatement执行sql语句中注入参数都是在java语句中,是硬编码 (3)从resutSet中遍历结...

wangdongli_1993的博客 2652

学习java的知识体系路线

将网上的Java学习路线图进行归纳囊括,方便以后学习时弥补自身所欠缺的知识点,也算是给自己一个明确的学习方向。至于第一阶段,即JavaSE的基础,这里不给出。 第二阶段 技术名称 技术内容 数据库技术 Oracle基础管理 Oracle背景简介,数据库的安装,数据库的用户名和密码,客户端登录数据库服务SQLPLUS,数...

weixin_30900589的博客 99

hibernate框架的第一个CRUD案例

前言 在学习hibernate之前我们先回顾之前的数据库操作技术。之前是用原始的jdbc操作数据库,主要是通过Connection/Statement/ResultSet这三个类来对数据库进行操作的。还有一个DbUtils组件, 轻量级的组件其实也是封装了原生态的jdbc操作。这里就不在赘述之前的知识了。 ORM概念 O, Object 对象 R, Relation 关系 (关系

nwpu_geeker的博客 1513

招银面试官:听说你精通 MyBatis,我们来切磋一下

若有收获,请记得分享和转发哦这节我们的主角是MyBatis,作为当前国内最流行的ORM框架,是我们这些crud选手最趁手的工具,赶紧来看看面试都会问哪些问题吧。基础1. 说说什么是MyBatis?MyBatis logo先吹一下:Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、...

IT技术精选文摘 5952

java实现条件查询dao_Java之DAO层设计(1)JDBC中的动态条件查询设计

在项目开发过程中,DAO层的设计是必经的一个步骤。在CRUD中,使用最多的可能是Query操作了。DAO层的实现即可以使用原生态的JDBC,也可以使用各种ORM框架。在此,仅仅是想探讨下各种技术针对动态条件查询的设计方式。技术方案:纯JDBC1 每一个方法参数对应一个sql条件项目 方法签名:queryOrdersByClintAndTradeDate(String clientID, Date ...

weixin_30220177的博客 936

Java之DAO层设计(1)JDBC中的动态条件查询设计

在项目开发过程中,DAO层的设计是必经的一个步骤。在CRUD操作过程中,使用最多的可能是Query操作了。 DAO层的实现即可以使用原生态的JDBC,也可以使用各种ORM框架。在此,仅仅是想探讨下各种技术针对动态条件查询的设计方式。 JDBC背景下的动态条件查询设计 1 每一个条件项目对应一个方法参数 方法签名:queryOrdersByClintAndTradeDate(St

求上知者的专栏 5474
上一篇: Java调用Python文件
下一篇: 在django项目中单独运行某个python文件
K先森~
博客等级 码龄10年 35粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值