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

关于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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsdhttp://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><property name="url" value="${db.url}"></property><property name="username" value="${db.username}"></property><property name="password" value="${db.password}"></property> </bean><!--配置jdbcTemplate模板  --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource"><ref bean="dataSource"/></property></bean><!-- 配置namedParameterJdbcTemplate ,具名参数 --><bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"><constructor-arg ref="dataSource"></constructor-arg></bean></beans>

外部资源文件

db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/students
db.username=root
db.password=root

实体students

package com.spring.bean.jdbc;/*** 学生实体类* @author Administrator**/
public class Students {private Integer Id;private String name;private String sex;private int age;private String tel;public Integer getId() {return Id;}public void setId(Integer id) {Id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}@Overridepublic String toString() {return "Students [Id=" + Id + ", name=" + name + ", sex=" + sex+ ", age=" + age + ", tel=" + tel + "]";}}

实体course

package com.spring.bean.jdbc;public class Course {private Integer id;private String coursename;private String coursenameid;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getCoursename() {return coursename;}public void setCoursename(String coursename) {this.coursename = coursename;}public String getCoursenameid() {return coursenameid;}public void setCoursenameid(String coursenameid) {this.coursenameid = coursenameid;}@Overridepublic String toString() {return "Course [id=" + id + ", coursename=" + coursename+ ", coursenameid=" + coursenameid + "]";}
}

jdbctemplate

package com.spring.bean.jdbc;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
@Repository
public class StudentsDao {@Autowiredprivate JdbcTemplate jdbcTemplate;public Students getStudent(String sql, Integer id) {RowMapper<Students> rowMapper = new BeanPropertyRowMapper<Students>(Students.class);Students students = jdbcTemplate.queryForObject(sql, rowMapper, id);return students;}
}

jdbcDaosupport

package com.spring.bean.jdbc;import javax.sql.DataSource;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;
@Repository
public 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*/@Autowiredpublic void  setDataSource22(DataSource dataSource) {setDataSource(dataSource);}/*** 获取课程* @param sql* @param id* @return*/public Course getCourse(String sql,int id){RowMapper<Course> rowMapper = new BeanPropertyRowMapper<Course>(Course.class);Course course = getJdbcTemplate().queryForObject(sql, rowMapper,id);return course;}
}

测试类具体见注释

