Spring-JDBC实现Contact的CRUD
Spring-JDBC完成Contact的CRUD。
两点注意:
1.log4j.properties文件不能少
2.注意导入的包之间的依赖关系以及版本要求。
项目结构:
主要文件:
建表脚本:
CREATE TABLE contact (
id int(10) unsigned NOT NULL auto_increment,
name varchar(45) NOT NULL,
address varchar(45) default NULL,
gender char(1) default 'M',
dob datetime default NULL,
email varchar(45) default NULL,
mobile varchar(15) default NULL,
phone varchar(15) default NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>MarkDemo</groupId>
<artifactId>SpringDAO</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build /> <dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.1.1.RELEASE</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-dao</artifactId>
<version>2.0.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.33</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5-pre9</version>
</dependency> </dependencies> </project>
properties文件
jdbc.properties ------------------------------------
mysql.driverClassName=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/test
mysql.username=root
mysql.password= log4j.properties # Configure logging for testing: optionally with log file
log4j.rootLogger=WARN, stdout # log4j.rootLogger=WARN, stdout, logfile log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
spring-dao.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:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"> <!-- not property-placeholder -->
<!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="com.mysql.jdbc.Driver" p:url="jdbc:mysql://localhost:3306/test"
p:username="root" p:password="111222" /> --> <context:property-placeholder location="classpath:jdbc.properties" />
<!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="${mysql.driverClassName}" p:url="${mysql.url}" p:username="${mysql.username}"
p:password="${mysql.password}" />. --> <!-- c3p0 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${mysql.username}" />
<property name="password" value="${mysql.password}" />
<property name="driverClass" value="${mysql.driverClassName}" />
<property name="jdbcUrl" value="${mysql.url}" />
<property name="maxPoolSize" value="20" />
<property name="minPoolSize" value="2" />
<property name="initialPoolSize" value="2"/>
<property name="maxIdleTime" value="60"/>
</bean> </beans>
Contact.java
import java.sql.Date; public class Contact {
private Integer id;
private String name;
private String address;
private String gender;
private Date dob;
private String email;
private String mobile;
private String phone; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} public String getGender() {
return gender;
} public void setGender(String gender) {
this.gender = gender;
} public Date getDob() {
return dob;
} public void setDob(Date dob) {
this.dob = dob;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public String getMobile() {
return mobile;
} public void setMobile(String mobile) {
this.mobile = mobile;
} public String getPhone() {
return phone;
} public void setPhone(String phone) {
this.phone = phone;
} }
ContactRowMapper.java
--ContactRowMapper.java
import java.sql.ResultSet;
import java.sql.SQLException; import org.springframework.jdbc.core.RowMapper; public class ContactRowMapper implements RowMapper<Contact> { public Contact mapRow(ResultSet arg0, int arg1) throws SQLException { Contact contact = new Contact();
contact.setId(arg0.getInt("id"));
contact.setName(arg0.getString("name"));
contact.setAddress(arg0.getString("address"));
contact.setGender(arg0.getString("gender"));
contact.setDob(arg0.getDate("dob"));
contact.setEmail(arg0.getString("email"));
contact.setMobile(arg0.getString("mobile"));
contact.setPhone(arg0.getString("phone")); return contact;
} }
ContactsDAO.java
--ContactsDAO.java
import java.util.List; public interface ContactsDAO { Contact getContact(Integer id); Integer Create(Contact contact); Boolean Update(Contact contact); Boolean Delete(Integer id); List<Contact> Search(String name); List<Contact> getAllContacts(); }
ContactsDAOImpl.java
--ContactsDAOImpl.java
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder; public class ContactsDAOImpl extends JdbcDaoSupport implements ContactsDAO { public Contact getContact(Integer id) {
Contact contact = this.getJdbcTemplate().queryForObject("select * from contact where id=?", new Object[] { id }, new ContactRowMapper()); return contact;
} /**
* Add a new contact to database, and return the id.
*
* @author Mark
* @param Object
* of Contact
* @return [Integer] Auto Increment Key
* @see http://blog.chinaunix.net/uid-1848701-id-2825787.html
* */
public Integer Create(Contact contact) {
final Contact contact2;
contact2 = contact; if (contact.getId() != null)
throw new RuntimeException("contact with id " + contact.getId() + " is already existed."); // Object[] params = new Object[] { contact.getName(), contact.getAddress(), contact.getGender(), contact.getDob(), contact.getEmail(),
// contact.getMobile(), contact.getPhone() };
// int id = this.getJdbcTemplate().update("insert into contact(name, address, gender, dob, email, mobile, phone) values(?,?,?,?,?,?,?);", params); final String strSql = "insert into contact(name, address, gender, dob, email, mobile, phone) values(?,?,?,?,?,?,?);";
KeyHolder keyHolder = new GeneratedKeyHolder();
int id1 = this.getJdbcTemplate().update(new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {
int i = 0;
java.sql.PreparedStatement ps = conn.prepareStatement(strSql, new String[] { "object_id" });
ps = conn.prepareStatement(strSql, Statement.RETURN_GENERATED_KEYS);
ps.setString(++i, contact2.getName());
ps.setString(++i, contact2.getAddress());
ps.setString(++i, contact2.getGender());
ps.setDate(++i, (Date) contact2.getDob());
ps.setString(++i, contact2.getEmail());
ps.setString(++i, contact2.getMobile());
ps.setString(++i, contact2.getPhone()); return ps;
}
}, keyHolder); return keyHolder.getKey().intValue(); } public Boolean Update(Contact contact) {
Object[] param = new Object[] { contact.getName(), contact.getAddress(), contact.getGender(), contact.getDob(), contact.getEmail(),
contact.getMobile(), contact.getPhone(), contact.getId() };
int count = this.getJdbcTemplate().update("update contact set name=?, address=?, gender=?, dob=?, email=?, mobile=?, phone=? where id=?", param); return count > 0 ? Boolean.TRUE : Boolean.FALSE;
} public Boolean Delete(Integer id) {
int count = this.getJdbcTemplate().update("delete from contact where id=?;", new Object[] { id }); return count > 0 ? Boolean.TRUE : Boolean.FALSE;
} public List<Contact> Search(String name) {
List<Contact> contactList = this.getJdbcTemplate().query("select * from contact where name like %?%;", new Object[] { name }, new ContactRowMapper()); return contactList;
} public List<Contact> getAllContacts() {
List<Contact> contactList = this.getJdbcTemplate().query("select * from contact;", new ContactRowMapper()); return contactList;
} }
ContactsDAOTestClient.java
--ContactsDAOTestClient.java
import org.springframework.context.ApplicationContext;
import java.sql.Date;
import javax.sql.DataSource;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class ContactsDAOTestClient { @SuppressWarnings("deprecation")
public static void main(String[] args) {
System.out.println("hello jdbc, see you tomorrow.");
ApplicationContext applicationContext = null; try {
applicationContext = new ClassPathXmlApplicationContext("classpath:spring-dao.xml");
} catch (Exception e) {
e.printStackTrace();
} DataSource dataSource = (DataSource) applicationContext.getBean("dataSource");
ContactsDAOImpl contactDao = new ContactsDAOImpl();
contactDao.setDataSource(dataSource); Contact contact = new Contact();
contact.setName("MARK");
contact.setAddress("WITH HOUSE");
contact.setGender("M");
contact.setDob(new Date(1986,11,07));
contact.setEmail("wancy86@sina.com");
contact.setMobile("13028865078");
contact.setPhone("0755-06326545"); //add a new contact
int id=contactDao.Create(contact); //get the inserted contact
contactDao.getContact(id); System.out.println(id); }
}
Spring-JDBC实现Contact的CRUD的更多相关文章
- Spring JDBC 随笔
Spring 框架,借助 JdbcTemplate 类来简化 java 访问 database. 完成一个增查改删(CRUD)的基本功能,借助下面 5 个角色来共同来完成. 1. object cla ...
- Spring JDBC 示例
在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等.但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQL 语句,处理异常, ...
- 11.Spring——JDBC框架
1.DBC 框架概述 2.Spring JDBC 示例 3.Spring 中 SQL 的存储过程 1.DBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关 ...
- spring jdbc查询 依赖JdbcTemplate这个类模版封装JDBC的操作
package cn.itcast.spring.jdbc; import java.util.List; import org.springframework.jdbc.core.support.J ...
- Spring JDBC 例子
http://www.yiibai.com/spring/spring_jdbc_example.html 要了解有关Spring JDBC框架与JdbcTemplate类的概念,让我们写这将实现所有 ...
- Spring JDBC模板类—org.springframework.jdbc.core.JdbcTemplate(转)
今天看了下Spring的源码——关于JDBC的"薄"封装,Spring 用一个Spring JDBC模板类来封装了繁琐的JDBC操作.下面仔细讲解一下Spring JDBC框架. ...
- JDBC(三)----Spring JDBC(JDBCTemplate)
## Spring JDBC * Spring框架对JDBC的简单封装.提供了一个JDBCTemplate对象简化JDBC的开发 1.步骤 1.导入jar包 2.创建JDBCTemplate对象 ...
- Spring JDBC 框架 简介
在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等. 但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQL 语句,处理异常 ...
- 一文学会Spring JDBC 使用
Spring JDBC 1.JDBC JDBC 就是 数据库开发 操作的 代名词,因为只要是现代商业项目的开发那么一定是离不开 数据库 的,不管你搞的是什么,只要是想使用动态的开发结构,那么一定就是 ...
随机推荐
- Eclipse Debug
[IT168 专稿]调试的方法虽然千千万万,但归根结底,就是找到引发错误的代码.Eclipse调试器的目标是让程序员能对本地或远程程序进行错误侦测与诊断.该调试器提供所有标准调试功能,包括进行单步执行 ...
- [Linux] xargs
xargs 命令可以将一个命令的输出,作为另一个命令的输入! 这里听来好像是管道的功能,之所以有xargs是因为有的命令不知吃管道,这时xargs就派上用场了! 具体的方法是:前一个命令的输出会使用空 ...
- CodeBlock 使用TextOut出错
undefined reference to `TextOutA@20'C:\Program Files (x86)\CodeBlocks\MinGW\lib这次需要的库是:libgdi32.a 1. ...
- 用CSS绘制箭头等三角形图案 [译]
最近重新设计了我的网站,准备添加tooltips提示信息效果.实现很容易,但我想要让提示功能具有三角形的指示图标.当我重新思考想要所设计的每个图标颜色都随心所欲的时候,采用图片那就是一场灾难.幸运的是 ...
- Windows XP和Word 2007不能正常使用VSTO插件
今天帮助同事解决了一个小问题,就是在WindowsXP上,为Word2007开发的插件不能正常显示. 通过搜索关键词 WindowsXp Word 2007 VSTO找到了两个解决方案. http:/ ...
- 8.4.2 Fresco
Fresco是Facebook公司的黑科技:http://fresco-cn.org/ 真三级缓存,变换后的BItmap(内存),变换前的原始图片(内存),硬盘缓存.在内存管理上做到了极致.对于重度图 ...
- 使用Axure来仿真Vogue网站
用户体验包括三部分:用户研究.视觉设计和交互设计.按顺序进行,在用户研究和视觉设计之后,开始交互设计,Axure是最好的交互设计的软件. Vogue是著名的奢侈品品牌,网站设计“高大上”,用Axure ...
- iOS关于定制某个控件四个角是否为圆角
UIView *myView=[[UIView alloc]initWithFrame:CGRectMake(50, 70, 200, 200)]; UIBezierPath * bezierPath ...
- Adobe Flash Builder 4.7破解方法(绝对可用)
Flash Builder4.7 破解方法的实践 建议:作为草根一级,买不起正版,只能先拿破解版练练手了,如果商业的话,请用正版. 具体步骤如下: 1.到Adobe官网下载FlashBuilder ...
- [Xamarin] 從Xamarin中呼叫 *.jar 的 library -建立.jar篇 (转帖)
嗯,這篇我們來聊聊如何從Xamarin 中來呼叫,已經包好的.jar ,首先因為要讓測試順利,我們開一個Android Java 的專案 當然是Eclipse ,然後我們簡簡單單寫一個測試用的libr ...