JdbcTemplate(概念和准备)
-
什么是 JdbcTemplate?
Spring 框架对 JDBC 进行分封装,使用 JdbcTemplate 方便实现对数据库操作
-
准备工作
-
引入相关 jar 包
-
在 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://localhost:3306/user_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"/> <property name="username" value="root"/> <property name="password" value="mysql700"/> </bean>
-
配置 JdbcTemplate 对象,注入 DataSource
<!--创建JdbcTemplate对象--> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <!--注入DataSource--> <property name="dataSource" ref="dataSource"/> </bean>
-
创建 service 类和 dao 类,在 dao 注入 JdbcTemplate 对象
配置文件中开启组件扫描
<!--开启组件扫描--> <context:component-scan base-package="com.demo1.Spring5"/>
service类
@Service public class UserService { //注入dao @Autowired private UserDao userDao; }
dao类
@Repository public class UserDaoImpl implements UserDao { //注入JdbcTemplate @Autowired private JdbcTemplate jdbcTemplate; }
-
JdbcTemplate 操作数据库(添加)
-
对应数据库创建实体类
public class User { private String userId; private String username; private String ustatus; public void setUserId(String userId) { this.userId = userId; } public String getUsername() { return username; } //此处写所有属性的 get 和 set 方法,略 }
-
编写 service 和 dao
1)在 dao 进行数据库添加操作
2)调用 JdbcTemplate 对象里面 update 方法实现添加操作
update(String sql,Object...args)
-
第一个参数:sql 语句
-
第二个参数:可变参数,设置 sql 语句值
@Repository public class UserDaoImpl implements UserDao { //注入JdbcTemplate @Autowired private JdbcTemplate jdbcTemplate; //添加的方法 @Override public void add(User user) { //1 创建sql语句 String sql = "insert into t_user values(?,?,?)"; //2 调用方法实现 Object[] args = {user.getUserId(),user.getUsername(),user.getUstatus()}; int update = jdbcTemplate.update(sql,args); System.out.println("成功添加了 "+update+" 行数据。"); } }
-
JdbcTemplate 操作数据库(修改)
//修改的方法
@Override
public void update(User user) {
String sql = "update t_user set username=?,ustatus=? where user_id=?";
Object[] args = {user.getUsername(),user.getUstatus(),user.getUserId()};
int update = jdbcTemplate.update(sql,args);
System.out.println("成功修改了 "+update+" 行数据。");
}
JdbcTemplate 操作数据库(删除)
//删除的方法
@Override
public void delete(String userId) {
String sql = "delete from t_user where user_id=?";
int update = jdbcTemplate.update(sql,userId);
System.out.println("成功删除了 "+update+" 行数据。");
}
JdbcTemplate 操作数据库(查询返回某个值)
-
场景:查询表里面有多少条记录,返回是某个值
-
使用 JdbcTemplate 实现查询返回某个值的代码
queryForObject(String sql,Class<T> requiredType)
- 第一个参数:sql 语句
- 第二个参数:返回类型 Class
//查询表记录数 @Override public int selectCount() { String sql = "select count(*) from t_user"; Integer count = jdbcTemplate.queryForObject(sql,Integer.class); return count; }
JdbcTemplate 操作数据库(查询返回对象)
-
场景:查询用户详情
-
使用 JdbcTemplate 实现查询返回对象
queryForObject(String sql, RowMapper<T> rowMapper, Object...args)
- 第一个参数:sql 语句
- 第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面的实现类完成数据封装
- 第三个参数:sql语句值
//查询,返回对象 @Override public User findUserInfo(String id) { String sql = "select * from t_user where user_id=?"; //调用方法 User user = jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),id); return user; }
JdbcTemplate 操作数据库(查询返回集合)
-
场景:查询用户列表,分页…
-
调用 JdbcTemplate 实现查询返回集合
query(String sql, RowMapper<T> rowMapper, Object...args)
- 第一个参数:sql 语句
- 第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面的实现类完成数据封装
- 第三个参数:sql语句值
//查询,返回集合 @Override public List<User> findAllInfo() { String sql = "select * from t_user"; List<User> userList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class)); return userList; }
JdbcTemplate 操作数据库(批量操作)
批量操作:操作表里面多条记录
-
JdbcTemplate 实现批量添加操作
调用方法
batchUpadte(String sql, List<Object[]> batchArgs)
- 第一个参数:sql 语句
- 第二个参数:List 集合,添加多条记录数据
//批量添加 @Override public void batchAddUser(List<Object[]> batchArgs) { String sql = "insert into t_user values(?,?,?)"; int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs); System.out.println(Arrays.toString(ints)); }
-
JdbcTemplate 实现批量修改操作
//批量修改 @Override public void batchUpdateUser(List<Object[]> batchArgs) { String sql = "update t_user set username=?,ustatus=? where user_id=?"; int[] ints = jdbcTemplate.batchUpdate(sql,batchArgs); System.out.println(Arrays.toString(ints)); }
-
JdbcTemplate 实现批量删除操作
//批量删除 @Override public void batchDeleteUser(List<Object[]> batchArgs) { String sql = "delete from t_user where user_id=?"; int[] ints = jdbcTemplate.batchUpdate(sql,batchArgs); System.out.println(Arrays.toString(ints)); }