一、JdbcTemplate(概念和准备)
1
、什么是 JdbcTemplate(Template译为模板)
(
1
)
Spring
框架对
JDBC
进行封装,使用
JdbcTemplate
方便实现对数据库操作
2
、准备工作
(
1
)引入相关
jar
包
( 2 )在 spring 配置文件配置数据库连接池com.alibaba.druid.pool.DruidDataSource和com.mysql.jdbc.Driver 都是引入的jar包内的类,不需要自己创建
( 3 )配置 JdbcTemplate 对象,注入 DataSource(即数据库、数据源)
- JdbcTemplate是jar包里的类,不是自己创建的。
- JdbcTemplate中有个属性叫:dataSource,源码中已经为其设置了set方法,所以用的是set方法注入属性
- JdbcTemplate的属性dataSource注入的正是上面数据库连接池对象,等于说把JdbcTemplate对象和数据库连接起来了
(4 )使用注解来创建对象和注入属性,所以需要开启组件扫描![]()
完整的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:aop="http://www.springframework.org/schema/aop" 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 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 数据库连接池 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="url" value="jdbc:mysql:///user_db" /><!--对应SQLyog里的数据库--> <property name="username" value="root" /> <!-- 用户名 --> <property name="password" value="4.233928" /> <!-- 密码 --> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> </bean> <!-- JdbcTemplate对象 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <!--注入dataSource属性--> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 组件扫描 --> <context:component-scan base-package="JDBC"></context:component-scan> </beans>
二、JdbcTemplate 操作数据库(添加)
需求:在表Book中添加一行数据(下图是已经添加完的)
1、对应数据库创建实体类(三个属性对应表Book的三个参数)
package JDBC;
public class Book {
private String userid;
private String username;
private String ustatus;
public String getUserid() {
return userid;
}
public String getUsername() {
return username;
}
public String getUstatus() {
return ustatus;
}
public void setUserid(String userid) {
this.userid = userid;
}
public void setUsername(String username) {
this.username = username;
}
public void setUstatus(String ustatus) {
this.ustatus = ustatus;
}
}
2、接口BookDao,定义增删查改方法
package JDBC;
public interface BookDao {
//添加(增)
public void add(Book book);
}
3、接口BookDao的实现类:BookDaoImp
- 重写add(Book book)方法,向数据库的表中添加数据
JdbcTemplate是jar包org.springframework.jdbc.core中的,添加注解@Autowired后,
已经自动注入到JdbcTemplate jdbcTemplate中了。
package JDBC; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; @Repository public class BookDaoImp implements BookDao{ //按类型、自动注入了JdbcTemplate对象(jdbcTemplate即已经是有实体的对象了) //JdbcTemplate对象对象里有增删查改的方法,用来操作数据库 @Autowired private JdbcTemplate jdbcTemplate; @Override public void add(Book book) { //创建添加的sql语句 String addsql = "insert into Book values(?,?,?)"; //调用jdbcTemplate.update实现添加,book.getUserid()、book.getUsername()、book.getUstatus()对应values(?,?,?)里的三个问号 Object[] args = {book.getUserid(), book.getUsername(), book.getUstatus()}; int update = jdbcTemplate.update(addsql,args); //返回值update代表添加了几行 System.out.println(update);//1 } }
4、BookService类4、BookService类5
package JDBC; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class BookService { //BookDaoImp类上添加了注解@Repository,即已经生成了他的对象 //按类型、自动注入了BookDaoImp的对象 @Autowired private BookDao bookDao; public void addBook(Book book){ bookDao.add(book); } }
5、测试 :获取BookService类的对象bookService,调用addBook(book)。
package JDBC; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class JDBCTest { @Test public void test(){ ApplicationContext context = new ClassPathXmlApplicationContext("bean7.xml"); BookService bookService = context.getBean("bookService", BookService.class); Book book = new Book(); book.setUserid("1"); book.setUsername("java"); book.setUstatus("active"); bookService.addBook(book); } }
——一般这些是从网页上获得的,这里我们手动输入
最终效果:
三、JdbcTemplate 操作数据库(删、改)——只需修改以下几个文件
package JDBC;
public interface BookDao {
//添加(增)
public void add(Book book);
//修改
public void update(Book book);
//删除(根据id删除)
public void delete(String id);
}
package JDBC;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class BookDaoImp implements BookDao{
//按类型、自动注入了JdbcTemplate对象
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void add(Book book) {
//创建添加的sql语句
String addsql = "insert into Book values(?,?,?)";
//调用jdbcTemplate.update实现添加,book.getUserid()、book.getUsername()、book.getUstatus()对应values(?,?,?)里的三个问号
Object[] args = {book.getUserid(), book.getUsername(), book.getUstatus()};
int update = jdbcTemplate.update(addsql,args);
//返回值update代表添加了几行
System.out.println(update);
}
@Override
public void update(Book book) {
//根据id修改username ustatus
String updatesql = "update Book set username=?,ustatus=?where user_id=?";
Object[] args = {book.getUsername(), book.getUstatus(),book.getUserid(),};//注意参数顺序
int update = jdbcTemplate.update(updatesql,args);
}
@Override
public void delete(String id) {
//根据user_id删除
String deletesql = "delete from Book where user_id=?";
int update = jdbcTemplate.update(deletesql,id);
}
}
package JDBC;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BookService {
//按类型、自动注入了BookDaoImp的对象
@Autowired
private BookDao bookDao;
public void addBook(Book book){
bookDao.add(book);
}
public void update(Book book){
bookDao.update(book);
}
public void delete(String id){
bookDao.delete(id);
}
}
四、JdbcTemplate 查询操作
1、查询返回的是某个值
2、查询返回的是某个对象
3、查询返回的是某个集合
五、批量操作