本文将使用JdbcTemplate来实现对数据库的一些基本操作。
目录
概念与准备工作
概念:Spring对Jdbc进行了封装,使用JdbcTemplate方便实现对数据库的操作
准备工作:
①:引入相关jar包
对应Maven地址
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency>
②:在spring配置文件中配置数据库连接池(具体实现可看IOC学习笔记)
③:配置JdbcTemplate对象,注入DataSource
<!--JdbcTemplate对象-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--注入dataSource-->
<property name="dataSource" ref="dataSource"></property>
</bean>
④:创建service类,创建dao类,在dao注入jdbcTemplate对象
注意:需要开启组件扫描
service
@Service
public class UserService {
//注入dao
@Autowired
private UserDao userDao;
}
dao
@Repository
public class UserDaoImp implements UserDao {
//注入JdbcTemplate
@Autowired
private JdbcTemplate jdbcTemplate;
}
创建相应数据库
CREATE DATABASE user_db
CREATE TABLE t_user(
user_id BIGINT(20),
username VARCHAR(100),
ustatus VARCHAR(50)
)
JdbcTemplate操作数据库(添加、修改、删除操作)
对应数据库表创建实体类
public class User {
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) {
Ustatus = ustatus;
}
}
编写service和dao
在service中创建添加用户的方法
//添加User的方法
public void addBook(User user){
userDao.add(user);
}
在dao实现add方法并进行数据库添加操作
调用 JdbcTemplate 对象里面的 update 方法可以实现添加操作
方法由两个参数:
①:sql语句
②:可变参数,设置sql语句的值(可将可变参数放在数组里,将数组传进方法里;也可以直接放在方法中)
@Override
public void add(User user) {
//创建 sql 语句
String sql = "insert into t_user values (?,?,?)";
//创建可变参数值
Object[] args = {user.getUserId(), user.getUsername(), user.getUstatus()};
// int update = jdbcTemplate.update(sql, user.getUserId(), user.getUsername(), user.getUstatus());
int update = jdbcTemplate.update(sql, args);
System.out.println(update);
}
编写测试代码
@Test
public void testJdbcTemplate(){
ApplicationContext context = new FileSystemXmlApplicationContext("G:\\SpringStudy\\Spring-JdbcTemplate\\src\\bean1.xml");
UserService userService = context.getBean("userService", UserService.class);
User user = new User();
user.setUserId("201911111111");
user.setUsername("李嘉fai");
user.setUstatus("失信");
userService.addUser(user);
}
结果
修改和删除方法基本一致
@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);
}
@Override
public void delete(String id) {
String sql = "delete from t_user where user_id=?";
int update = jdbcTemplate.update(sql, id);
System.out.println(update);
}
修改测试
//修改
User user = new User();
user.setUserId("201911111111");
user.setUsername("fai gay");
user.setUstatus("严重失信");
userService.updateUser(user);
删除测试
//删除
String id = "201911111111";
userService.deleteUser(id);
JdbcTempate操作数据库(查询)
查询返回某个值
查询表里面由多少条记录,使用 queryForObject 方法
两个参数
①:sql语句
②:返回值类型的 Class
查询方法
@Override
public int selectCount() {
String sql = "select count(*) from t_user";
Integer integer = jdbcTemplate.queryForObject(sql, Integer.class);
return integer;
}
测试
//查询条数
System.out.println("一共 " + userService.findCount() + " 条");
查询返回对象
查询用户的详细信息,使用如下方法
三个参数
①:sql语句
②:RowMapper(接口,返回不同类型的数据,使用这个接口里面的实现类完成数据封装)
③:可变参数
查询方法
@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;
}
测试
//查询表中User
System.out.println(userService.findOne("201911111111"));
查询返回集合
查询用户列表分页,使用 query 方法
三个参数
①:sql语句
②:RowMapper(接口,返回不同类型的数据,使用这个接口里面的实现类完成数据封装)
③:可变参数
查询方法
@Override
public List<User> findAllUser() {
String sql = "select * from t_user";
List<User> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class));
return query;
}
测试
//查询用户列表
System.out.println(userService.findAll("201911111111"));
JdbcTemplate操作数据库(批量操作)
批量操作:操作表里面的多条记录,使用如下方法
参数
①: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));
}
测试
//批量添加
List<Object[]> list = new ArrayList<>();
Object[] u1 = {"2019000000","369","酒桶像坨s"};
Object[] u2 = {"2019222222","wink","#wink状态"};
Object[] u3 = {"2019333333","Rookie","尽力了"};
list.add(u1);
list.add(u2);
list.add(u3);
userService.batchAdd(list);
批量修改方法
@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));
}
测试
//批量修改
List<Object[]> list = new ArrayList<>();
Object[] u1 = {"JDG.369","叛逆期了","2019000000"};
Object[] u2 = {"IG.wink","wink在干嘛","2019222222"};
Object[] u3 = {"V5.Rookie","Rookie尽力了","2019333333"};
list.add(u1);
list.add(u2);
list.add(u3);
userService.batchUpdate(list);
批量删除方法
@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));
}
测试
//批量删除
List<Object[]> list = new ArrayList<>();
Object[] u1 = {"2019000000"};
Object[] u2 = {"2019222222"};
Object[] u3 = {"2019333333"};
list.add(u1);
list.add(u2);
list.add(u3);
userService.batchDelete(list);