30.31.spring对jdbc的支持jdbcTemplate

  

  使用Spring的JDBC准备:
  1):拷贝jar:
       mysql-connector-java-5.1.11.jar:MySQL驱动包
       spring-jdbc-4.1.2.RELEASE.jar:支持JDBC
       spring-tx-4.1.2.RELEASE.jar: 支持事务
  2): 操作Product对象的DAO实现:
  3):参考文档:参考Spring4.x文档的362页.

代码:如下

   spring配置文件代码

 <?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 读取配置文件-->
<context:property-placeholder location="classpath:db.properties"/>
<!--配置dataSources-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${mysql.driverClass}"/>
<property name="url" value="${mysql.JdbcUrl}"/>
<property name="username" value="${mysql.User}"/>
<property name="password" value="${mysql.Password}"/>
</bean> <bean id="product2Dao" class="com.day02.ssm.spring.dao.impl.Product2Dao">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>

   dao是实现代码:

 package com.day02.ssm.spring.dao.impl;

 import com.day02.ssm.spring.dao.IProductDao;
import com.day02.ssm.spring.model.Product;
import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper; import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; /**
* 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html
* 疑问咨询wx:851298348
*/
public class Product2Dao implements IProductDao {
private JdbcTemplate jdbcTemplate; public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
} @Override
public void save(Product product) {
String sql = "INSERT INTO product (product_name,sale_price) VALUES (?,?)";
this.jdbcTemplate.update(sql,product.getProductName(),product.getSalePrice());
} @Override
public void delete(int id) {
String sql="DELETE FROM product WHERE id=?";
this.jdbcTemplate.update(sql,id); } @Override
public void update(Product product) {
String sql="UPDATE product SET sale_price=? WHERE id=?";
this.jdbcTemplate.update(sql,product.getSalePrice(),product.getId());
} @Override
public Product query(int id) {
String sql="SELECT id,product_name,sale_price FROM product WHERE id=?";
Product product = this.jdbcTemplate.queryForObject(sql, new Object[]{id}, new RowMapper<Product>() {
public Product mapRow(ResultSet rs, int rowNum) throws SQLException {
Product product = new Product();
product.setId(rs.getInt("id"));
product.setProductName(rs.getString("product_name"));
product.setSalePrice(rs.getInt("sale_price"));
return product;
}
});
return product;
}
}

Product2Dao

  dao测试代码

 package com.day02.ssm.spring.test;

 import com.day02.ssm.spring.dao.impl.Product2Dao;
import com.day02.ssm.spring.model.Product;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /**
* 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html
* 疑问咨询wx:851298348
*/
@RunWith(SpringJUnit4ClassRunner.class)//把junit加载到spring容器中去
@ContextConfiguration("classpath:spring-config_jdbcTemplat.xml")
public class TestProduct2Dao { // private ProductDao productDao=new ProductDao();
@Autowired
private Product2Dao productDao;//从spring中获取dao对象 @Test
public void test() {
Product product = new Product();
product.setProductName("苹果22");
product.setSalePrice(892);
productDao.save(product);
}
@Test
public void testDelete() {
productDao.delete(24);
} @Test
public void testUpdate() {
Product product = new Product();
product.setId(23);
product.setSalePrice(1000);
productDao.update(product);
}
@Test
public void testQuery() {
Product query = productDao.query(23);
System.out.println("query="+query);
} }

TestProduct2Dao

32.spring对jdbc的支持jdbcTemplate之继承方式

  注意:和上面原理一样,只是写法不一样

  

33.spring与mybatis集成方案1

  依赖包:

  

  xml文件配置:

  

  映射文件:

  

  dao实现:

  

34.spring与mybatis整合方案2(不写实现类)

  

34.spring与mybatis整合方案3(终极生产版本)

  

   spring与mybatis整合终极版本代码:

    整合的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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 读取配置文件-->
