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的更多相关文章

  1. Spring JDBC 随笔

    Spring 框架,借助 JdbcTemplate 类来简化 java 访问 database. 完成一个增查改删(CRUD)的基本功能,借助下面 5 个角色来共同来完成. 1. object cla ...

  2. Spring JDBC 示例

    在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等.但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQL 语句,处理异常, ...

  3. 11.Spring——JDBC框架

    1.DBC 框架概述 2.Spring JDBC 示例 3.Spring 中 SQL 的存储过程 1.DBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关 ...

  4. spring jdbc查询 依赖JdbcTemplate这个类模版封装JDBC的操作

    package cn.itcast.spring.jdbc; import java.util.List; import org.springframework.jdbc.core.support.J ...

  5. Spring JDBC 例子

    http://www.yiibai.com/spring/spring_jdbc_example.html 要了解有关Spring JDBC框架与JdbcTemplate类的概念,让我们写这将实现所有 ...

  6. Spring JDBC模板类—org.springframework.jdbc.core.JdbcTemplate(转)

    今天看了下Spring的源码——关于JDBC的"薄"封装,Spring 用一个Spring JDBC模板类来封装了繁琐的JDBC操作.下面仔细讲解一下Spring JDBC框架. ...

  7. JDBC(三)----Spring JDBC(JDBCTemplate)

    ##  Spring  JDBC *  Spring框架对JDBC的简单封装.提供了一个JDBCTemplate对象简化JDBC的开发 1.步骤 1.导入jar包 2.创建JDBCTemplate对象 ...

  8. Spring JDBC 框架 简介

    在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等. 但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQL 语句,处理异常 ...

  9. 一文学会Spring JDBC 使用

    Spring JDBC 1.JDBC JDBC 就是 数据库开发 操作的 代名词,因为只要是现代商业项目的开发那么一定是离不开 数据库 的,不管你搞的是什么,只要是想使用动态的开发结构,那么一定就是 ...

随机推荐

  1. py2exe 打包scipy时遇到的问题

    最近写了个小程序,用PyQt5做的界面,写完之后用py2exe打包成独立的exe文件,运行正常. 后来由于需要,调用SciPy.io.loadmat,改写setup.py,打包之后运行错误,提示: T ...

  2. 浅谈产品测试人员的KPI

                                                                                                   浅谈产品测 ...

  3. Hbase随笔2

    Hbase是建立在HDFS上的分布式数据库,下图是Hbase表的模型: Hbase这个数据库其实和传统关系数据库还是有很多类似之处,而不是像mongodb,memcached以及redis完全脱离了表 ...

  4. XAF 官方问题笔记

    1.How to print report direct, and print preview via an simple action? 如何通过一个按钮直接打印报表或者打印预览报表 https:/ ...

  5. pc端和android端应用程序测试有什么区别?(ps面试题)

    pc端和android端应用程序测试有什么区别?(ps面试题) [VIP7]大连-凭海临风(215687736) 2014/4/10 8:56:171.测试环境不同PC平台一般都是windows an ...

  6. LintCode 111 Climbing Stairs

    这道题参考了这个网址: http://blog.csdn.net/u012490475/article/details/48845683 /* 首先考虑边界情况,当有1层时,有一种方法. 然后再看2层 ...

  7. JavaScript 鼠标划过 播放音乐。

    '<EMBED style="FILTER: xray()" src="mp3/'+s+'" width=360 height=30 type=audio ...

  8. winform 子报表

    public void BindReport(string _invno,string _type)         {             if (!Is_Has_Express_No(_inv ...

  9. Blend 2015 教程 (一) 基础

    微软公司在Visual Studio 2015产品套件中作出了许多革命性的变更,包括.NET开源,.NET服务器端部分跨平台,推出向个人和小团队免费的社区版,移动应用开发部分跨平台支持,商店应用支持C ...

  10. 源代码版本管理与项目管理软件的认识与github的注册

    源代码版本管理软件: 主要有:svn,cvs,hg,git,VSS 这些工具主要是一种记录代码更改历史, 可以无限回溯, 用于代码管理,多个程序员开发协作的工具.Perforce,StarTeam)- ...