JdbcTemplate
在spring中使用JdbcTemplate进行数据库管理操作
在JdbcTemplate中执行SQL语句的方法大致分为3类:
execute
:可以执行所有SQL语句,一般用于执行DDL语句。
update
:用于执行INSERT
、UPDATE
、DELETE
等DML语句。
query....
:用于DQL数据查询语句。
JdbcTemplate概念及使用
a)Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作
b)引入相关 jar 包
c)在 spring 配置文件配置数据库连接池
1 2 3 4 5 6 7 8 <bean id ="dataSource" class ="com.alibaba.druid.pool.DruidDataSource" destroy-method ="close" > <property name ="url" value ="jdbc:mysql:///test" /> <property name ="username" value ="root" /> <property name ="password" value ="qwer" /> <property name ="driverClassName" value ="com.mysql.jdbc.Driver" /> </bean >
d)配置 JdbcTemplate 对象,注入 DataSource
1 2 3 4 5 6 <bean id ="jdbcTemplate" class ="org.springframework.jdbc.core.JdbcTemplate" > <property name ="dataSource" ref ="dataSource" > </property > </bean >
e)创建 service 类,创建 dao 类,在 dao 注入 jdbcTemplate 对象
1 2 <context:component-scan base-package ="com.atguigu" > </context:component-scan >
1 2 3 4 5 6 7 8 9 10 11 12 13 @Service public class BookService { @Autowired private BookDao bookDao; } @Repository public class BookDaoImpl implements BookDao { @Autowired private JdbcTemplate jdbcTemplate; }
JdbcTemplate操作数据库
1、JdbcTemplate 添加
a)对应数据库创建实体类
b)创建service和dao
(1)在 dao 进行数据库添加操作
(2)调用 JdbcTemplate 对象里面 update 方法实现添加操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class BookDaoImpl implements BookDao { @Autowired private JdbcTemplate jdbcTemplate; @Override public void add (Book book) { String sql = "insert into t_book values(?,?,?)" ; Object[] args = {book.getUserId(), book.getUsername(),book.getUstatus()}; int update = jdbcTemplate.update(sql,args); System.out.println(update); } }
2、JdbcTemplate 修改和删除
使用JdbcTemplate 模板所实现的 “增删改” 都是调用了同一个 update
”方法
1、修改
1 2 3 4 5 6 7 @Override public void updateBook (Book book) { String sql = "update t_book set username=?,ustatus=? where user_id=?" ; Object[] args = {book.getUsername(), book.getUstatus(),book.getUserId()}; int update = jdbcTemplate.update(sql, args); System.out.println(update); }
2、删除
1 2 3 4 5 6 @Override public void delete (String id) { String sql = "delete from t_book where user_id= ?" ; int update = jdbcTemplate.update(sql, id); System.out.println(update); }
3、JdbcTemplate查询返回某个值
1 2 3 4 5 6 7 8 @Override public int selectCount () { String sql = "select count(*) from t_book" ; Integer count = jdbcTemplate.queryForObject(sql, Integer.class); return count; }
4、JdbcTemplate查询返回对象
jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);
queryForObject方法 参数
第一个参数:sql语句
第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面 实现类 完成数据封装
第三个参数:sql 语句值
1 2 3 4 5 6 @Override public Book findBookInfo (String id) { String sql = "select * from t_book where user_id=?" ; Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper <Book>(Book.class), id); return book; }
5、JdbcTemplate 查询返回集合
1 2 3 4 5 6 7 8 9 @Override public List<Book> findAllBook () { String sql = "select * from t_book" ; List<Book> bookList = jdbcTemplate.query(sql, new BeanPropertyRowMapper <Book>(Book.class)); return bookList; }
6、JdbcTemplate批量操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 @Override public void batchAddBook (List<Object[]> batchArgs) { String sql = "insert into t_book values(?,?,?)" ; int [] ints = jdbcTemplate.batchUpdate(sql, batchArgs); System.out.println(Arrays.toString(ints)); } @Test public void batchAddTest () { List<Object[]> batchArgs = new ArrayList <>(); Object[] o1 = {"3" ,"java" ,"a" }; Object[] o2 = {"4" ,"c++" ,"b" }; Object[] o3 = {"5" ,"MySQL" ,"c" }; batchArgs.add(o1); batchArgs.add(o2); batchArgs.add(o3); bookService.batchAdd(batchArgs); }
7、JdbcTemplate 实现批量修改操作
批量修改 (同批量添加一样,调用同一个方法)
jdbcTemplate.batchUpdate(sql, args);
字节码 :
1 2 int [] batchUpdate(String var1, List<Object[]> var2, int [] var3) throws DataAccessException;int [] batchUpdate(String var1, List<Object[]> var2) throws DataAccessException;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @Override public void batchUpdate (List<Object[]> batchArgs) { String sql = "update t_book set username=?,ustatus=? where user_id=?" ; int [] ints = jdbcTemplate.batchUpdate(sql, batchArgs); System.out.println(Arrays.toString(ints)); } @Test public void batchUpdateTest () { List<Object[]> batchArgs = new ArrayList <>(); Object[] o1 = {"3" ,"java_update" ,"a111" }; Object[] o2 = {"4" ,"c++_update" ,"b111" }; Object[] o3 = {"5" ,"MySQL_update" ,"c111" }; batchArgs.add(o1); batchArgs.add(o2); batchArgs.add(o3); bookService.batchUpdate(batchArgs); }
批量删除
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @Override public void batchDeleteBook (List<Object[]> batchArgs) { String sql = "delete t_book where user_id=?" ; int [] ints = jdbcTemplate.batchUpdate(sql, batchArgs); System.out.println(Arrays.toString(ints)); } @Test public void batchDeleteTest () { List<Object[]> batchArgs = new ArrayList <>(); Object[] o1 = {"3" }; Object[] o2 = {"4" }; Object[] o3 = {"5" }; batchArgs.add(o1); batchArgs.add(o2); batchArgs.add(o3); bookService.batchDelete(batchArgs); }