JDBCTemplate遇到的小错误,以及增删改查,批量增删改查的操作

问题1

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'bookService': Unsatisfied dependency expressed through field 'bookDao'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.atguigu.spring5.dao.BookDao' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

曾报了类似这样的一个错误,经过排查,是在IMPL层实现类前漏写了

@Repository

它一般用于DAO类

Spring Repository注释是@Component注释的一种特殊形式,因此Spring 框架会通过类路径扫描自动检测Spring Repository类。

Spring Repository is very close to DAO pattern where DAO classes are responsible for providing CRUD operations on database tables. However, if you are using Spring Data for managing database operations, then you should use Spring Data Repository interface.

Spring Repository非常接近DAO模式,其中DAO类负责对数据库表提供CRUD操作。 但是,如果您使用Spring Data来管理数据库操作,则应该使用Spring Data Repository接口。

问题2

查询语句在控制台的参数为空,但数据库是已经得到了修改

 我在这里曾犯了两次错误,首先在运用

String sql="select*from t_spring where user_id=? ";这种语句的时候,一定要保持数据库的列名称与Dao层类对象属性的名字保持一致!不然将无法产生正确的映射。

第二次则是表的名称写错,根本无法查询正确的值,也可以从这里推出,如果数据库与Dao层的属性的类型不一致,也会返回null;

下面是利用JDBCTemplate对数据库进行增删改查的一系列基本操作,在此做个记录

Book对象

public class Book {
    private String userId;
    private String username;
    private String ustatus;

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getUstatus() {
        return ustatus;
    }

    public void setUstatus(String ustatus) {
        this.ustatus = ustatus;
    }

    @Override
    public String toString() {
        return "Book{" +
                "userId='" + userId + '\'' +
                ", username='" + username + '\'' +
                ", ustatus='" + ustatus + '\'' +
                '}';
    }

Dao层接口以及实现类

public interface BookDao {
    //添加的方法
    void add(Book book);

    void update(Book book);
    void delete(String id);
  //查询总行数
    int selectCount();

    Book findOne(String id);
    //查询返回集合
    List<Book> findAllBook();

    //批量添加
    void batchAddBook(List<Object[]> batchArgs);
    //批量更新
     void batchUpdateBook(List<Object[]> batchArgs);
    //批量删除
     void batchDeleteBook(List<Object[]> batchArgs);

}
@Repository
public class BookDaoImpl implements BookDao {

    //注入JDBCTemplate,将xml文件中的JDBCTEMPLATE注入进来
    @Autowired
    private JdbcTemplate jdbcTemplate;
     //添加的方法

    @Override
    public void add(Book book) {

      String sql="insert into t_spring values(?,?,?)";

      int update=jdbcTemplate.update(sql,book.getUserId(),book.getUsername(),book.getUstatus());

      System.out.println(update);//输出影响行数

    }

    @Override
    public void update(Book book) {
        String sql="update t_spring set username=?,ustatus=? where user_id=?";

        int update=jdbcTemplate.update(sql,book.getUsername(),book.getUstatus(),book.getUserId());

        System.out.println(update);//输出影响行数
    }

    @Override
    public void delete(String id) {
        String sql="delete from t_spring where user_id=?";

        int update=jdbcTemplate.update(sql,id);//无返回值填参数

        System.out.println(update);//输出影响行数
    }

    @Override
    //看表内有多少行的数据
    public int selectCount() {
        String sql="select count(*) from t_spring ";
        Integer count=jdbcTemplate.queryForObject(sql,Integer.class);//返回值的引用类型.class
        return count;
    }

    @Override

    public Book findOne(String id) {

        String sql="select*from t_spring where user_id=? ";
        //调用方法
        Book book=jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<Book>(Book.class),id);
        System.out.println(book);
        return book;
    }
    @Override
    public List<Book> findAllBook() {
        String sql = "select * from t_spring";
        //调用方法
        List<Book> bookList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));

        return bookList;
    }

    @Override
    public void batchAddBook(List<Object[]> batchArgs) {//即将多组数据一同放在batchArgs中,再一条条执行sql语句
        String sql = "insert into t_spring values(?,?,?)";

        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);

        System.out.println(Arrays.toString(ints));
    }

    @Override
    public void batchUpdateBook(List<Object[]> batchArgs) {
        String sql = "update t_spring set username=?,ustatus=? where user_id=?";
        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
        System.out.println(Arrays.toString(ints));
    }

    @Override
    public void batchDeleteBook(List<Object[]> batchArgs) {
        String sql = "delete from t_spring where user_id=?";
        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
        System.out.println(Arrays.toString(ints));
    }


}

