pojo类的属性与数据库表字段名一样时,java通过反射拼凑出相应的sql.
来源:互联网 发布:java 简单加密 编辑:程序博客网 时间:2024/05/16 02:20
转自csdn http://topic.csdn.net/u/20081102/09/2d46728d-fc23-47bc-b6da-e4638eb0d298.html
备忘:
- package hl.ghost.dao;
- import java.lang.reflect.Field;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.List;
- import org.springframework.jdbc.core.JdbcTemplate;
- import org.springframework.jdbc.core.RowMapper;
- public class Session implements RowMapper {
- private JdbcTemplate jdbcTemplate;
- private Class clazz;
- public int save(Object target, String table) {
- StringBuilder sb = new StringBuilder("insert into ");
- List list = new ArrayList();
- sb.append(table);
- sb.append(" (");
- for (Field field : target.getClass().getDeclaredFields()) {
- Object result = this.getObjectValue(field,target);
- sb.append(field.getName()).append(",");
- list.add(result);
- }
- sb.replace(sb.length() - 1, sb.length(), ")");
- sb.append(" values(");
- for (int i = 0; i < target.getClass().getDeclaredFields().length; i++) {
- sb.append("?,");
- }
- sb.replace(sb.length() - 1, sb.length(), ")");
- return this.jdbcTemplate.update(sb.toString(), list.toArray());
- }
- public int delete(Object target, String table) {
- try {
- return this.jdbcTemplate.update("delete from " + table
- + " where id=?", new Object[] { getObjectValue(target.getClass()
- .getDeclaredField("id"),target) });
- } catch (Exception e) {
- e.printStackTrace();
- return 0;
- }
- }
- public List <Object> selectObjectsByProperties(Object target, String table)
- {
- clazz=target.getClass();
- StringBuilder sb = new StringBuilder("select * from " + table
- + " where 1=1 ");
- List <Object> list = new ArrayList <Object>();
- if (null != target) {
- for (Field field : target.getClass().getDeclaredFields()) {
- Object result = this.getObjectValue(field,target);
- if (result != null) {
- sb.append(" and ").append(field.getName()).append("=? ");
- list.add(result);
- }
- }
- }
- return this.jdbcTemplate.query(sb.toString(), list.toArray(), this);
- }
- public Object mapRow(ResultSet rs, int arg1) throws SQLException {
- Object object = null;
- try {
- object = clazz.getConstructor(null).newInstance();
- for (Field field : clazz.getDeclaredFields()) {
- Method method = clazz.getMethod("set"
- + new StringBuffer(field.getName()).replace(0, 1, field
- .getName().substring(0, 1).toUpperCase()),
- new Class[] { field.getType() });
- method.invoke(object, new Object[] { rs.getObject(field
- .getName())});
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return object;
- }
- public Object getObjectValue(Field field,Object target) {
- Object result = null;
- try {
- Method method = target.getClass().getMethod(
- "get"
- + new StringBuffer(field.getName()).replace(0, 1,
- field.getName().substring(0, 1)
- .toUpperCase()), null);
- result = method.invoke(target,null);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return result;
- }
- public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
- this.jdbcTemplate = jdbcTemplate;
- }
- }
- 这是建立在jdbcTemplate上的ormapping,只要你的类的属性与数据表的字段名字一样,且有id这个主键,那么就可以用这个Session做增删查,比如你有个表 users(id,uname,upassword) ,类User(id,uname,upassword).
- 那么你就可以用上面的session对users这个表做增删改查,
- User user=new User();
- user.setId(1);
- user.setUname("zhangsan");
- user.setUpassword("password");
- session.save(user,"users");//增加
- session.delete(user,"users");//删除
- //他会跟据你user的属性的值进行组合查询,下面是按name,password的组合查询。
- User user=new User();
- user.setUpassword("password");
- user.setUname("zhangsan");
- session.selectObjectsByProperties(user,"users");
- pojo类的属性与数据库表字段名一样时,java通过反射拼凑出相应的sql.
- mybatis数据库表字段名与实体类属性名不同的冲突之resultMap
- mybatis(四)——mybatis解决数据库表字段名与实体类属性名不同的冲突
- 表字段名和实体类属性名不一致的处理
- MyBatis表字段名与实体类属性名冲突的解决方式
- MyBatis学习笔记:表字段名与实体类属性名不一致的解决方法
- SQL 语句获取表字段名称,属性.
- SQL 语句获取表字段名称,属性
- oracle 获得表字段名,注释等的sql语句
- mysql存储过程的参数名不能和表字段名一样,否则不执行条件
- SQL修改表字段名
- 数据库表字段名查询
- Java实体类的属性类型与数据库表字段类型对应表
- mybatis不能作为表字段名的关键字
- JDBC之简单的读取表字段名
- MyBatis学习笔记(四)表字段名与实体类属性名不相同解决
- 02-MyBatis_当实体属性与表字段名不一致
- Sql查询数据库名,表名,存储过程,表字段名
- Dos for命令(一)
- 自己动手写操作系统
- 常见的MIME类型汇总(逐步收集)
- 就“CSDN高手”发一下议论。
- IT管理人才必须具备的十大能力
- pojo类的属性与数据库表字段名一样时,java通过反射拼凑出相应的sql.
- strtok
- 网上关于获取中文字符首字母的SQL函数
- JFrreChart createBubbleChart方法中Bubble大小的调节
- JS刷新父页面
- oop精解
- SQL Server 2000 中使用正则表达式
- 求助IIS401.2問題
- eclispe环境配置