Spring Jdbc 自定义 ORM——sql查询对应Java数据对象

Target:  实现如下,通过Spring Jdbc,传入sql,查询满足条件的Java数据对象:

pojo:

public class ZmTest {

    public ZmTest() {
        // TODO Auto-generated constructor stub
    }
    private Integer id;
    private String name;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

ZmTest

sql:

create table zm_test_sjdbc(
id number(3),
name varchar2(20)
);

表结构

SELECT id, name FROM ZM_TEST_SJDBC WHERE id = ?

query

Step:

一、自定义映射查询

package springjdbc;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import javax.sql.DataSource;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.MappingSqlQuery;

public class CustomerMappingQuery extends MappingSqlQuery {

    public CustomerMappingQuery(DataSource ds) {
        super(ds, "SELECT id, name FROM ZM_TEST_SJDBC WHERE id = ?");// WHERE id = ?
        super.declareParameter(new SqlParameter("id", Types.INTEGER));
        compile();
    }

    public ZmTest mapRow(ResultSet rs, int rowNumber) throws SQLException {
        ZmTest zmTest = new ZmTest();
        zmTest.setId(Integer.valueOf(rs.getObject("id").toString()));
        zmTest.setName(rs.getString("name"));
        return zmTest;
    }

}

CustomerMappingQuery

二、测试类

import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;

import org.springframework.jdbc.datasource.DriverManagerDataSource;

public class Get_cmd_log {
    public Get_cmd_log(){

    }

    public static void main(String[] args){
        Get_cmd_log gcl = new Get_cmd_log();
        gcl.getData(1);
     }

    //get Datasource
    public DataSource getDataSource(){
        DriverManagerDataSource ds = new DriverManagerDataSource();
        ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");        

ds.setUrl("jdbc:oracle:thin:@ip:port:name");
        ds.setUsername("*******");
        ds.setPassword("*******");
        return ds;
    }

    @SuppressWarnings("unchecked")
    public List<ZmTest> getData(Integer id){
        Get_cmd_log gcl = new Get_cmd_log();
        DataSource dsource =  gcl.getDataSource();
        CustomerMappingQuery query = new CustomerMappingQuery(dsource);
        Object[] params = new Object[1];
        params[0] = id;
        List resZm = query.execute(params);
        ZmTest zTest = new ZmTest();
        zTest = (ZmTest)(resZm.get(0));
        System.out.println(zTest.getName());
        return resZm;
    }
}

Get_cmd_log

测试结果: 获得对应id的name。

原理:

底层通过JdbcTemplate实现。

应用场景:

简单对象查询:如登录。

优点:

无需通过第三方ORM框架,提高效率。

Tips:

oracle 数字类型对应Java类型:

http://www.cnblogs.com/codegod/p/6826133.html

时间: 2024-12-20 01:21:44

Spring Jdbc 自定义 ORM——sql查询对应Java数据对象的相关文章

sql 查询前十条数据

-- oracle sql 查询前十条数据 select * from b2c_code where rownum <= '10'; -- sql server 查询前十条数据 select top 10 * from b2c_code;

在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型XXX的对象时检测到循环引用。

在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型 的对象时检测到循环引用. 异常信息(部分): System.Web.Services.Protocols.SoapException: 服务器无法处理请求. ---> System.InvalidOperationException: 生成 XML 文档时出错. ---> System.InvalidOperationException: 序列化类型 Web

Spring Data JPA原生SQL查询

package com.wanda.cms.dao.repository;import org.springframework.stereotype.Repository;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext;import javax.persistence.Query;import java.math.BigInteger;import java.util.*; /*

像写SQL一样编写Java数据应用-TinySqlDsl

前言话说企业应用,一般离不开数据库.要做数据库,可以有N种方案,比如:直接采用JDBC层自己封装下使用的,采用一些框架的,如:iBatis,Hiberate,Spring JDBC Template等等(这个太多了,因此不一一列举)的,这些方案也都在各自的领域展示了自己的特点,解决了相当部分的技术问题,并取得了相当好的应用效果. 但是不管是哪种方案,其优点和缺点往往也是连在一起的,究其原因是因为SQL和Java编程之间是割裂的,如果封装得不到位,做Java的人太难使用:如果封装得太多,在做一些用

SQL 查询不重复数据

sql不重复的查找统计数据2007-06-29 11:04例表如下: 表名:MYTEST TID    COL1    COL2     COL3 1           1           A            A 2           1           A            A 3           2           A            A 4           2           B            A 5           3       

spring jdbc 批处理插入主健重复的数据

1.有事务:当调用spring jdbc 的批处理的时候,在实现层加入事物,只要有插入异常的数据,整个批处理操作都会回滚.事务保证操作的原子性. 2.无事务:当没有事务的时候,批处理插入数据的时候,若主健重复则会直接抛出异常,后面没有主键冲突的依然不会插入,因为当抛出异常的时候,下一次插入操作就不会执行. 3.当想要插入的数据是增量的 有两种方法:第一种删除原来的数据,插入新的数据.第二种:插入数据主健重复的时候做更新操作 insert into   on dupulicate key upda

sql查询删除重复数据

数据库UserInfo 删除重复数据 即删除重复的用户名手机号 同一个用户名手机号只保留一个用户 01.根据多个字段查询重复数据 with data1 as( select MobilePhone,Name from UserInfogroup by MobilePhone,Namehaving count(*)>1 ), 02.对重复数据分配编号 data2 as ( select u.*,row_number() over(partition by u.MobilePhone,u.Name

Spring Jdbc使用like模糊查询

public List<WfConfigMVO> queryList(WfConfigMVO wfConfig) throws SysException { StringBuffer sql = new StringBuffer(); sql.append("select WF_CONFIG_ID,WF_TEMPL_KEY,TIME_LIMIT,WF_NAME "); sql.append("from wf_config "); sql.append(&

在zepplin 使用spark sql 查询mongodb的数据

1.下载zepplin 进入官网下载地址,下载完整tar包. 2.解压 tar zxvf zeppelin-0.7.3.tgz 3.修改配置 新建配置文件 cp zeppelin-env.sh.template zeppelin-env.sh 修改配置文件 vi zeppelin-env.sh # 设置java home 路径 export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64/jre # 设