Service层


@Service
public class BookService {

  //注入Dao

   @Autowired
    private BookDao bookDao;

   //添加方法

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


    }
    public void updateBook(Book book){
        bookDao.update(book);
    }
    public void deleteBook(String id){
        bookDao.delete(id);
    }
    //查询表记录数
    public  void  findCount(){
        bookDao.selectCount();
    }
    public void  FindOne(String id){
        bookDao.findOne(id);

    }
    //查询返回集合
    public List<Book> findAll(){
        return bookDao.findAllBook();
    }

   //批量插入
    public void batchAdd(List<Object[]> batchArgs){
        bookDao.batchAddBook(batchArgs);
    }
    //批量修改

    public  void batchUpdate(List<Object[]> batchArgs){
        bookDao.batchUpdateBook(batchArgs);
    }

    public void batchDelete(List<Object[]> batchArgs) {
        bookDao.batchDeleteBook(batchArgs);
    }

}

TEST测试方法

    @Test
    public void testJdbcTemplate(){

        ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");

        BookService bookService=context.getBean("bookService",BookService.class);
//添加操作
      /*  Book book=new Book();
       book.setUserId("2");
        book.setUsername("java");
        book.setUstatus("a");
        bookService.addBook(book);*/

      //全部查询
      /* List<Book> list=bookService.findAll();
        System.out.println(list);*/

      //更新某一行
      /*book.setUserId("1");
      book.setUsername("wc");
      book.setUstatus("GOOD");
      bookService.updateBook(book);

      //查询数据库所有行数
      bookService.findCount();*/

  //查找特定一行

   /*   bookService.FindOne("1");*/

        //删除特定一行
        /*  String id="1";
        bookService.deleteBook(id);*/

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


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


//批量删除
        List<Object[]> batchArgs = new ArrayList<>();
        Object[] o1 = {"3"};
        Object[] o2 = {"4"};
        batchArgs.add(o1);
        batchArgs.add(o2);
//调用方法实现批量删除
        bookService.batchDelete(batchArgs);
    }

}

以及需要配置的XML文件 bean1(Spring)

<?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"
       xmlns:tx="http://www.springframework.org/schema/tx"
       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
                        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!-- 组件扫描 -->
    <context:component-scan base-package="com.atguigu"></context:component-scan>

    <!-- 数据库连接池 -->
    <!-- 配置连接池 -->
    <!-- DruidDataSource dataSource = new DruidDataSource(); -->

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
          destroy-method="close">
        <property name="url" value="jdbc:mysql://localhost:3306/book" />
        <property name="username" value="root" />
        <property name="password" value="wc123456" />
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
    </bean>

<!-- JdbcTemplate对象 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <!--注入dataSource-->
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!--创建事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--注入数据源-->
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!--开启事务注解-->
    <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>

 配置的jar包,我要去学一些maven配置了,以后要学的更多,jar包导入还是比较累人的,后续的maven心得也会后续更新

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JdbcTemplateSpring框架中提供的一个类,用于执行数据库的增删改查操作。它提供了一系列的方法来执行SQL语句。其中,增删改操作使用的是`update`方法,查询操作使用的是`query`方法。 在使用JdbcTemplate进行增删改查之前,需要先配置数据源和JdbcTemplate对象。可以通过创建配置类或在Spring配置文件中进行配置。 在配置类中,可以使用`@Bean`注解创建数据源和JdbcTemplate对象,并通过`@Value`注解获取配置文件中的数据库连接信息。然后将数据源设置给JdbcTemplate对象,使其知道要操作哪个数据库。 在Spring配置文件中,可以使用`<bean>`标签配置数据源和JdbcTemplate对象。需要设置数据源的URL、用户名、密码和驱动类名,并将数据源注入给JdbcTemplate对象。 配置完成后,就可以在service类或dao类中使用JdbcTemplate对象进行增删改查操作了。可以调用JdbcTemplate的`update`方法执行增删改操作,传入SQL语句和参数。例如,`jdbcTemplate.update("INSERT INTO table_name (column1, column2) VALUES (?, ?)", value1, value2)`可以执行插入操作。 总结起来,使用JdbcTemplate进行增删改查的步骤如下: 1. 配置数据源和JdbcTemplate对象,可以通过创建配置类或在Spring配置文件中进行配置。 2. 在service类或dao类中注入JdbcTemplate对象。 3. 调用JdbcTemplate的`update`方法执行增删改操作,传入SQL语句和参数。 [1][2][3]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值