概述以及准备工作
什么JDBCTemplate
Spring框架对JDBC进行了封装,使用JDBCTemplate可以很方便的实现对数据库的操作
准备工作
引入相关的依赖
<!--事务--><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.2.9.RELEASE</version></dependency><!--JDBCTemplate--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.9.RELEASE</version></dependency><!--连接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version></dependency><!--mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.20</version></dependency><!--整合Thymlef或者Mybatis--><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>5.0.2.RELEASE</version></dependency>
2.在spring的配置文件中配置连接池
<!--数据库连接池--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://47.93.182.140:3306/qingcheng_goods?serverTimezone=GMT%2B8&useSSL=false"/><property name="username" value="root"/><property name="password" value="123456"/></bean>
3.配置JDBCTemplate对象,注入DataSource
<!--JDBCTemplate--><bean id="JdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><!--注入dataSource--><property name="dataSource" ref="dataSource"/></bean>
4.创建service类,创建dao类,在dao注入JdbcTemplate对象
配置文件<!--开启组件扫描--><context:component-scan base-package="com.ranin"></context:component-scan>
Service
@Servicepublic class BookServiceImpl implements BookService {//注入dao@Resourceprivate BookDao bookDao;}
Dao
@Repositorypublic class BookDaoImpl implements BookDao {//注入JdbcTemplate@Resourceprivate JdbcTemplate jdbcTemplate;}
JDBCTemplate操作数据库
添加
1.对应数据库创建实体类
2.编写service和dao
1.在dao进行数据库添加操作
2.调用JdbcTemplate对象里面update方法实现update(String sql,Object args)
(1)里面有两个参数
(2)第一个参数:sql语句
(3)第二个参数:可变参数,设置sql语句的值@Repositorypublic class BookDaoImpl implements BookDao {//注入JdbcTemplate@Resourceprivate JdbcTemplate jdbcTemplate;//添加的方法public void addUser(User user) {String sql = "insert into t_user values(?,?,?)";//创建可变参数数组Object[] args = {user.getUser_id(),user.getUsername(),user.getUstatus()};int update = jdbcTemplate.update(sql,args);if(update == 1){System.out.println("插入成功");}}}
测试添加
@Testpublic void test1(){ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");BookService bookService = context.getBean("bookServiceImpl", BookServiceImpl.class);User user = new User();user.setUser_id(1);user.setUsername("张三");user.setUstatus("好");bookService.addBook(user);}
JdbcTemplate操作数据库(修改和删除)
在service中创建两个方法一个修改一个删除
//修改方法public void updateBook(User user) {String sql = "update t_user set username=?,ustatus=? where user_id=?";Object[] args = {user.getUsername(),user.getUstatus(),user.getUser_id()};int update = jdbcTemplate.update(sql, args);if(update == 1){System.out.println("修改成功");}}//删除方法public void deleteBook(Integer uid) {String sql = "delete from t_user where user_id = ?";int update = jdbcTemplate.update(sql, uid);if(update == 1)System.out.println("删除成功");}
测试
@Testpublic void test2(){ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");BookService bookService = context.getBean("bookServiceImpl", BookServiceImpl.class);//修改User user = new User();user.setUser_id(1);user.setUsername("张3");user.setUstatus("a");bookService.updateUser(user);bookService.deleteBook(1);}
JdbcTemplate操作数据库(查询)
查询返回某个值
1.查询表里有多少条数据,返回是某个值
2.使用JDBCTemplate实现查询返回某个值代码
queryForObject(String sql.ClassrequireedType)
1.有两个参数
2.第一个参数:sql语句
3.第二个参数:返回类型Class@Testpublic void test3(){ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");BookService bookService = context.getBean("bookServiceImpl", BookServiceImpl.class);bookService.findCount();}
查询返回对象
1.场景:查询图书详情
2.JdbcTemplate实现查询返回对象
queryForObject(String sql,RowMapperrowMapper,Object….args)
1.有三个参数
2.第一个参数:sql语句
3.第二个参数:RowMapper,是接口,返回不同类型的数据,使用这个接口里面实现类完成数据封装
4.第三个参数:sql语句中的值User user = jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),id);
查询返回集合
1.场景:查询图书列表分页
2.调用JDBCTemplate方法实现查询返回集合
query(String sql.RowMapperrowMapper,Object..args)
1.有三个参数
2.第一个参数:sql语句
3.第二个参数:RowMapper
4.第三个参数:sql语句中的值List<User> list = jdbcTemplate.query(sql,new BeanPropertyRowMapper<User>(User.class));
批量操作
批量添加
1.批量操作:操作表里面多条数据
2.JdbcTemplate实现批量添加操作
batchUpdate(String sql,List//批量添加public void batchAddUser(List<Object[]> batchArgs) {String sql = "insert into t_user values(?,?,?)";int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);System.out.println(ints);}
测试
@Testpublic void test5(){ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");BookService bookService = context.getBean("bookServiceImpl",BookServiceImpl.class);List<Object[]> batchArgs = new ArrayList<>();Object[] o1 = {2,"java","a"};Object[] o2 = {3,"c","c"};Object[] o3 = {4,"c++","c"};batchArgs.add(o1);batchArgs.add(o2);batchArgs.add(o3);bookService.batchAdd(batchArgs);}
批量修改
实现批量修改
public void batchUpdate(List<Object[]> batchArgs) {String sql = "update t_user set username=?,ustatus=? where user_id=?";int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);System.out.println(ints);}
测试
@Testpublic void test6(){ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");BookService bookService = context.getBean("bookServiceImpl",BookServiceImpl.class);List<Object[]> batchArgs = new ArrayList<>();Object[] o1 = {"j","a",2};Object[] o2 = {"c++","c",3};Object[] o3 = {"c","c",4};batchArgs.add(o1);batchArgs.add(o2);batchArgs.add(o3);bookService.batchUpdate(batchArgs);}
批量删除
public void batchDelete(List<Object[]> batchArgs) {String sql = "delete from t_user where user_id=?";int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);System.out.println(ints);}
测试
@Testpublic void test7(){ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");BookService bookService = context.getBean("bookServiceImpl",BookServiceImpl.class);List<Object[]> batchArgs = new ArrayList<>();Object[] o1 = {2};Object[] o2 = {3};Object[] o3 = {4};batchArgs.add(o1);batchArgs.add(o2);batchArgs.add(o3);bookService.batchDelete(batchArgs);}
