关于jdbctemplate:
个人感觉比Java链接MysqL那一套方便好维护多了,只需在配置文件维护即可
需要的包:
com.springsource.net.sf.cglib-2.2.0.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
commons-logging-1.1.3.jar
mysql-connector-java-5.1.7-bin.jar
spring-aop-4.0.0.RELEASE.jar
spring-aspects-4.0.0.RELEASE.jar
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
spring-jdbc-4.0.0.RELEASE.jar
spring-orm-4.0.0.RELEASE.jar
spring-tx-4.0.0.RELEASE.jar
spring-web-4.0.0.RELEASE.jar
spring-webmvc-4.0.0.RELEASE.jar
具体步骤:
配置外部资源文件(db.propertIEs)
配置mysal数据源
配置jdbctemplate
bean.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:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.1.xsd"> <!-- 装配自导扫描的包 --> context:component-scan base-package="com.spring.bean.jdbc"></context:component-scan 加载外部资源文件 context:property-placeholder location="classpath:db.propertIEs"/> 配置MysqL数据源 bean ID="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> property name="driverClassname" value="${db.driverClassname}"property="url"="${db.url}"="username"="${db.username}"="password"="${db.password}"> </bean配置jdbcTemplate模板 ="jdbcTemplate"="org.springframework.jdbc.core.JdbcTemplate"="dataSource"> ref /> 配置namedParameterJdbcTemplate ,具名参数 ="namedParameterJdbcTemplate"="org.springframework.jdbc.core.namedparam.namedParameterJdbcTemplate"constructor-arg refconstructor-arg> beans>
外部资源文件
db.driverClassname=com.MysqL.jdbc.Driverdb.url=jdbc:MysqL://localhost:3306/studentsdb.username=rootdb.password=root
实体students
package com.spring.bean.jdbc;/** * 学生实体类 * @author administrator * */public class Students { private Integer ID; String name; String sex; private int age; String tel; public Integer getID() { return ID; } voID setID(Integer ID) { ID = ID; } String getname() { name; } setname(String name) { this.name = String getSex() { sex; } setSex(String sex) { this.sex = getAge() { age; } voID setAge( age) { this.age = String getTel() { tel; } setTel(String tel) { this.tel = tel; } @OverrIDe String toString() { return "Students [ID=" + ID + ",name=" + name + ",sex=" + sex + ",age=" + age + ",tel=" + tel + "]"; } }
实体course
Course { Integer ID; String coursename; String coursenameID; setID(Integer ID) { this.ID = String getCoursename() { coursename; } setCoursename(String coursename) { this.coursename = String getCoursenameID() { coursenameID; } setCoursenameID(String coursenameID) { this.coursenameID = coursenameID; } @OverrIDe return "Course [ID=" + ID + ",coursename=" + coursename + ",coursenameID=" + coursenameID + "]"; }}
jdbctemplate
import org.springframework.beans.factory.annotation.autowired; org.springframework.jdbc.core.BeanPropertyRowMapper; org.springframework.jdbc.core.JdbcTemplate; org.springframework.jdbc.core.RowMapper; org.springframework.stereotype.Repository;@Repository StudentsDao { @autowired JdbcTemplate jdbcTemplate; Students getStudent(String sql,Integer ID) { RowMapper<Students> rowMapper = new BeanPropertyRowMapper<Students>(Students.); Students students = jdbcTemplate.queryForObject(sql,rowMapper,ID); students; }}
jdbcdaosupport
javax.sql.DataSource; org.springframework.jdbc.core.support.JdbcdaoSupport;class CourseDao extends JdbcdaoSupport { 此处必须加入dataSource或jdbcTemplate要么报错如下 * Invocation of init method Failed; nested exception is java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is required * 如不加jdbcTemplate。要用dataSource * name只能重新加入dataSource,为什么我用了setDataSource22为DataSource赋值 * 因在JdbcdaoSupport类中为final关键字修饰,不可重写 * @param dataSource */ @autowired setDataSource22(DataSource dataSource) { setDataSource(dataSource); } * 获取课程 * sql * ID * @return */ public Course getCourse(String sql, ID){ RowMapper<Course> rowMapper = new BeanPropertyRowMapper<Course>(Course.); Course course = getJdbcTemplate().queryForObject(sql,1)"> course; }}
测试类具体见注释
java.util.ArrayList; java.util.HashMap; java.util.List; java.util.Map; org.junit.Test; org.springframework.context.ApplicationContext; org.springframework.context.support.ClasspathXmlApplicationContext; org.springframework.dao.DataAccessException; org.springframework.jdbc.core.namedparam.BeanPropertysqlParameterSource; org.springframework.jdbc.core.namedparam.MapsqlParameterSource; org.springframework.jdbc.core.namedparam.namedParameterJdbcTemplate; org.springframework.jdbc.core.namedparam.sqlParameterSource; MainTest { private ApplicationContext ctx=null; StudentsDao studentsDao; JdbcTemplate jdbcTemplate; namedParameterJdbcTemplate namedParameterJdbcTemplate; CourseDao courseDao; { ctx=new ClasspathXmlApplicationContext("bean.xml"); jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate"); studentsDao=(StudentsDao) ctx.getBean("studentsDao"); namedParameterJdbcTemplate=(namedParameterJdbcTemplate)ctx.getBean("namedParameterJdbcTemplate"); courseDao=(CourseDao) ctx.getBean("courseDao"); }
/**
*更新某一条 *** 作
*/ @Test getCourse(){ String sql="SELECT * from course WHERE ID=?"; Course course = courseDao.getCourse(sql,1); System.out.println(course); } * 使用具名参数 *** 作数据库(可以为字段起名) * 优点就是:当字段较多,不用考虑字段的顺序,效率高,即key,value的形式 * 缺点:麻烦代码量多 @Test testnamedParameterJdbcTemplate(){ String sql="INSERT INTO students ( name,sex,age,tel) VALUES (:n,:s,:a,:t)"; Map<String,Object> paramMap=new HashMap<String,Object >(); paramMap.put("n","rongrong"); paramMap.put("s","man"); paramMap.put("a","25"); paramMap.put("t","18612396984"); namedParameterJdbcTemplate.update(sql,paramMap); } * 使用具名参数 *** 作数据库 * 使用update(String sql,sqlParameterSource paramSource)方法传入实体参数 * 要求:sql的字段名称与对象属性名称一致 * sqlParameterSource paramSource testnamedParameterJdbc(){ String sql="INSERT INTO course (coursename,coursenameID) VALUES (:coursename,:coursenameID);"; Course course = new Course(); course.setCoursenameID("As-1001"); course.setCoursename("java"); sqlParameterSource paramSource = BeanPropertysqlParameterSource(course); namedParameterJdbcTemplate.update(sql,paramSource); } * 修改数据库某条属性 testUpdate(){ String sql="UPDATE students SET `name`=? WHERE ID=? "; jdbcTemplate.update(sql,"lucy",1)">); } * 批量更新数据 * List<Object[]>此处为对象数组 * 必须为对象数组,插入一条数据如:{"MT-1","man",17,"13706063546"} * 如为多条数据,那么必须为对象数组 testBatchUpdate(){ String sql="INSERT INTO students ( name,tel) VALUES (?,?,?)"; List<Object[]> batchArgs=new ArrayList<Object[]>(); batchArgs.add(new Object[]{"MT-1","13706063546"}); batchArgs.add(new Object[]{"MT-2",18,"13706063547"new Object[]{"MT-3",19,"13706063548"new Object[]{"MT-4",20,"13706063549"}); jdbcTemplate.batchUpdate(sql,batchArgs); } * 查询返回一个实体对象集合 * 注意调用的不是 queryForList 方法 testqueryForList(){ String sql="SELECT ID,name,tel FROM students"; RowMapper<Students> rowMapper = ); List<Students> students = jdbcTemplate.query(sql,rowMapper); 不是 queryForList 方法 List<Students> students = jdbcTemplate.queryForList(sql,Students.class); System.out.println(students); } * 从数据库中获取一条记录,实际得到对应的一个对象 * 注意不是调用 queryForObject(String sql,Class<T> requiredType,Object... args) 方法! * 而需要调用 queryForObject(String sql,RowMapper<T> rowMapper,Object... args) * 1. 其中的 RowMapper 指定如何去映射结果集的行,常用的实现类为 BeanPropertyRowMapper * 2. 使用 sql 中列的别名完成列名和类的属性名的映射. 例如 name,tel * 3. 不支持级联属性. JdbcTemplate 到底是一个 JDBC 的小工具,而不是 ORM 框架 testqueryForObject(){ String sql="SELECT ID,tel FROM students WHERE ID=?"); Students students = jdbcTemplate.queryForObject(sql,1)">); System.out.println(students); } * 获取单个列的值,或做统计查询 * 使用 queryForObject(String sql,Class<Long> requiredType) * 其中:requiredType为Integer.class可以达到统计查询的效果 * 使用 int queryForInt(String sql) throws DataAccessException,可实现 testqueryForINt(){ String sql="SELECT count(ID) FROM students "; RowMapper<Students> rowMapper = new BeanPropertyRowMapper<Students>(Students.class); int long1 = jdbcTemplate.queryForInt(sql); Integer long1 = jdbcTemplate.queryForObject(sql,Integer.class); System.out.println(long1); } * 根据用户ID,返回用户对象 getStudents(){ String sql="SELECT ID,1)">; System.out.println(studentsDao.getStudent(sql,4)); } }
总结
以上是内存溢出为你收集整理的spring使用JdbcTemplate和jdbcDaosupport及具名参数使用全部内容,希望文章能够帮你解决spring使用JdbcTemplate和jdbcDaosupport及具名参数使用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)