spring使用JdbcTemplate和jdbcDaosupport及具名参数使用

spring使用JdbcTemplate和jdbcDaosupport及具名参数使用,第1张

概述关于jdbctemplate: 个人感觉比Java链接mysql那一套方便好维护多了,只需在配置文件维护即可 需要的包: com.springsource.net.sf.cglib-2.2.0.jar

关于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及具名参数使用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1223554.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存