Spring JDBCTemplate连接SQL Server之初体验
前言
在没有任何框架的帮助下我们操作数据库都是用jdbc,耗时耗力,那么有了Spring,我们则不用重复造轮子了,先来试试Spring JDBC增删改查,其中关键就是构造JdbcTemplate类。
其中jdbcTemplate已经实现了queryForList(),但是经过测试后发现之能返回简单数据类型String、Integer之类。 如果需要返回List<T>则使用query()并且让model实现RowMappper接口。
开发环境
idea2016、jdk1.8、maven3.3、
spring-jdbc 4.3.6
Spring Jdbc初体验之增删改查
1、创建一个maven项目,导入所依赖的jar,spring jdbc主要依赖spring-jdbc。
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
</dependencies>
2、创建DriverManagerDataSource、创建jdbcTemplate。主要调用query()、queryForObject()、queryForList()、queryForMap、
package com.autohome.dao; import com.autohome.model.User;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.jdbc.datasource.DriverManagerDataSource; import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map; public class UserDaoTest { private static JdbcTemplate jdbcTemplate; @BeforeClass
public static void setUpClass(){
DriverManagerDataSource dataSource=new DriverManagerDataSource();
dataSource.setUrl("jdbc:sqlserver://127.0.0.1:1433;databaseName=test");
dataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
dataSource.setUsername("sa");
dataSource.setPassword(""); jdbcTemplate=new JdbcTemplate(dataSource);
} @Test
public void selectAll(){
jdbcTemplate.query("select * from t_student", new RowCallbackHandler() {
public void processRow(ResultSet resultSet) throws SQLException {
System.out.println("====id:"+resultSet.getInt("id")+"===name:"+resultSet.getString("name"));
}
});
} @Test
public void insert(){
//SQL
//int result = jdbcTemplate.update("insert into t_student (name,age) VALUES (?,?)",new Object[]{"Lin",30}); //避免sql参数注入
int result = jdbcTemplate.update("insert into t_student (name,age) values(?,?)",
new PreparedStatementSetter() {
public void setValues(PreparedStatement ps) throws SQLException {
ps.setString(1,"zhangsan");
ps.setInt(2,35);
}
}); if(result>0){
System.out.println("insert success...");
}
} @Test
public void update(){
int result = jdbcTemplate.update("update t_student set Name=? ,Age=? where Id=?", new PreparedStatementSetter() {
public void setValues(PreparedStatement ps) throws SQLException {
ps.setString(1,"Linshuhao");
ps.setInt(2,40);
ps.setInt(3,3);
}
}); if(result>0){
System.out.println("update success...");
}
} @Test
public void delete(){
int result = jdbcTemplate.update("delete from t_student where id=?",new Object[]{1},new int[]{Types.INTEGER});
if(result>0){
System.out.println("delete success...");
}
} @Test
public void listAll(){ List<User> allUser = jdbcTemplate.query("SELECT * FROM t_student",new User());
for(User user:allUser){
System.out.println("===id:"+user.getId()+",name:"+user.getName()+",age:"+user.getAge());
}
} @Test
public void selectUser(){
String sql="SELECT * FROM t_student where id=?"; User user = (User) jdbcTemplate.queryForObject(sql,new Object[]{2},new User()); System.out.println("===id:"+user.getId()+",name:"+user.getName()+",age:"+user.getAge());
}
}
User.java 主要是实现RowMapper接口,要不然jdbc不知道你的实体类和sql字段怎么映射,仅此而已
package com.autohome.model; import org.springframework.jdbc.core.RowMapper; import java.sql.ResultSet;
import java.sql.SQLException; public class User implements RowMapper {
private int id;
private String name;
private int age; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Object mapRow(ResultSet rs, int i) throws SQLException {
User user=new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age")); return user;
}
}
参考资料
http://www.cnblogs.com/doudouxiaoye/p/5782003.html
http://1358440610-qq-com.iteye.com/blog/1826816
Spring JDBCTemplate连接SQL Server之初体验的更多相关文章
- Saturday SQL Server 2016 初体验
最近在开发一个有关数据库的项目,我想用SQLite,但是SQLite的设计器不是特别友好,然后据说VS有一个集成的SQLite设计器,但是我用的VS2017亲测并没有,用户体验不佳,所以安装一个SQL ...
- JeeSite如何正确连接SQL SERVER 数据库
JeeSite如何正确连接SQL SERVER 数据库 jeesite介绍 感谢jeesite项目的作者thinkgem. 没有你我也不会更改这数据源非了恁大的劲,,,,嘻嘻嘻说多了. JeeSite ...
- 在Spring中配置SQL server 2000
前言 Lz主要目的是在Spring中配置SQL server 2000数据库,但实现目的的过程中参差着许多SQL server 2000的知识,也包罗在本文记载下来!(Lz为什么要去搞sql serv ...
- Spring boot集成Rabbit MQ使用初体验
Spring boot集成Rabbit MQ使用初体验 1.rabbit mq基本特性 首先介绍一下rabbitMQ的几个特性 Asynchronous Messaging Supports mult ...
- Unity3d连接SQL Server数据库出现SocketException: 使用了与请求的协议不兼容的地址错误
这两天,同学问我Unity3d连接SQL Server的问题,当时我只是简单的说:“应该一样吧,就是那简单的几句啊”.之后他让我试了下,我才发现有问题了.故此写下一篇博客,要牢记这件事的教训,操作数据 ...
- vbs连接sql server及写文件操作
此段代码是连接SQL SERVER的 代码内connMMSQL的参数要根据实际情况传入 Function connMMSQL(ip,user,pwd,database,strsql) Dim conn ...
- python 使用pymssql连接sql server数据库
python 使用pymssql连接sql server数据库 #coding=utf-8 #!/usr/bin/env python#------------------------------ ...
- NetBeans连接SQL server数据库教程
不废话,直接开始 1.下载sqljdbc.jar 可以从微软中国官方网站下载 SQLJDBC微软中国 笔者提供一个网盘链接Sqljdbc.jar 4个压缩包视版本选择,SQL 2012 用sqljdb ...
- JDBC连接SQL Server代码模板
* JDBC连接SQL Server数据库 代码模板* Connection: 连接数据库并担任传送数据的任务:* Statement : 执行SQL语句:* Re ...
随机推荐
- MD5=======RBAC权限管理
经过网上查阅相关的说明原来,MD5全名Message-Digest Algorithm 5(信息-摘要算法)是一种不可逆的加密算法. MD5为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性 ...
- ZOJ 3229 Shoot the Bullet (有源有汇有上下界最大流)
题意:一个人要给女孩子们拍照,一共 n 天,m 个女孩子,每天他至多拍 d[i] 张照片,每个女孩子总共要被至少拍 g[i] 次.在第 i 天,可以拍 c[i] 个女孩子,c[i] 个女孩子中每个女孩 ...
- sax 动态切换 抓取感兴趣的内容(把element当做documnet 处理)
由switch 类触发事件 import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.hel ...
- Linux 线程编程1.0
在编译多线程程序的时候,需要连接libpthread文件: gcc pthread.c -o pthread -lpthread: 所有线程一律平等,没有父子关系,线程属于进程. 创建线程用 p ...
- Celery分布式任务队列快速入门
本节内容 1. Celery介绍和基本使用 2. 项目中使用Celery 3. Celery定时任务 4. Celery与Django结合 5. Django中使用计划任务 一 Celery介绍和基 ...
- Delphi Excel导入 的通用程序转载
Delphi Excel导入 的通用程序 (-- ::)转载▼ 标签: it 分类: Delphi相关 步骤: 连excel(自己知道其格式,最好是没个字段在数据一一对应) 读excel数据,填入到数 ...
- 去除swagger ui的红色 error 错误提示
去除swagger ui的红色 error 错误提示 自定义js文件中加入以下的代码. 加入自定义的js方法看这里 http://www.cnblogs.com/wang2650/archive/20 ...
- redis之一初识redis
本文主要围绕以下几点进行阐述: 1.什么是redis? 2.为什么要使用redis呢? 3.redis的一些基本配置 4.redis的缺点? 正文: 1.什么是redis? Redis是一款内存高速缓 ...
- Visual Studio中xml文件使用app.config、web.config等的智能提示的方法
在.Net开发的过程中,有时我们需要使用Xml文件作为配置文件(基于某些情况的考虑),而不是app.config.web.config这种,但是我们在xml中配置时希望可以增加类似编辑app.conf ...
- 背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中的元素
[源码下载] 背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中 ...