Java Tutorial/Spring/Query Parameters
Содержание
Control Parameter Type In JdbcTemplate Query
File: context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:lang="http://www.springframework.org/schema/lang"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">
<!--
<bean id="dataSource" class="org.apache.rumons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@oracle.devcake.co.uk:1521:INTL"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
-->
<bean id="dataSource" class="org.apache.rumons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:mem:."/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
<!--
<bean id="mysqlDataSource" class="org.apache.rumons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://dbhost-prospring-psql/prospring"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
-->
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler">
<property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/>
</bean>
<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.rumonsDbcpNativeJdbcExtractor"/>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
Deal With TimeStamp
File: context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:lang="http://www.springframework.org/schema/lang"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">
<!--
<bean id="dataSource" class="org.apache.rumons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@oracle.devcake.co.uk:1521:INTL"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
-->
<bean id="dataSource" class="org.apache.rumons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:mem:."/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
<!--
<bean id="mysqlDataSource" class="org.apache.rumons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://dbhost-prospring-psql/prospring"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
-->
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler">
<property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/>
</bean>
<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.rumonsDbcpNativeJdbcExtractor"/>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
Object array as parameter
File: Main.java
import java.util.List;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.SingleConnectionDataSource;
public class Main {
public static void main(String args[]) throws Exception {
SingleConnectionDataSource ds = new SingleConnectionDataSource();
ds.setDriverClassName("org.hsqldb.jdbcDriver");
ds.setUrl("jdbc:hsqldb:data/tutorial");
ds.setUsername("sa");
ds.setPassword("");
//
// ds.setDriverClassName("com.mysql.jdbc.Driver");
// ds.setUrl("jdbc:mysql://localhost:3306/spring");
// ds.setUsername("spring");
// ds.setPassword("password");
//
// ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
// ds.setUrl("jdbc:oracle:thin:@spring:1521:my10g");
// ds.setUsername("spring");
// ds.setPassword("password");
JdbcTemplate jt = new JdbcTemplate(ds);
jt.execute("create table employee (id int, name varchar)");
jt.execute("insert into employee (id, name) values (1, "A")");
jt.execute("insert into employee (id, name) values (2, "B")");
jt.execute("insert into employee (id, name) values (3, "C")");
jt.execute("insert into employee (id, name) values (4, "D")");
jt.execute("insert into employee (id, name) values (5, "E")");
jt.execute("insert into employee (id, name) values (6, "F")");
Object[] parameters = new Object[] {new Integer(1)};
List l = jt.queryForList("select id, name from employee where id > ?",
parameters);
System.out.println(l.size());
System.out.println(l.get(0));
System.out.println(l.get(0).getClass());
ds.destroy();
}
}
StoredProcedure with parameters
File: EmployeeDaoImpl.java
import java.sql.Types;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.object.StoredProcedure;
import org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor;
public class EmployeeDaoImpl extends JdbcDaoSupport {
protected void initDao() throws Exception {
super.initDao();
getJdbcTemplate().setNativeJdbcExtractor(new SimpleNativeJdbcExtractor());
CallAggregateEmployees procedure = new CallAggregateEmployees(getDataSource());
int numberOfAffectedRecords = procedure.aggregate(1, 2);
}
}
class CallAggregateEmployees extends StoredProcedure {
private static final String STORED_PROCEDURE_NAME = "aggregate_employees";
public CallAggregateEmployees(DataSource dataSource) {
super(dataSource, STORED_PROCEDURE_NAME);
declareParameter(new SqlParameter("start_age", Types.INTEGER));
declareParameter(new SqlParameter("end_age", Types.INTEGER));
declareParameter(new SqlOutParameter("number_aggregated", Types.INTEGER));
compile();
}
public int aggregate(Integer start, Integer end) {
Map<String, Integer> inParameters = new HashMap<String, Integer>(2);
inParameters.put("start_age", start);
inParameters.put("end_age", end);
Map outParameters = execute(inParameters);
if (outParameters.size() > 0) {
return (Integer) outParameters.get("number_aggregated");
} else {
return 0;
}
}
}
class Employee {
private Integer id;
private Name name = new Name();
private Integer age;
private Sex sex;
private Address address = new Address();
private List<PhoneNumber> phoneNumbers = new ArrayList<PhoneNumber>();
public Employee() {
}
public Employee(String firstName, String lastName) {
this.getName().setFirst(firstName);
this.getName().setLast(lastName);
}
void setId(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public Address getAddress() {
return address;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Name getName() {
return name;
}
public List<PhoneNumber> getPhoneNumbers() {
return Collections.unmodifiableList(phoneNumbers);
}
public void addPhoneNumber(PhoneNumber phoneNumber) {
this.phoneNumbers.add(phoneNumber);
}
public void removePhoneNumber(PhoneNumber phoneNumber) {
this.phoneNumbers.remove(phoneNumber);
}
public void removePhoneNumber(int index) {
this.phoneNumbers.remove(index);
}
public Sex getSex() {
return sex;
}
public void setSex(Sex sex) {
this.sex = sex;
}
}
abstract class Sex {
public static final Sex MALE = new Male();
public static final Sex FEMALE = new Female();
public boolean equals(Object o) {
if (o == null) {
return false;
}
return getClass().equals(o.getClass());
}
}
class PhoneNumber {
}
class Address {
private String line1;
private String line2;
private String city;
private String state;
private String zip;
public void setLine1(String line1) {
this.line1 = line1;
}
public String getLine1() {
return this.line1;
}
public void setLine2(String line2) {
this.line2 = line2;
}
public String getLine2() {
return this.line2;
}
public void setCity(String city) {
this.city = city;
}
public String getCity() {
return this.city;
}
public void setState(String state) {
this.state = state;
}
public String getState() {
return this.state;
}
public void setZip(String zip) {
this.zip = zip;
}
public String getZip() {
return this.zip;
}
}
final class Male extends Sex {
protected Male() {
}
}
final class Female extends Sex {
protected Female() {
}
}
class Name {
private String first;
private String middle;
private String last;
public void setFirst(String first) {
this.first = first;
}
public String getFirst() {
return this.first;
}
public void setMiddle(String middle) {
this.middle = middle;
}
public String getMiddle() {
return this.middle;
}
public void setLast(String last) {
this.last = last;
}
public String getLast() {
return this.last;
}
}
UpdateStatement With Two Parameters
File: context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:lang="http://www.springframework.org/schema/lang"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">
<!--
<bean id="dataSource" class="org.apache.rumons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@oracle.devcake.co.uk:1521:INTL"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
-->
<bean id="dataSource" class="org.apache.rumons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:mem:."/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
<!--
<bean id="mysqlDataSource" class="org.apache.rumons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://dbhost-prospring-psql/prospring"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
-->
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler">
<property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/>
</bean>
<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.rumonsDbcpNativeJdbcExtractor"/>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
Use JdbcTemplate To Execute Delete Statement With Parameter
File: EmployeeDaoImpl.java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.jdbc.core.support.AbstractLobCreatingPreparedStatementCallback;
import org.springframework.jdbc.core.support.AbstractLobStreamingResultSetExtractor;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.object.MappingSqlQuery;
import org.springframework.jdbc.object.SqlUpdate;
import org.springframework.jdbc.object.StoredProcedure;
import org.springframework.jdbc.support.lob.DefaultLobHandler;
import org.springframework.jdbc.support.lob.LobCreator;
import org.springframework.jdbc.support.lob.LobHandler;
import org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor;
import org.springframework.util.FileCopyUtils;
//import org.apache.rumons.dbcp.BasicDataSource;
public class EmployeeDaoImpl extends JdbcDaoSupport{
protected void initDao() throws Exception {
super.initDao();
getJdbcTemplate().setNativeJdbcExtractor(new SimpleNativeJdbcExtractor());
}
public void delete(Employee employee) {
getJdbcTemplate().update("DELETE FROM employee WHERE id = ?", new Object[] { employee.getId() });
}
}
class Employee {
private Integer id;
private Name name = new Name();
private Integer age;
private Sex sex;
private Address address = new Address();
private List<PhoneNumber> phoneNumbers = new ArrayList<PhoneNumber>();
public Employee() {
}
public Employee(String firstName, String lastName) {
this.getName().setFirst(firstName);
this.getName().setLast(lastName);
}
void setId(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public Address getAddress() {
return address;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Name getName() {
return name;
}
public List<PhoneNumber> getPhoneNumbers() {
return Collections.unmodifiableList(phoneNumbers);
}
public void addPhoneNumber(PhoneNumber phoneNumber) {
this.phoneNumbers.add(phoneNumber);
}
public void removePhoneNumber(PhoneNumber phoneNumber) {
this.phoneNumbers.remove(phoneNumber);
}
public void removePhoneNumber(int index) {
this.phoneNumbers.remove(index);
}
public Sex getSex() {
return sex;
}
public void setSex(Sex sex) {
this.sex = sex;
}
}
abstract class Sex {
public static final Sex MALE = new Male();
public static final Sex FEMALE = new Female();
public boolean equals(Object o) {
if (o == null) {
return false;
}
return getClass().equals(o.getClass());
}
}
class PhoneNumber {
}
class Address {
private String line1;
private String line2;
private String city;
private String state;
private String zip;
public void setLine1(String line1) {
this.line1 = line1;
}
public String getLine1() {
return this.line1;
}
public void setLine2(String line2) {
this.line2 = line2;
}
public String getLine2() {
return this.line2;
}
public void setCity(String city) {
this.city = city;
}
public String getCity() {
return this.city;
}
public void setState(String state) {
this.state = state;
}
public String getState() {
return this.state;
}
public void setZip(String zip) {
this.zip = zip;
}
public String getZip() {
return this.zip;
}
}
final class Male extends Sex {
protected Male() {
}
}
final class Female extends Sex {
protected Female() {
}
}
class Name {
private String first;
private String middle;
private String last;
public void setFirst(String first) {
this.first = first;
}
public String getFirst() {
return this.first;
}
public void setMiddle(String middle) {
this.middle = middle;
}
public String getMiddle() {
return this.middle;
}
public void setLast(String last) {
this.last = last;
}
public String getLast() {
return this.last;
}
}
Use JdbcTemplate To Pass In Different Type Of Parameters
File: context.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSource" class="org.apache.rumons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:mem:."/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
<bean id="employeeDao" class="EmployeeDaoImpl">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>