5. JDBCTemplate(jdbc模板)
5.1 介绍
-
什么事JDBCTemplate
Spring框架对jdbc进行了封装,使用jdbcTemplate可以很方便的实现对数据库的增删改查操作
5.2 JDBCTemplate的使用
5.2.1 准备
- 引入相关的jar包
-
在Spring的配置文件中配置
<!-- 数据库连接池 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="url" value="jdbc:mysql:///user_db" /> <property name="username" value="root" /> <property name="password" value="root" /> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> </bean>
-
配置JDBCTemplate对象,注入DataSource
<!--JDBCTemplate对象-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--注入DataSource-->
<property name="dataSource" ref="dataSource"></property>
</bean>
-
创建service类,创建dao类,在dao注入jdbcTemplate对象
-
配置文件中开启组件的扫描
<!--开启组件的扫描--> <context:component-scan base-package="com.atguigu"></context:component-scan>
-
Service
@Service public class BookService { //注入dao @Autowired private BookDAO bookDAO; }
-
dao
@Repository public class BookImpl implements BookDAO { //注入JdbcTemplate @Autowired private JdbcTemplate jdbcTemplate; }
-
5.2.2 JdbcTemplate操作数据库
-
对应数据库创建表
public class Book { private int id; private String bookName; private BigDecimal price; private String author;
-
编写Service和DAO
-
在DAO中进行数据库的添加操作
public interface BookDAO { //添加方法 public void add(Book book); } @Repository public class BookImpl implements BookDAO { //注入JdbcTemplate @Autowired private JdbcTemplate jdbcTemplate; //添加方法 @Override public void add(Book book) { int update = jdbcTemplate.update("insert into t_book values(0,?,?,?,?,4,56,0)","没有图", book.getBookName(), book.getPrice(), book.getAuthor()); System.out.println(update); } } @Service public class BookService { //注入dao @Autowired private BookDAO bookDAO; //添加方法 public void addBook(Book book){ bookDAO.add(book); } }
-
调用JdbcTemplate中的update方法可以实现添加操作
-
1. 添加
public class TestBook {
@Test
public void testJdbcTemplate(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
BookService bookService = context.getBean("bookService", BookService.class);
bookService.addBook(new Book(1,"java",new BigDecimal(34),"陌陌"));
}
}
2. 修改和删除
//修改
@Override
public void updateBook(Book book) {
String sql = "update t_book set bookName=?,price = ?,author=? where id = ?";
int update = jdbcTemplate.update(sql, book.getBookName(), book.getPrice(), book.getAuthor(), book.getId());
System.out.println(update);
}
@Override
public void deleteBook(String id) {
String sql = "delete from t_book where id = ?";
int update = jdbcTemplate.update(sql, id);
System.out.println(update);
}
3. 查询(返回一个值)
- 查询表中有多少条记录,返回的是某个值
- 使用jdbcTemplate实现查询返回某个值代码
有两个参数
- sql语句
- 返回值类型的class
@Override
public int selectCount() {
String sql = "select count(*) from t_book";
return jdbcTemplate.queryForObject(sql,Integer.class);
}
4. 查询(返回对象)
参数
- sql语句
- RowMappr ,是个接口,如果返回不同类型的数据,我们使用这个接口里面实现类完成数据封装
- sql语句值
@Override
public Book findBookInfo() {
String sql = "select id, bookName,price,author from t_book where id=?";
return jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<Book>(Book.class),11);
}
5. 查询(返回集合)
调用jdbcTemplate的方法实现查询返回集合
参数
- sql语句
- RowMappr ,是个接口,如果返回不同类型的数据,我们使用这个接口里面实现类完成数据封装
- sql语句值
@Override
public List<Book> findAllBook() {
String sql ="select id, bookName,price,author from t_book";
return jdbcTemplate.query(sql,new BeanPropertyRowMapper<Book>(Book.class));
}
6. JdbcTemplate操作数据库(批量添加)
参数
- sql语句
- List集合,提娜佳多条记录的数据
@Override
public void batchAddBook(List<Object[]> batchArgs) {
String sql = "insert into t_book values(0,?,?,?,?,4,56,0)";
int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
System.out.println(Arrays.toString(ints));
}
//批量添加
List<Object[]> batchArgs = new ArrayList<>();
Object[] o1 = {"没有图","编译原理",22,"不知道"};
Object[] o2 = {"没有图","c++",30,"b"};
Object[] o3 = {"没有图","c",30,"b"};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);
bookService.batchAdd(batchArgs);
7. JdbcTemplate操作数据库(批量修改)
List<Object[]> batchArgs = new ArrayList<>();
Object[] o1 = {"白雪公主",2,"格林兄弟",13};
Object[] o2 = {"灰姑凉",new BigDecimal(9),"陌陌",14};
Object[] o3 = {"美人鱼",new BigDecimal(8),"周星驰",15};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);
bookService.batchUpdate(batchArgs);
@Override
public void batchUpdateBook(List<Object[]> batchArgs) {
String sql = "update t_book set bookName=?,price = ?,author=? where id = ?";
int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
System.out.println(ints);
}
8. JdbcTemplate操作数据库(批量删除)
@Override
public void batchDelete(List<Object[]> batchArgs) {
String sql = "delete from t_book where id = ?";
int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
System.out.println(ints);
}
List<Object[]> batchArgs = new ArrayList<>();
Object[] o1 = {13};
Object[] o2 = {14};
Object[] o3 = {15};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);
bookService.batchDelete(batchArgs);
下集更精彩…
预告🔈:事务介绍