一般查询实体的时候,都需要这么使用:
/** *//**
* 根据id查询
*
* @return
*/
public Emp queryEmpById(Integer id)
{
String sql = "select * from emp where empno = ?";
ParameterizedRowMapper<Emp> mapper = new ParameterizedRowMapper<Emp>()
{
public Emp mapRow(ResultSet rs, int rowNum) throws SQLException
{
Emp emp = new Emp();
System.out.println("row:" + rowNum);
emp.setEmpno(rs.getInt("empno"));
emp.setEname(rs.getString("ename"));
return emp;
}
};
return this.getSimpleJdbcTemplate().queryForObject(sql, mapper, id);
}
能不能像Hibernate那样自动set这些值呢,用反射可以实现.
package orm;
import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
/** *//**
* 通用的Object包装类(类型问题,依然是个瓶颈,如果有好的解决方案请pm我)
*
* 功能:查询对象类型或对象集合时的通用包装类
*
*/
@SuppressWarnings("unchecked")
public class ObjectMapper implements ParameterizedRowMapper
{
private Class clazz;
public ObjectMapper(Class clazz)
{
this.clazz = clazz;
}
/** *//**
* 重写mapRow方法
*/
@Override
public Object mapRow(ResultSet rs, int rowNum) throws SQLException
{
try
{
Object obj = clazz.newInstance();
Field fields[] = obj.getClass().getDeclaredFields();
for (int i = 0; i < fields.length; i++)
{
Field field = fields[i];
// 暴力访问
field.setAccessible(true);
this.typeMapper(field, obj, rs);
// 恢复默认
field.setAccessible(false);
}
return obj;
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
/** *//**
* 数据类型包装器
*
* @param field
* 目标属性
* @param obj
* 目标对象
* @param rs
* 结果集
* @throws Exception
*/
private void typeMapper(Field field, Object obj, ResultSet rs)
throws Exception
{
String type = field.getType().getName();
if (type.equals("java.lang.String"))
{
field.set(obj, rs.getString(field.getName()));
}
else if (type.equals("int") || type.equals("java.lang.Integer"))
{
field.set(obj, rs.getInt(field.getName()));
}
else if (type.equals("long") || type.equals("java.lang.Long"))
{
field.set(obj, rs.getLong(field.getName()));
}
else if (type.equals("boolean") || type.equals("java.lang.Boolean"))
{
field.set(obj, rs.getBoolean(field.getName()));
}
else if (type.equals("java.util.Date"))
{
field.set(obj, rs.getDate(field.getName()));
}
}
}
dao:
/** *//**
* 查询操作 (自动setEmp类型所有值)
*
* @return
*/
public List queryList()
{
return this.getJdbcTemplate().query("select * from emp",
new ObjectMapper(Emp.class));
}
单个查询:
public Emp queryEmpById2(Integer id)
{
String sql = "select * from emp where empno = ?";
ObjectMapper om = new ObjectMapper(Emp.class);
return (Emp) this.getSimpleJdbcTemplate().queryForObject(sql, om, id);
}测试通过:
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
上面是我的一个简单封装,在Spring2.5中及以后版本,已经提供了便捷方法:
/** *//**
* 查询操作 (自动setEmp类型所有值)
*
* @return
*/
public List queryList()
{
return this.getSimpleJdbcTemplate().query(
"SELECT * from emp",
ParameterizedBeanPropertyRowMapper.newInstance(Emp.class));
}
/** *//**
* 根据id查询
*
* @return
*/
public Emp queryById(Integer id)
{
return this.getSimpleJdbcTemplate().queryForObject(
"SELECT * from emp where id = ?",
ParameterizedBeanPropertyRowMapper.newInstance(Emp.class),7369);
}
这样就简单多了,也是用反射实现的.
分享到:
相关推荐
SBORM只是针对spring jdbc的一些不方便的地方,做了一些封装,更加简化日常的开发工作,基于spring jdbc的RowMapper自动实现对象映射,也勉强算的上叫ORM,只是大部分功能已经由spring jdbc实现了。 平时不太...
devX devX 基于spring boot2.0 开发一些系统常用工具集成,jdbc封装,mybatis Mapper4,mybatis-plus,集群缓存 Lock等
- mybatis:作为数据对象的持久化引擎,用做处理数据交互,对jdbc做了透明化的封装,相比于hibernate这种全自动的框架,mybatis属于半自动化的,程序员可以自己写sql语句,相比于hibernate跟具灵活性。 需要注意的...
Spring中对jdbc的简单封装 Apache的DBUtils: 它和Spring的JdbcTemplate很想,也是对Jdbc的简单封装 以上这些都不是框架 JDBC是规范 Spring的JdbcTemplate和Apache的DBUtils都只是工具类 4.mybatis的...
MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...
mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql...
mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql...
这是一个简单的数据库映射Demo,目的是通过JDBC封装,提供对象与数据库表之间的相互映射关系。类似的成熟产品已经有Mybatis了,所以这个Demo也只是写着玩,并不会用在生产环境中。 ###依赖 这个项目依赖以下第三方库...
mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql...
mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql...
mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql...
Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的...
SSM:spring+springMVC+mybaits Spring:是一个容器,就是一个bean(实体对象)大集合。 JavaBean SpringMVC:控制器(业务逻辑层)(视图分发器)。...Mybaits:jdbc的封装(数据库框架)Mapper.xml
我们可以通过Spring官网的初始化工具来快速创建一个SpringBoot项目,只需要选择我们需要的依赖,比如web,thymeleaf,jdbc,mybatis,mysql等, 第二步:创建一个数据库表 我们需要在MySQL中创建一个数据库表来存储...
-- Spring对JDBC的封装 --> <groupId>org.springframework <artifactId>spring-jdbc <groupId>org.springframework <artifactId>spring-aspects <!-- 关系型数据库整合时需配置 如hibernate jpa...
BeetlSQL 不仅仅是简单的类似MyBatis或者是Hibernate,或者是二者的综合,BeetlSQL远大理想是对标甚至超越Spring Data,是实现数据访问统一的框架,无论是传统数据库,还是大数据,还是查询引擎或者时序库,内存...
再通过一个对象封装起来,传入前端。 ``` * 使用了PageHelper之后,我们就不需要再如此繁琐的进行分页了。 * ```Java 使用PageHelper.startPage(第几页,每页显示多少条);就可以在这段代码之后的下一个查询的...
3、config文件,里面是我们的配置文件,jdbc.properties是对数据库连接的配置,mybatis-config.xml是对mapper.xml文件进行扫描的配置, spring.xml主要是配置组件扫描器,加载外部的properties配置文件,配置数据库...
<artifactId>spring-jdbc ${spring.version} <groupId>org.springframework <artifactId>spring-aspects ${spring.version} <!-- JSP相关 --> <groupId>jstl <artifactId>jstl ${jstl.version...
│ 06.jedis客户端在spring中的配置.avi │ 07.测试spring中的JedisClient.avi │ 08.缓存同步-服务发布.avi │ 09.后台调用缓存同步服务.avi │ 10.solr单机版安装.avi │ 11.中文分析器配置.avi │ 12.导入数据-...