Java Tutorial/Spring/Query Parameters
Содержание
Control Parameter Type In JdbcTemplate Query
File: context.xml
<source lang="java">
<?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="org.hsqldb.jdbcDriver"/> <property name="url" value="jdbc:hsqldb:mem:."/> <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></source>
Deal With TimeStamp
File: context.xml
<source lang="java">
<?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="org.hsqldb.jdbcDriver"/> <property name="url" value="jdbc:hsqldb:mem:."/> <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></source>
Object array as parameter
File: Main.java
<source lang="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(); }
}</source>
StoredProcedure with parameters
File: EmployeeDaoImpl.java
<source lang="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; }
}</source>
UpdateStatement With Two Parameters
File: context.xml
<source lang="java">
<?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="org.hsqldb.jdbcDriver"/> <property name="url" value="jdbc:hsqldb:mem:."/> <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></source>
Use JdbcTemplate To Execute Delete Statement With Parameter
File: EmployeeDaoImpl.java
<source lang="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; }
}</source>
Use JdbcTemplate To Pass In Different Type Of Parameters
File: context.xml
<source lang="java">
<?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></source>