1、搭建springboot项目,加入mysql和jdbc依赖
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--jdbc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
2、在application.yml中配置数据库连接
#数据库配置
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/db_test
username: root
password: root
mysql中student表数据:
3、单元测试
如果使用的springboot版本是1.4.0之前的,需要将@SpringBootTest改为@SpringApplicationConfiguration和@WebAppConfiguration
(1)查询
从数据库中查询id为2的数据
在使用jdbctemplate的queryForObject方法查询时,如果结果集为空或者结果集size大于2,将会抛出异常,如果想在结果集为空时,返回null,需要继承jdbctemplate重写该方法。
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class JDBCTest {
@Autowired
private JdbcTemplate jdbcTemplate;//创建jdbctemplate对象,并使用spring的自动注入完成实例化
@Test
public void selectTest1() {
Student student;
String sql = "select * from student where id=?";//sql语句
Object[] params = new Object[]{2};//设置参数
//使用queryForObject方法查询,当查询结果为空或者结果size大于2时,会抛出异常
student = (Student) jdbcTemplate.queryForObject(sql, params, new RowMapper() {
//重写mapRow方法,resultSet为查询的结果集
@Override
public Object mapRow(ResultSet resultSet, int i) throws SQLException {
Student stu = new Student();
stu.setId(resultSet.getInt("id"));
stu.setAge(resultSet.getInt("age"));
stu.setName(resultSet.getString("name"));
return stu;
}
});
System.out.println(student.getId());
System.out.println(student.getAge());
System.out.println(student.getName());
}
}
输出结果
2
19
lysin
如果不想重写mapRow方法,可以使用execute方法,并创建一个PreparedStatementCallback匿名类,重写doInPrepareStatement方法,然后使用JDBC中的PreparedStatement执行查询。
@Test
public void selectTest2() {
Student student;
String sql = "select * from student where id=?";//sql语句
//使用queryForObject方法查询,当查询结果为空或者结果size大于2时,会抛出异常
student = (Student) jdbcTemplate.execute(sql,new PreparedStatementCallback(){
@Override
public Object doInPreparedStatement(PreparedStatement preparedStatement) throws SQLException, DataAccessException {
preparedStatement.setInt(1,1);//设置第一个参数为1
ResultSet resultSet=preparedStatement.executeQuery();//执行查询
if(resultSet.next()){
Student stu = new Student();
stu.setId(resultSet.getInt("id"));
stu.setAge(resultSet.getInt("age"));
stu.setName(resultSet.getString("name"));
return stu;//当查询结果有多条,也可以创建list返回
}else{
return null;
}
}
});
if(student!=null){
System.out.println(student.getId());
System.out.println(student.getAge());
System.out.println(student.getName());
}else {
System.out.println("未找到数据");
}
}
输出:
未找到数据
(2)查询
将id为2的name改为aaa
@Test
public void updateTest(){
int result=0;
String sql="update student set name=? where id=?";
Object[] params = new Object[]{"aaaaa",2};//设置参数
result=jdbcTemplate.update(sql,params);//返回受影响的行数
System.out.println(result);
}
输出结果:
1
数据库记录:
+----+------+--------+
| id | age | name |
+----+------+--------+
| 2 | 19 | aaaaa |
| 3 | 21 | wangwu |
+----+------+--------+
(3)插入
@Test
public void insertTest(){
int result=0;
String sql="insert into student(id,age,name) values(?,?,?)";
Object[] params = new Object[]{4,21,"wangwu"};//设置参数
result=jdbcTemplate.update(sql,params);//通过update方法实现插入功能
System.out.println(result);
}
+----+------+--------+
| id | age | name |
+----+------+--------+
| 2 | 19 | aaaaa |
| 3 | 21 | wangwu |
| 4 | 21 | wangwu |
+----+------+--------+
(4)删除
删除id为2的数据
@Test
public void deleteTest(){
int result=0;
String sql="delete from student where id=?";
Object[] params = new Object[]{2};//设置参数
result=jdbcTemplate.update(sql,params);//通过update方法实现插入功能
System.out.println(result);
}
+----+------+--------+
| id | age | name |
+----+------+--------+
| 3 | 21 | wangwu |
| 4 | 21 | wangwu |
+----+------+--------+
参考:
http://www.cnblogs.com/caoyc/p/5630622.html
http://blog.csdn.net/view1933/article/details/7579169
http://www.cnblogs.com/ilinuxer/p/6481228.html