1 概念和准备
1、Spring框架对JDBC进行封装,使用JdbcTemplate方便实现对数据库操作
2、准备工作
(1)引入相关jar包
(2)在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="920827"/><property name="driverClassName" value="com.mysql.jdbc.Driver"/></bean>
(3)配置JdbcTemplate对象,注入DataSource
<!-- 配置JdbcTemplate对象--><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><!-- 注入dataSource--><!-- name是与class中的类型定义名字对应,ref与数据库连接池中的id对应--><property name="dataSource" ref="dataSource"></property></bean>
(4)创建service类,创建dao类,在dao注入JdbcTemplate对象
<!-- 组件扫描--><context:component-scan base-package="spring5"></context:component-scan>@Servicepublic class BookService {//注入dao@Autowiredprivate BookDao bookDao;}@Repositorypublic class BookDaoImpl implements BookDao {//注入JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;}
2 数据库添加
1、对应数据的表,创建相应的对象名,以此创建相应的实体类
public class Book {private String userId;private String username;private String 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;}public String getUserId() {return userId;}public String getUsername() {return username;}public String getUstatus() {return ustatus;}@Overridepublic String toString() {return "Book{" +"userId='" + userId + '\'' +", username='" + username + '\'' +", ustatus='" + ustatus + '\'' +'}';}}
2、编写service和dao
(1)在dao进行数据库添加操作
(2)调用JdbcTemplate对象里面的update方法实现添加操作
@Repositorypublic class BookDaoImpl implements BookDao {//注入 JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;//添加的方法@Overridepublic void add(Book book) {//1 创建 sql 语句String sql = "insert into t_book values(?,?,?)";//2 调用方法实现Object[] args = {book.getUserId(), book.getUsername(),book.getUstatus()};int update = jdbcTemplate.update(sql,args);System.out.println(update);}}
3、测试类
@Testpublic void testJdbcTemplate() {ApplicationContext context =new ClassPathXmlApplicationContext("bean1.xml");BookService bookService =context.getBean("bookService",BookService.class);Book book = new Book();book.setUserId("1");book.setUsername("java");book.setUstatus("a");bookService.addBook(book);}}
3 数据库修改与删除
在BookDaoImpl接口实现层添加修改与删除方法
@Overridepublic 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);}@Overridepublic void delete(String id) {String sql = "delete from t_book where user_id=?";int update = jdbcTemplate.update(sql, id);System.out.println(update);}
4 数据库查询
4.1 查询返回某个值
使用queryForObject函数
@Nullable<T> T queryForObject(String sql, Class<T> requiredType) throws DataAccessException;
第一个参数:sql 语句
第二个参数:返回类型 Class,如果是int类型,则返回Integer.class
//查询表记录数@Overridepublic int selectCount() {String sql = "select count(*) from t_book";Integer count = jdbcTemplate.queryForObject(sql, Integer.class);return count;}
4.2 查询返回对象
使用queryForObject函数
@Nullable<T> T queryForObject(String var1, RowMapper<T> var2, @Nullable Object... var3) throws DataAccessException;
第一个参数:sql 语句
第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装,泛型参数主要是返回类型的对象
第三个参数:sql 语句值,主要是返回的值
@Overridepublic Book findBookInfo(String id) {String sql = "select * from t_book where user_id=?";//调用方法Book book = jdbcTemplate.queryForObject(sql, newBeanPropertyRowMapper<Book>(Book.class), id);return book;}
4.3 查询返回集合
使用query函数
第一个参数:sql 语句
第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装,泛型参数主要是返回类型的对象
第三个参数:sql 语句值,主要是返回的值。没有参数可省略
//查询返回集合@Overridepublic List<Book> findAllBook() {String sql = "select * from t_book";//调用方法List<Book> bookList = jdbcTemplate.query(sql, newBeanPropertyRowMapper<Book>(Book.class));return bookList;}
5 数据库批量操作
使用batchUpdate函数
第一个参数:sql 语句
第二个参数:List 集合,添加多条记录数据
5.1 批量添加
//批量添加@Overridepublic void batchAddBook(List<Object[]> batchArgs) {String sql = "insert into t_book values(?,?,?)";int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);System.out.println(Arrays.toString(ints));}
测试代码
//批量添加测试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);
5.2 批量修改
//批量修改
@Override
public void batchUpdateBook(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));
}
测试代码
//批量修改
List<Object[]> batchArgs = new ArrayList<>();
Object[] o1 = {"java0909","a3","3"};
Object[] o2 = {"c++1010","b4","4"};
Object[] o3 = {"MySQL1111","c5","5"};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);
//调用方法实现批量修改
bookService.batchUpdate(batchArgs);
5.3 批量删除
//批量删除
@Override
public void batchDeleteBook(List<Object[]> batchArgs) {
String sql = "delete from t_book where user_id=?";
int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
System.out.println(Arrays.toString(ints));
}
测试代码
//批量删除
List<Object[]> batchArgs = new ArrayList<>();
Object[] o1 = {"3"};
Object[] o2 = {"4"};
batchArgs.add(o1);
batchArgs.add(o2);
//调用方法实现批量删除
bookService.batchDelete(batchArgs);
