第一步建表:

aaarticlea/png;base64,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" alt="" />

第二步:编写product表的实体类

public class produce {
private int id;
private String name;
private String price;
/**
* @return the id
*/
public int getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the price
*/
public String getPrice() {
return price;
}
/**
* @param price the price to set
*/
public void setPrice(String price) {
this.price = price;
} }

第三步:编写productDao,完成基本的常见操作。

这立即有个问题,我们想要使用的是Spring的JdbcTemplate来操作数据库,那么我们应该在productDao类注入JdebcTemplate,我们想到的方式是定义一个成员变量,然后

注入,但是Spring 已经为我们考虑了这种情况,所以提供了一个JdbcDaoSupport类来帮助我们。这个类里面提供了setjdbcTempalte这样的方法。

/*
* 我们要用Spring的JDBC模板(JdbcTemplate)第一想法是在这个类中
* 定义一个成员变量,然后用set方法,用Spring去注入。但是Spring已经为我们
* 考虑好了这个情况。我们不需要自己去写什么setJdbcTemplate这个方法,只要去
* 继承jdbcDaoSupport这个类就可以了。在这个类里面已经有了setJdbcTemplate这个方法。
*
*/
public class ProductDao extends JdbcDaoSupport {

    //增
    public void save(produce produce1 )
    {
        String sql="insert into product values(null,?,?)";
        this.getJdbcTemplate().update(sql, produce1.getName(),produce1.getPrice());         
    }
    //改
    public void update(produce produce1)
    {
        String sql="update product set name=?,price=? where id=?";
        this.getJdbcTemplate().update(sql, produce1.getName(),produce1.getPrice(),produce1.getId());
        
        
    }
//删
public void delete( produce produce1)
{String sql="delete from product where id=?";
this.getJdbcTemplate().update(sql, produce1.getId());
    
}
    }

第四步:配置Spring的ApplicationContext.xml文件。

<!-- 引入peoperties文件 -->
<!-- <context:property-placeholder location="classpath:db.properties"/> -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:db.properties"/>
</bean> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${driver}"/>
<property name="jdbcUrl" value="${url}"></property>
<property name="user" value="${username}"></property>
<property name="password" value="${password}"></property>
</bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 给 ProductDao的父类里面的jdbcTemplate注入值-->
<bean id="ProductDao" class="cn.itcast.spring.c_jdbc.ProductDao">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>

第五步:编写Junit测试代码

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext.xml") public class ProductTest {
@Autowired
private ProductDao productDao; //@Test
public void testsave()
{
produce produce1=new produce();
produce1.setName("爱");
produce1.setPrice("100");
this.productDao.save(produce1); }
//@Test
public void testupdate()
{ produce produce2=new produce();
produce2.setId(1);
produce2.setName("爱2");
produce2.setPrice("200");
this.productDao.update(produce2); }
@Test
public void testdelete()
{
produce produce1Produce=new produce();
produce1Produce.setId(2);
this.productDao.delete(produce1Produce); } }

上面对增删改都讲解了,下面对查找单独拿出来讲解。查找分为两块讲解,简单的查找和复杂的查找。

简单的查找:

如果返回结果 是一个简单值,使用jdbcTemplate 提供 queryForXXX 方法

比如:queryForInt 返回结果是int

queryForLong 返回结果是long

queryForObject 返回结果是Object (返回String )

针对上面三种方法,分别写两个方法。

查找商品的数量和查找商品的名字

//查找商品的数量
public long findTotleCount()
{
String sql="select count(*) from produce";
return this.getJdbcTemplate().queryForLong(sql); }
//查找商品的名称
public String findNamebyId(int id)
{
String sql="select name from product where id=?";
return this.getJdbcTemplate().queryForObject(sql, String.class, id); }

在Junit中编写相应的测试代码:

      //测试查找商品的名称
//@Test
public void testfindNameById()
{
String name=this.productDao.findNamebyId(1);
System.out.print(name); }
//测试查找商品的总数
@Test
public void testTotleCount()
{ long count=this.productDao.findTotleCount();
System.out.print("aaaaaaa"+count); }

结果:输出都是对的。

题外话:

通用的多表查询其实有个致命的缺点。以马成老师的DataBaseClass类为例。这个类有一个致命的缺点,那就是在多表查询的时候,比如

select * from custom,order where custom.orderid=orider.id and custom.id=? 这里涉及到两张表,查询得到的字段有两张表的所有的字段。那么就有一个问题了。

我并没有针对两个表的字段的实体类啊,为了这个我还要重新创建对应的实体类,万一我以后的字段在少一个,那不是要经常改变了啊。这就是他的致命缺点。

但是Hibernate就很好的解决了这个问题。因为Hibernate中每个实体类都有相应的.hbm.xml所以查出来的结果都是保存在各自的实体类中的。

复杂查询放在最后讲:

复杂查询返回对象:

JdbcTemplate 并没有提供 像Apache DbUtils框架 那样Handler ,而是需要手动封装结果集(就是说我们要自己从数据库把一个一个数据拿出来,

自己再把它封装成一个对象。)

------------ 通常企业开发中, 开发人员会为每个表,编写单独结果集封装程序 (RowMapper)

