首页 > 其他分享 >JdbcTemplate

JdbcTemplate

时间:2023-06-11 20:44:45浏览次数:36  
标签:Book void public book JdbcTemplate sql id

知识点1:准备

导入相关jar包;

解释:

1.第一个框是mysql连接池和连接

2.第二个框是spring里的jar引入

  • orm是其他框架,spring结合用
  • tx是处理事务的

xml配置

    <!-- 数据库连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
          destroy-method="close">
        <property name="url" value="jdbc:mysql:///user_db" />//user_db是你自己的数据库名
        <property name="username" value="root" />
        <property name="password" value="root" />
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
    </bean>

配置JdbcTemplate对象,注入DataSource


创建service类,dao类,在dao注入jdbcTemplate对象

  1. 开启扫描
    <!--开启组件扫描-->
    <context:component-scan base-package="com.gudoaxia.jdbcTemplate"></context:component-scan>
  1. service类
@Service
public class BookService {

    //注入dao
    @Autowired
    private BookDao bookDao;
}
  1. dao类
@Repository
public interface BookDao {

}

@Repository
public class BookDaoImpl implements BookDao{

    //注入JdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;
}

知识点2:添加

知识点3:修改

知识点4:查询

知识点5:批量添加

完整代码

server层

@Service
public class BookService {

    //注入dao
    @Autowired
    private BookDao bookDao;

    //添加的方法
    public void addBook(Book book){
        bookDao.add(book);
    }

    //修改的方法
    public void updateBook(Book book){
        bookDao.updateBook(book);
    }
    //删除的方法
    public void deleteBook(String id){
        bookDao.delete(id);
    }
    //4. 查询返回某个值的方法:表记录数
    public int selectCount(){
       return bookDao.selectCount();
    }
    //5. 查询返回对象
    public Book findOne(String id){
        return bookDao.findBookInfo(id);
    }
    //6. 查询返回集合
    public List<Book> findAllBook(){
        return bookDao.findAllBook();
    }
    //7. 批量操作添加
    public  void batchAdd(List<Object[]> batchArgs){
         bookDao.batchAddBook(batchArgs);
    }
}

Dao层

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

    void updateBook(Book book);

    void delete(String id);

    int selectCount();

    Book findBookInfo(String id);

    List<Book> findAllBook();

    void batchAddBook(List<Object[]> batchArgs);
}
@Repository
public class BookDaoImpl implements BookDao{

    //注入JdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;

    //1. 添加的方法
    @Override
    public void add(Book book) {

        String sql = "insert into t_book values(?,?,?)";
        Object[] args = {book.getUserId(), book.getUserName(), book.getUserStatus()};

        int update = jdbcTemplate.update(sql, args);
        System.out.println("添加成功,添加了"+update+"行");
    }
    //2. 修改的方法
    @Override
    public void updateBook(Book book) {

        String sql = "update t_book set name=?,status=? where id=?";
        Object[] args = {book.getUserName(),book.getUserStatus(),book.getUserId()};
        int update = jdbcTemplate.update(sql, args);
        System.out.println("修改成功,修改了"+update+"行");

    }
    //3. 删除的方法
    @Override
    public void delete(String id) {
        String sql ="delete from t_book where id=?";
        jdbcTemplate.update(sql,id);
    }
    //4. 查询返回某个值的方法
    @Override
    public int selectCount() {
        String sql ="select count(*) from t_book";
        Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
        return count;
    }
    //5. 查询返回对象
    @Override
    public Book findBookInfo(String id) {
        String sql = "select id as userId,name as userName,status as userStatus from t_book where id=?";
        //第二参数:RowMapper接口,针对返回不同数据类型数据,用于数据封装,即封装sql语句。
        Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);
        return book;
    }
    //6. 查询返回集合
    @Override
    public List<Book> findAllBook() {
        String sql ="select id as userId,name as userName,status as userStatus from t_book";
        List<Book> bookList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));

        return bookList;
    }
    //7. 批量操作
    @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));
    }
}

测试

public class testJdbcDemo {

    @Test
    public void testJdbc(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean.xml");
        BookService bookService = context.getBean("bookService", BookService.class);
//        //添加
//        Book book = new Book();
//        book.setUserId("2");
//        book.setUserName("Spring6");
//        book.setUserStatus("a");
//        bookService.addBook(book);

//        //修改:根据id修改
//        Book book2 = new Book();
//        book2.setUserId("1");
//        book2.setUserName("JavaWeb");
//        book2.setUserStatus("a");
//        bookService.updateBook(book2);

//        //删除
//        bookService.deleteBook("2");
//          //查询返回某个值
//        int i = bookService.selectCount();
//        System.out.println("返回查询数量:"+i);
//        //查询返回对象
//        Book one = bookService.findOne("1");
//        System.out.println(one);
//        //查询返回集合
//        List<Book> allBook = bookService.findAllBook();
//        System.out.println(allBook);

        //批量添加
        ArrayList<Object[]> batchArgs = new ArrayList<>();
        Object[] o1 = {"2","Java","a"};
        Object[] o2 = {"3","C++","a"};
        Object[] o3 = {"4","Mysql","a"};
        batchArgs.add(o1);
        batchArgs.add(o2);
        batchArgs.add(o3);

        bookService.batchAdd(batchArgs);
    }
}

