Spring的JdbcTemplate操作数据库
1、数据库结构
2、引入相关 jar 包
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.10</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.10</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
3、在 spring 配置文件配置数据库连接池
<!-- 开启组件扫描 -->
<context:component-scan base-package="com.workhah"/>
<!-- 数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<property name="username" value="root"/>
<property name="password" value="123123"/>
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT&useSSL=false&allowPublicKeyRetrieval=true"/>
</bean>
4、配置JdbcTemplate对象,注入 dataSource
<!-- JdbcTemplate对象 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
5、实体类
public class User {
private Integer id;
private String name;
private String pwd;
setter和getter....
}
6、创建 service 和 dao 类
public interface UserDao {
}
@Repository
public class UserDaoImpl implements UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
}
@Service
public class UserService {
@Autowired
private UserDao userDao;
}
7、数据库操作
(1)增删改
public int update(String sql,
@Nullable Object... args)
- 第一个参数:sql 语句
- 第二个参数:替换 sql 语句的通配符 ?
@Repository
public class UserDaoImpl implements UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void addUser(User user) {
//1 创建 sql 语句
String sql = "insert into user(name,pwd) values(?,?)";
//2 调用方法实现
Object[] obj = {user.getName(), user.getId()};
return jdbcTemplate.update(sql, obj);
}
@Override
public int updateaUser(User user) {
String sql = "update user set name = ? where id = ?";
Object[] obj = {user.getName(), user.getId()};
return jdbcTemplate.update(sql, obj);
}
@Override
public int deleteUser(User user) {
String sql = "delete from user where id = ?";
Object[] obj = {user.getId()};
return jdbcTemplate.update(sql, obj);
}
}
(2)查询返回某个值
public <T> T queryForObject(String sql,
Class<T> requiredType)
public <T> T queryForObject(String sql,
Class<T> requiredType,
@Nullable Object... args)
- 第一个参数:sql 语句
- 第二个参数:返回类型
- 第三个参数:替换 sql 语句的通配符 ?
@Override
public int getCount() {
String sql = "select count(*) from user";
return jdbcTemplate.queryForObject(sql, Integer.class);
}
@Override
public String getUserName(int id) {
String sql = "select name from user where id = ?";
return jdbcTemplate.queryForObject(sql, String.class,id);
}
(3)查询返回对象
public <T> T queryForObject(String sql,
org.springframework.jdbc.core.RowMapper<T> rowMapper,
@Nullable Object... args)
- 第一个参数:sql 语句
- 第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成
数据封装 - 第三个参数:替换 sql 语句的通配符 ?
@Override
public User getUser(int id) {
String sql = "select * from user where id = ?";
return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class),id);
}
(4)查询返回集合
public <T> java.util.List<T> query(String sql,
org.springframework.jdbc.core.RowMapper<T> rowMapper)
public <T> java.util.List<T> query(String sql,
org.springframework.jdbc.core.RowMapper<T> rowMapper,
@Nullable Object... args)
- 第一个参数:sql 语句
- 第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成
数据封装 - 第三个参数:替换 sql 语句的通配符 ?
@Override
public List<User> getUserList() {
String sql = "select * from user";
//调用方法
List<User> userList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
return useList;
}
(5)批量处理
public int[] batchUpdate(String sql,
java.util.List<Object[]> batchArgs)
- 第一个参数:sql 语句
- 第二个参数:添加多条记录数据
@Override
public int[] batchAdd(List<Object[]> args) {
String sql = "insert into user(name,pwd) values(?,?)";
return jdbcTemplate.batchUpdate(sql, args);
}
测试
@Test
public void test2() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
UserService service = context.getBean("userService", UserService.class);
List<Object[]> list = new ArrayList<>();
list.add(new Object[]{"abc", "123"});
list.add(new Object[]{"deg", "123"});
int[] ints = service.batchAdd(list);
System.out.println(Arrays.toString(ints));
}