所以我们要自己手动封装结果集(RowMapper)。注意用了RowMapper,我们只要关心一行数据的每一个值的封装,不要关心怎么换行。

rs.next()什么的,都不用我们关心。

第一步:先写一个内部类继承RowMapper<>

第二步:再写相应的查找结果的方法。

//第一步:
private class ProductRowMapper implements RowMapper<produce>
{
public produce mapRow(ResultSet rs, int rowNum) throws SQLException { produce produce1=new produce();
produce1.setId(rs.getInt("id"));
produce1.setName(rs.getString("name"));
produce1.setPrice(rs.getString("price"));
return produce1;
} }
//第二步:根据id把数据库中的其中一个product对象找出来持久化。
public produce findproduceById(int id)
{
String sql="select * from product where id=?";
return this.getJdbcTemplate().queryForObject(sql, new ProductRowMapper(),id); }

第三步:编写Junit测试代码:

    @Test
public void testfindProduct()
{
produce produce1=this.productDao.findproduceById(1);
//测试得到的结果是不是对的
System.out.print(produce1.getId()+produce1.getName()+produce1.getPrice()); }

结果:对的。

这里最核心的就是RowMapper。

23Spring_JdbcTemplate来实现单表的增删改查的更多相关文章

  1. python全栈开发day61-django简单的出版社网站展示,添加,删除,编辑(单表的增删改查)

    day61 django内容回顾: 1. 下载: pip install django==1.11.14 pip install -i 源 django==1.11.14 pycharm 2. 创建项 ...

  2. hibernate对单表的增删改查

    ORM: 对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping) 实现对单表的增删改查 向区域表中增加数据: 第一步: 新建一个Da ...

  3. Django学习笔记(10)——Book单表的增删改查页面

    一,项目题目:Book单表的增删改查页面 该项目主要练习使用Django开发一个Book单表的增删改查页面,通过这个项目巩固自己这段时间学习Django知识. 二,项目需求: 开发一个简单的Book增 ...

  4. django模型层 关于单表的增删改查

    关于ORM MTV或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库, 通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员 ...

  5. Django学习笔记--数据库中的单表操作----增删改查

    1.Django数据库中的增删改查 1.添加表和字段 # 创建的表的名字为app的名称拼接类名 class User(models.Model): # id字段 自增 是主键 id = models. ...

  6. django 利用ORM对单表进行增删改查

    牛小妹上周末,一直在尝试如何把数据库的数据弄到界面上.毕竟是新手,搞不出来,文档也看不懂.不过没关系,才刚上大学.今晚我们就来解释下,要把数据搞到界面的第一步.先把数据放到库里,然后再把数据从库里拿出 ...

  7. Mybatis(一)实现单表的增删改查

    1.1 什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并 ...

  8. 1.SSM整合_单表的增删改查

    目标:增删改查 环境:Maven+Eclipse+Tomcat7+JDK7 思维导图: 表结构 目录结构 依赖 <dependencies> <dependency> < ...

  9. Django中对单表的增删改查

    之前的简单预习,重点在后面 方式一: # create方法的返回值book_obj就是插入book表中的python葵花宝典这本书籍纪录对象   book_obj=Book.objects.creat ...

随机推荐

  1. SharePoint 2010 External List Paging – Server Side

    http://lightningtools.com/bcs/sharepoint-2010-external-list-paging-server-side/ When you are using a ...

  2. Android APK 文件自动安装

    1.权限 <uses-permission android:name="android.permission.INSTALL_PACKAGES" /> 2.方法 Uri ...

  3. Linux0.11内核剖析--初始化程序(init)

    1.概述 在内核源代码的 init/目录中只有一个 main.c 文件. 系统在执行完 boot/目录中的 head.s 程序后就会将执行权交给 main.c.该程序虽然不长,但却包括了内核初始化的所 ...

  4. 本地预览图片html和js例子

    本地预览图片html和js例子,直接上代码吧. <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" ...

  5. java实现栈和队列

    class Node { int val; Node next; Node(int x) { val = x; next = null; } } class Stack { Node top; pub ...

  6. LeetCode 3 Longest Substring Without Repeating Characters(最长不重复子序列)

    题目来源:https://leetcode.com/problems/longest-substring-without-repeating-characters/ Given a string, f ...

  7. MYSQL的慢查询两个方法

    对于排查问题找出性能瓶颈来说,最容易发现并解决的问题就是MYSQL的慢查询以及没有得用索引的查询. ================================================== ...

  8. node.js之看懂package.json依赖库版本控制

    金天:学习一个新东西,就要持有拥抱的心态,如果固守在自己先前的概念体系,就会有举步维艰的感觉.node.js依赖库的版本控制 一般node.js项目会依赖大量第三方module, 那么如何控制modu ...

  9. 在Dynamics CRM 2015中通过3CX插件(以及3CX windows phone)拨出电话

    背景 在On-premises部署的Dynamics CRM中实现通过网页拨通客户电话的功能 要点 3CX 提供了开箱即用的Dynamics CRM Solution,只需要在Microsoft Dy ...

  10. Effective Java 68 Prefer executors and tasks to threads

    Principle The general mechanism for executing tasks is the executor service. If you think in terms o ...