第一步建表:

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。

最新文章

  1. 旺财速啃H5框架之Bootstrap(四)
  2. 对Java Serializable(序列化)的理解和总结
  3. 【转】【编码】ASCII 、UNICODE和UTF-8之二
  4. java一般要点
  5. Java集合框架:HashMap
  6. Python在金融,数据分析,和人工智能中的应用
  7. html或jsp实现打印三种方法
  8. javascript将form表单中的元素值封装成json格式
  9. MBProgressHUD的基本使用
  10. MongoDB-配置翻译
  11. centos搭建ftp服务器
  12. generator mybatis逆向工程
  13. VS&#160;&quot;以下文件中的行尾不一致,要将行尾标准化吗?&quot;
  14. linux中cmake语法的学习
  15. nginx简单学习(tomcat)
  16. C#:自定义函数
  17. &quot;add-apt-repository&quot; On Linux
  18. Linux时间同步+国内常用的NTP服务器地址
  19. css加载方式link和@import的区别!
  20. list中依据map&amp;lt;String,Object&amp;gt;的某个值排序

热门文章

  1. SAP内存/ABAP内存/共享内存区别
  2. 自定义组件 -- android联系人
  3. iOS之 动态热修补技术JSPatch
  4. android intent 5.1
  5. Mysql中的函数
  6. Head First HTML CSS XHTML笔记
  7. linux 查看系统版本
  8. SharePoint 指定配置数据库访问账户“域账户\用户”
  9. jQuery最佳实践(不断更新中...)
  10. sqlserver2008链接服务器的使用和oracle11g客户端修改字符集