package com.spring.bean.jdbc;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;public class MainTest {private ApplicationContext ctx=null;private StudentsDao studentsDao;private JdbcTemplate jdbcTemplate;private NamedParameterJdbcTemplate namedParameterJdbcTemplate;private 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
public void getCourse(){String sql="SELECT * from course WHERE id=?";Course course = courseDao.getCourse(sql,1);System.out.println(course);}/*** 使用具名参数操作数据库(可以为字段起名)* 优点就是:当字段较多,不用考虑字段的顺序,效率高,即key,value的形式* 缺点:麻烦代码量多*/@Testpublic void 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*/@Testpublic void testnamedParameterJdbc(){String sql="INSERT INTO course (coursename, coursenameid) VALUES (:coursename, :coursenameid);";Course course = new Course();course.setCoursenameid("As-1001");course.setCoursename("java");SqlParameterSource paramSource = new BeanPropertySqlParameterSource(course);namedParameterJdbcTemplate.update(sql, paramSource);}/*** 修改数据库某条属性*/@Testpublic void testUpdate(){String sql="UPDATE students SET `name`=? WHERE id=? ";jdbcTemplate.update(sql, "lucy",1);}/*** 批量更新数据* List<Object[]>此处为对象数组* 必须为对象数组,插入一条数据如:{"MT-1","man",17,"13706063546"}* 如为多条数据,那么必须为对象数组*/@Testpublic void testBatchUpdate(){String sql="INSERT INTO students ( name, sex, age, tel) VALUES (?, ?, ?, ?)";List<Object[]> batchArgs=new ArrayList<Object[]>();batchArgs.add(new Object[]{"MT-1","man",17,"13706063546"});batchArgs.add(new Object[]{"MT-2","man",18,"13706063547"});batchArgs.add(new Object[]{"MT-3","man",19,"13706063548"});batchArgs.add(new Object[]{"MT-4","man",20,"13706063549"});jdbcTemplate.batchUpdate(sql, batchArgs);}/*** 查询返回一个实体对象集合* 注意调用的不是 queryForList 方法*/@Testpublic void testQueryForList(){String sql="SELECT id,name, sex, age, tel FROM students";RowMapper<Students> rowMapper = new BeanPropertyRowMapper<Students>(Students.class);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, sex, age, tel * 3. 不支持级联属性. JdbcTemplate 到底是一个 JDBC 的小工具, 而不是 ORM 框架*/@Testpublic void testQueryForObject(){String sql="SELECT id,name, sex, age, tel FROM students WHERE id=?";RowMapper<Students> rowMapper = new BeanPropertyRowMapper<Students>(Students.class);Students students = jdbcTemplate.queryForObject(sql, rowMapper,1);System.out.println(students);}/*** 获取单个列的值, 或做统计查询* 使用 queryForObject(String sql, Class<Long> requiredType) * 其中:requiredType为Integer.class可以达到统计查询的效果* 使用 int queryForInt(String sql) throws DataAccessException,可实现*/@Testpublic void 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); // 不是 queryForList 方法 // List<Students> students = jdbcTemplate.queryForList(sql, Students.class); System.out.println(long1);}/*** 根据用户id,返回用户对象*/@Testpublic void getStudents(){String sql="SELECT id,name, sex, age, tel FROM students WHERE id=?";System.out.println(studentsDao.getStudent(sql, 4));}}

 

转载于:https://www.cnblogs.com/longronglang/p/6271001.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IIS添加直接下载的文件类型

扩展名 .dataMIME类型 application/octet-stream

密钥

【AES】 一种对称加密算法&#xff0c;DES的取代者。 加密相关文章见&#xff1a;Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA 【代码】 代码比较多&#xff0c;有一部分非本文章内容代码&#xff0c;具体自己看吧。 [java] view plaincopy print?package…

mysql复制安全性_从MySQL复制功能中得到一举三得实惠

在MySQL数据库中&#xff0c;支持单项、异步复制。在复制过程中&#xff0c;一个服务器充当主服务器&#xff0c;而另外一台服务器充当从服务器。如下图所示。此时主服务器会将更新信息写入到一个特定的二进制文件中。并会维护文件的一个索引用来跟踪日志循环。这个日志可以记录…

WhqDatabase 我自己用C#开发的列式数据库

项目地址&#xff1a;https://github.com/wanghongqi/WhqDatabase WhqDatabase 作者&#xff1a;王洪岐 本项目为一个C#实现的列式数据库&#xff0c;欢迎大家提出指正意见。项目中包含对Kernel完整的测试。 项目列表&#xff1a;Kernel 内核Test 对内核的测试Service 可视的…

自定义安装mysql linux_linux下 安装mysql 问题

展开全部因为32313133353236313431303231363533e4b893e5b19e31333365633934mysql程序在启动的时候 非常依赖my.cnf里面的配置&#xff0c;而my.cnf文件中的配置&#xff0c;在执行mysql初始化的时候就可以手动指定。如果mysql不是使用yum安装&#xff0c;而是将mysql安装到自定…

js中斜杠转义

js中“/”不需要转义。 if(myPath.indexOf("/Upload/EmailFile/")!-1){ alert("有附件&#xff01;")}转载于:https://www.cnblogs.com/Tpf386/p/6282773.html

SVN强制解锁操作

如果是其他人锁定文件&#xff0c;而你期望对此文件操作&#xff0c;可进行偷锁操作。 1&#xff0c;将被锁定文件SVN Check out…到本机硬盘。 2&#xff0c;点击文件右键&#xff0c;选择get lock&#xff0c; 3&#xff0c;勾上steal the locks 4,之后再进行Release Lock操作…

前端学习(2244):计算器显示问题

<!DOCTYPE html> <html><head><meta charset"utf-8" /><title>奥里给&#xff01;</title><style type"text/css">.a {height: 100px;width: 450px;border: 3px solid black;background-color: beige;font-size…

MySQL索引原理及慢查询优化

MySQL凭借着出色的性能、低廉的成本、丰富的资源&#xff0c;已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色&#xff0c;但所谓“好马配好鞍”&#xff0c;如何能够更好的使用它&#xff0c;已经成为开发工程师的必修课&#xff0c;我们经常会从职位描述上看到诸…

C语言沉浸式刷题【C语言必刷题】

1.猜凶手 某地发生了一起谋杀案&#xff0c;警察通过排查确定杀人凶手必为四个嫌疑犯的一个&#xff0c;以下是4个嫌犯的供词。已知&#xff08;请编写代码找出凶手&#xff09; A说&#xff1a;不是我。 B说&#xff1a;是C。C说&#xff1a;是D。D说&#xff1a;C再胡说。 程…

C#操作IIS6创建网站应用程序无效

创建网站root目录时执行AppCreate即可DirectoryEntry vdEntry newSiteEntry.Children.Add("root", "IIsWebVirtualDir");vdEntry.Invoke("AppCreate", true);vdEntry.CommitChanges();

python 代码排布_python实现经典排序算法的示例代码

以下排序算法最终结果都默认为升序排列&#xff0c;实现简单&#xff0c;没有考虑特殊情况&#xff0c;实现仅表达了算法的基本思想。冒泡排序内层循环中相邻的元素被依次比较&#xff0c;内层循环第一次结束后会将最大的元素移到序列最右边&#xff0c;第二次结束后会将次大的…

如何减小内存碎片

内存碎片 &#xff1a; 内部碎片&#xff08;占了不用&#xff09; 内部碎片就是已经被分配出去&#xff08;能明确指出属于哪个进程&#xff09;却不能被利用的内存空间&#xff1b;内部碎片是处于区域内部或页面内部的存储块。占有这些区域或页面的进程并不使用这个存储块。而…

python 英语翻译 excel_python批量将excel内容进行翻译写入功能

由于小编初来乍到&#xff0c;有很多地方不是很到位&#xff0c;还请见谅&#xff0c;但是很实用的哦&#xff01;1.首先是需要进行文件的读写操作&#xff0c;需要获取文件路径&#xff0c;方式使用os.listdir(路径)进行批量查找文件。file_path ‘/home/xx/xx/xx# ret 返回一…

bison实例

逆波兰记号计算器【文件名rpcalc.y】%{ #define YYSTYPE double #include <stdio.h> #include <math.h> #include <ctype.h> int yylex (void); void yyerror (char const *); %}%token NUM%% input: /* empty */| input line;line: \n| exp \n …

InstallShield LaunchAppAndWait运行另一个程序并等待该程序终止。

LaunchAppAndWait语法&#xff1a;LaunchAppAndWait (szProgram, szCmdLine, lWait);说明&#xff1a;LaunchAppAndWait函数运行由szProgram指定的带有szCmdLine指定的命令行参数的应用程序。第三个参数&#xff0c;lWait指示安装在继续前是否要等待直到运行的应用程序终止。 …