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. oracle官方文档的阅读方法

    Concept 包含了 oracle 数据库里面的一些基本概念和原理, 比如 数据库逻辑结构, 物理结构, 实例结构, 优化器, 事务等. PDF 460页 Reference 包含了动态性能视图, ...

  2. word中公式居中、编号居右方法

    1.输入公式和序号如“Z=X+Y(1)”,不需要在二者之间加括号:2.双击横标尺的空白位置,弹出“制表符”对话框,点击“全部清除”:3.观察标尺长度,如图中所示位置(如24):4.输入标尺长度的一半( ...

  3. MongoDB初步(一)

    1.软件下载:mongodb-win32-x86_64-2008plus-ssl-3.4.1-signed.msi 2.下载补丁:hotfix kb2731284

  4. AOP 事务

    定义 AOP实际可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术,非业务类横切于业务类), 通过AOP以动态和非入侵方式来增强服务 事务的四大属性:ACID ...

  5. java面向对象(封装-继承-多态)

    框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...

  6. maven之上传新的jar包

    今天要求上传若干jar包到maven服务器,师父曾经真的是一步一步点给我看.然后我特喵的忘记了,师父又一步一步点给我看,所以我记录下来,以后留用. 步骤如下,如图所示: 1)先在首页查询下将要上传的j ...

  7. 多线程NSInvocationOperation(NSOperationQueue)的基本用法

        #import "ViewController.h" @interface ViewController () @end @implementation ViewContr ...

  8. java war包加载提示jar not loaded

    今天在开发的时候,项目需要加载Guvnor的war包.War包部署后,启动tomcat提示jar not load 后来查阅资料后发现是Jar包冲突导致的,冲突的Jar包在tomcat中已经存在,然后 ...

  9. 关于sitemesh和freemark在struts2中的一些问题总结

    最近刚开始工作,首先让我在熟悉公司编程环境的前提下做一些简单的增删改查,在此总结一些这些天遇到的问题. 1,在刚开始建表的时候,我在oracle数据库中设置的主键id为四位的number类型,对应的实 ...

  10. 工具mark

    http://zh.snipaste.com/ 截图工具 https://brookhong.github.io/2014/04/28/keycast-on-windows-cn.html 按键显示 ...