<context:property-placeholder location="classpath:db.properties"/>
<!--配置dataSources-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${mysql.driverClass}"/>
<property name="url" value="${mysql.JdbcUrl}"/>
<property name="username" value="${mysql.User}"/>
<property name="password" value="${mysql.Password}"/>
</bean>
<!--整合mybatis-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--数据源-->
<property name="dataSource" ref="dataSource"/>
<!--属性文件-->
<!--映射文件地址-->
<property name="mapperLocations" value="classpath:mapper/*Mapper.xml"/>
</bean> <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<property name="basePackage" value="com.day03.ssm.spring.mybatis.dao"/>
</bean> <!-- <bean id="mapperFactoryBean" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
<property name="mapperInterface" value="com.day03.ssm.spring.mybatis.dao.IProduct2Dao"/>
</bean>--> <!-- <bean id="productDao" class="com.day03.ssm.spring.mybatis.dao.impl.ProductDao">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>--> </beans>

  mybatis映射文件

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
namespace:该映射文件的名字,理论上可以任意取
没有实现类时 命名空间必须为dao接口的权限命名地址
-->
<mapper namespace="com.day03.ssm.spring.mybatis.dao.IProduct2Dao">
<insert id="save" parameterType="com.day03.ssm.spring.mybatis.model.Product">
INSERT INTO product (product_name,sale_price) VALUES (#{productName},#{salePrice})
</insert>
</mapper>

  测试代码:

 package com.day03.ssm.spring.mybatis.testDao;

 import com.day03.ssm.spring.mybatis.dao.IProduct2Dao;
import com.day03.ssm.spring.mybatis.model.Product;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /**
* 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html
* 疑问咨询wx:851298348
*/
@RunWith(SpringJUnit4ClassRunner.class)//把junit加载到spring容器中去
@ContextConfiguration("classpath:spring-config3.xml")
public class TestProduct3Dao {
@Autowired
private IProduct2Dao productDao; @Test
public void testSave() {
Product product = new Product();
product.setProductName("小米33");
product.setSalePrice(789);
productDao.save(product);
}
}

TestProduct3Dao

  

05_ssm基础(四)之Spring与持久层的整合的更多相关文章

  1. 05_ssm基础(四)之Spring基础二

    24.spring配置dbcp并完成CRUD操作 1.准备jar包 2.编辑Product模型 package com.day02.ssm.spring.model; public class Pro ...

  2. 对spring 对持久层的支持和数据库连接池的理解

    1.spring对持久层的支持在于,得到数据库连接之后操作上的封装,将操作简化了.也就是说以后操作sql语句就用XXXTemplate(就是一个工具类)对象了. 2.数据库连接池的作用只在于得到数据库 ...

  3. 05_ssm基础(三)之Spring基础

    11.spring入门引导 12.spring_HelloWord程序 实现步骤: 0.找到spring压缩包,并解压 1.拷贝jar包 2.添加主配置文件(官方文档约28页) 3.在测试中使用 13 ...

  4. springMVC系列之(四) spring+springMVC+hibernate 三大框架整合

    首先我们要知道Hibernate五大对象:,本实例通过深入的使用这五大对象和spring+springMVC相互结合,体会到框架的好处,提高我们的开发效率 Hibernate有五大核心接口,分别是:S ...

  5. Spring(七)持久层

    一.Spring对DAO的支持 DAO:Data Access Object Spring提供了DAO框架,让开发人员无须耦合特定的数据库技术,就能进行应用程序的开发. Spring封闭了操作Orac ...

  6. 整合使用持久层框架mybatis 使用SqlSessionTemplate模板类与使用映射接口 对比

    spring中整合使用mybatis的用法总结 一:在Spring配置Mybatis 第一步:将mybatis-spring类包添加 到项目的类库中 第二步:编写spring和持久层衔接的xml文件, ...

  7. 浅谈Mybatis持久化框架在Spring、SSM、SpringBoot整合的演进及简化过程

    前言 最近开始了SpringBoot相关知识的学习,作为为目前比较流行.用的比较广的Spring框架,是每一个Java学习者及从业者都会接触到一个知识点.作为Spring框架项目,肯定少不了与数据库持 ...

  8. spring学习(四)spring 持久层的封装

    持久层:所谓“持久层”,也就是在系统逻辑层面上,专著于实现数据持久化的一个相对独立的领域(Domain),是把数据保存到可掉电式存储设备中.持久层是负责向(或者从)一个或者多个数据存储器中存储(或者获 ...

  9. 第五章 征服数据库(Spring对DB的使用)——开发持久层

    本章内容: 定义Spring对数据库访问的支持 配置数据库资源 使用Spring的JDBC模板 在几乎所有的企业级应用中,都需要构建数据持久层.现在意义上的数据持久层是指把对象或者数据保存到数据库中, ...

随机推荐

  1. Suricata在ubuntu14.04环境下安装

    简介 Suricata是一款高性能的网络IDS.IPS和网络安全监控引擎.它是由the Open Information Security Foundation开发,是一款开源的系统,现在的NIDS领 ...

  2. 【Python爬虫实战】 图片爬虫-淘宝图片爬虫--千图网图片爬虫

    所谓图片爬虫,就是从互联网中自动把对方服务器上的图片爬下来的爬虫程序.有些图片是直接在html文件里面,有些是隐藏在JS文件中,在html文件中只需要我们分析源码就能得到如果是隐藏在JS文件中,那么就 ...

  3. srbac配置

    Yii框架中安装srbac扩展方法 以前自己安装过一次srbac,遇到很多问题,虽然都解决了,可是一时偷懒,没做记录. 再次安装时,还是遇到了点麻烦,所以这一还是记下来,以备不时之需. 首先,下载sr ...

  4. <转载> 22种代码味道(Martin Fowler与Kent Beck) http://blog.csdn.net/lovelion/article/details/9301691

    Martin Fowler在Refactoring: Improving the Design of Existing Code(中译名:<重构——改善既有代码的设计>)一书中与Kent ...

  5. Mybatis学习——resultMap使用

    在实体和数据库字段一致 时直接使用resultType时可以的. 当字段不一致时,可以使用别名.使之一致. 以下讲解使用resultMap情况. 实体Order.java package pojo; ...

  6. spark快速大数据分析

    从上层来看,每个Spark 应用都由一个驱动器程序(driver program)来发起集群上的各种并行操作.驱动器程序包含应用的main 函数,并且定义了集群上的分布式数据集,还对这些分布式数据集应 ...

  7. 写一个小demo过程中遇到的各种问题 学生管理考勤系统(网页模拟)

    添加与新增一些小玩意的1.0.3版本:传送门 各位带哥,这不是你们要的c++.java.c#作业哈 课上要求做个小作业,学生管理考勤系统,原本想着是个练手的好机会,结果只证实了我还是个弟中弟. 设想的 ...

  8. djangobb之debug-toolbar查看其sql

    #djangobb之views show_forum(request, forum_id, full=True) default queries including duplicates ) Quer ...

  9. JsonConvert

    ///"{'jsonParam' : " + jsonText + "}" /* Dictionary<string, object> tmp = ...

  10. leetcode1015

    class Solution(object): def smallestRepunitDivByK(self, K: int) -> int: if K % 2 == 0 or K % 5 == ...