总结:

  1. 使用JdbcTemplate准备工作:
  • jar包,德鲁伊连接池,xml的jdbcTemplate的dataSource注入
  1. crud环节:
  • 添加:使用setX方法添加;
  • 修改:根据id修改;
  • 删除:根据id删除;
  • 查询:查询某个值;查询获取某个对象;查询获取多个对象;
  • 批量增加:batchUpdate(sql,batchArgs):batchArgs为Object类型的集合;
  1. 在server层编写方法,对外部暴露调用;在server层的方法实际调用的是:dao层接口的实现类的方法,具体的业务逻辑在实现类中具体编写。
JdbcTemplate 方法 参数说明
添加 update(sql, args) args占位符
修改 update(sql, args) args占位符
删除 update(sql,id) args占位符
查询count* queryForObject(sql, Integer.class) 第二参数为查询返回类型类
查询一条记录 queryForObject(sql, new BeanPropertyRowMapper(Book.class), id 第二参数为sql数据封装
查询多条记录 query(sql, new BeanPropertyRowMapper(Book.class)) 第二参数为sql数据封装
批量添加 batchUpdate(sql,batchArgs) 第二参数为要批量添加的行行记录,通常为数组类型的集合。

debug


准备环节

bug1:

问题:使用注解autowired 注入jdbctemplate , 代码爆红,无法注入的解决。

解决思路:可能是xml配置文件的注入dataSource出错,在<property name="dataSource" ref="dataSource"></property>上的光标XML tag has empty body,说明这里出错。

解决:改为<property name="dataSource" ref="dataSource" />

总结:idea太过智能便捷,导致导入标签错误。这里应该使用单标签,进行获取jdbctemplate 对象。

标签:Book,void,public,book,JdbcTemplate,sql,id
From: https://www.cnblogs.com/container-simple/p/17473551.html

相关文章

  • jdbcTemplate
    1. 基本介绍  81 JdbcTemplate是Spring提供的一个JDBC模板类,是对JDBC的封装,简化JDBC代码。当然,你也可以不用,可以让Spring集成其它的ORM框架,例如:MyBatis、Hibernate等。接下来我们简单来学习一下,使用JdbcTemplate完成增删改查。2. 环境准备2.1 新建数据库spring6  81数据库......
  • spring jdbcTemplate使用
    参考:springjdbcTemplate使用[url]http://log-cd.iteye.com/blog/215059[/url]SpringJdbcTemplate与事务管理学习[url]http://www.iteye.com/topic/480432[/url]SimpleJdbcTemplate在spring3.1已经过时了,我就改为使用jdbcTemplate和namedParameterJdbcOperations写sql查询......
  • JdbcTemplate 开启事务
    JdbcTemplatejdbcTemplate=newJdbcTemplate();//获取DataSourceDataSourcedataSource=jdbcTemplate.getDataSource();//获取ConnectionConnectionconnection=DataSourceUtils.getConnection(dataSource);//关闭jdbc自动提交connection.setAutoCommit(false);try{/......
  • Druid 查询超时配置的探究 → DataSource 和 JdbcTemplate 的 queryTimeout 到底谁生
    前情回顾还记得记一次Druid超时配置的问题→引发对Druid时间配置项的探究遗留的问题吗?如果同时设置 DataSource 的 queryTimeout 和 JdbcTemplate 的 queryTimeout ,那么哪个 queryTimeout 生效?实践出结果想快速知道答案,做法很简单,两个都设置,看生......
  • Spring17_JdbcTemplate基本使用12
    一、概述(了解)JdbcTemplate是spring框架中提供的一个对象,是对原始繁琐的JdbcAPI对象的简单封装。spring框架为我们提供了很多的操作模板类。例如:操作关系型数据的JdbcTemplate和HibernateTemplate,操作nosql数据库的 RedisTemplate,操作消息队列的JmsTemplate等等。......
  • jeecgboot整合JdbcTemplate方便多表联合查询
    感觉jeecgboot处理复杂的多表联合查询有点费劲,就自己实现了JdbcTemplate的整合,其实也不是整合吧,因为jeecgboot已经把JdbcTemplate整合进来了。我查了下项目的依赖关系,发现jeecg-boot-base-core模块依赖了mybatis-plus-boot-starter,而mybatis-plus-boot-starter依赖了spri......
  • jdbcTemplate 获取表字段名称(支持表内无数据获取)
    最近有项目用到多数据源之间的SQL配置,要获取某个数据源的字段名称,网上查了下。好多都是要库里至少有一条数据才能拿到,自己摸索写了一下。MYSQL测试能正常获取,其他类型数据库待测试。List<String>columns=newArrayList<>();ResultSetMetaDataresultSetMetaData=jdbcTemp......
  • Spring中使用JdbcTemplate操作数据库
    JDBC是Java提供的一种用于执行SQL语句的API,可以对多种关系型数据库(例如MySQL、Oracle等)进行访问。但在实际的企业级应用开发中,却很少有人直接使用原生的JDBCAPI......
  • poi 导入excel (懒人拷贝代码用)(jdbctemplate)oms版本
     相关内容:1,jdbcTemplate批量导入2,js原始产生form动态产生文件选择框3,反射机制调用set方法 <divclass="l-bar-separator"></div><divclass="group"><aclass="linkad......
  • DataSource,DriverManger,Driver和JdbcTemplate
    JDBC1.0使用DriverManager类来产生一个对数据源的连接,相对于DriverManager,JDBC2.0提供的DataSource接口是一个更好的连接数据源的方法。DataSource相比于前者无需硬性编码......