Spring5总结

四、JdbcTemplate

2021-11-04  本文已影响0人  不减肥到一百三不改名字
<!-- 数据库连接池 --> 
<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对象 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <!--注入dataSource-->
    <property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 组件扫描 -->
<context:component-scan base-package="com.atguigu"></context:component-scan>

service中配置dao对象类,要配置一个注解类通过@Service
使用@Autowired进行注入对象

@Service

public class UserService {

    //注入dao
    @Autowired
    private UserDao userDao;
}

在dao中配置jdbcTemplate 对象
通过@Repository进行标识

@Repository
public class UserDaoImpl implements UserDao {

    @Autowired
    private JdbcTemplate jdbcTemplate;

1、数据库添加

对应数据的表,创建相应的对象名,以此创建相应的实体类

之后进行书写相应的dao层和service层
在业务逻辑层中调用数据接口

public class BookService {
    //注入 dao
    @Autowired
    private BookDao bookDao; 

    public void addBook(Book book){
        bookDao.add(book);
    }

}

dao层先写一个接口类,主要是定义一些方法
而接口实现类为

@Repository
public class BookDaoImpl implements BookDao {
    //注入 JdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;
    //添加的方法
    @Override
    public 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);
    } }

调用 JdbcTemplate 对象里面 update 方法实现添加操作
其增加的update源代码为


第一个参数:sql 语句
第二个参数:可变参数,设置 sql 语句值

可变参数为问号占位符

具体测试类如下

@Test
public 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);
        }
}

2、数据库修改与删除

在业务逻辑层中调用数据接口实现层

public class BookService {
    //注入 dao
    @Autowired
    private BookDao bookDao; 

    public void updateBook(Book book){
        bookDao.updateBook(book);
    }
    
    public void deletBook(String id){
        bookDao.deletBook(id);
    }

}

在接口层写方法
在接口实现类中书写具体方法函数

@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);
        }


@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、数据库查询

查询返回某个值
查询语句的返回主要是用这个值


主要是运用这个函数

 @Nullable
    <T> T queryForObject(String var1, RowMapper<T> var2) throws DataAccessException;

第一个参数:sql 语句
第二个参数:返回类型 Class,如果是string类型,则返回string.class

数据实现接口的类为

 //查询表记录数
    @Override
    public int selectCount() {
        String sql = "select count(*) from t_book";
        Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
        return count;
    }

查询返回对象
主要是运用这个函数

@Nullable
    <T> T queryForObject(String var1, RowMapper<T> var2, @Nullable Object... var3) throws DataAccessException;

第一个参数:sql 语句
第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装,泛型参数主要是返回类型的对象
第三个参数:sql 语句值,主要是返回的值

实现接口类

  @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;
    }

查询返回集合

主要使用这个函数


第一个参数:sql 语句
第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装,泛型参数主要是返回类型的对象
第三个参数:sql 语句值,主要是返回的值。没有参数可省略

//查询返回集合
    @Override
    public List<Book> findAllBook() {
        String sql = "select * from t_book";
        //调用方法
        List<Book> bookList = jdbcTemplate.query(sql, new
                BeanPropertyRowMapper<Book>(Book.class));
        return bookList;
    }

4、据库批量操作

主要通过这个函数


第一个参数:sql 语句
第二个参数:List 集合,添加多条记录数据

批量添加

  //批量添加
    @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));
    }
  

批量添加的测试代码

  //批量添加测试
    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);

批量修改

//批量修改
    @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);

批量删除

 //批量删除
    @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);
上一篇下一篇

猜你喜欢

热点阅读