JSQLException学生信息维护(案例09)
通过Spring JdbcTemplate技术,可完成对学生信息的添加、更新、删除、单条检索以及全部数据查询等操作,并支持对MySQL数据库进行相关处理。学生信息包含主键标识、姓名及年龄等基本属性。
1. 数据初始化
建立名为student的数据库
create database student default charset utf8 collate utf8_general_ci;
构建t_student数据表
create table t_student ( id varchar(32) not null, name varchar(255), age int );
对数据进行初始设置
insert into t_student values("1","lucy",19); insert into t_student values("2","lili",20);
2. 创建项目
建立一个Java开发项目,该项目的命名应为spring-jdbc。
3. 导入Spring相关jar包
在spring-jdbc项目中,需建立一个名为lib的文件夹,并将所需的Jar包导入至该目录:
基础组件包
spring-core-5.3.25.jar、
spring-beans-5.3.25.jar、
spring-context-5.3.25.jar、
spring-expression-5.3.25.jar
面向切面编程相关包
spring-aop-5.3.25.jar
数据库操作相关包
spring-jdbc-5.3.25.jar、
spring-tx-5.3.25.jar、
mysql-connector-java-8.0.27.jar、
druid-1.2.8.jar
测试工具包
junit-4.6.jar
其他依赖库
commons-logging-1.2.jar
4. 创建Spring配置文件
在src目录中生成一个名为applicationContext.xml的配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--开启注解-->
<context:component-scan base-package="com.wfit"/>
<!--配置数据源-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<!--mysql驱动-->
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<!--连接数据库的url-->
<property name="url" value="jdbc:mysql://localhost:3306/student"/>
<!--用户名-->
<property name="username" value="root"/>
<!--密码-->
<property name="password" value="123456"/>
</bean>
<!--配置JdbcTemplate-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--注入dataSource-->
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
5. 创建Student实体类
在src目录中建立com.wfit.entity包,并在该包目录内生成Student.java类文件。
public class Student {
//主键id
private String id;
//姓名
private String name;
//年龄
private int age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
6. 创建StudentDao类
在src目录中建立com.wfit.dao文件夹,并在该文件夹内部生成StudentDao.java源代码文件。
@Repository
public class StudentDao {
/*
注入jdbcTemplate
*/
@Autowired
private JdbcTemplate jdbcTemplate;
/** * 新增
* @param student
*/
public void addStudent(Student student){
String sql = "insert into t_student values(?,?,?)";
Object[] args = {student.getId(), student.getName(), student.getAge()};
jdbcTemplate.update(sql,args);
System.out.println("新增数据成功!");
}
/** * 修改
* @param student
*/
public void updateStudent(Student student){
String sql = "update t_student set name = ?,age = ? where id = ?";
Object[] args = {student.getName(),student.getAge(),student.getId()};
jdbcTemplate.update(sql,args);
System.out.println("修改数据成功!");
}
/** * 删除
* @param id
*/
public void delStudent(String id){
String sql = "delete from t_student where id = ?";
jdbcTemplate.update(sql,id);
System.out.println("删除数据成功!");
}
/** * 查询单个
* @param id
* @return
*/
public Student queryStudent(String id){
String sql = "select * from t_student where id = ?";
Student student = null;
try{
student = jdbcTemplate.queryForObject(sql,
new BeanPropertyRowMapper<Student>(Student.class), id);
}catch(Exception e){
System.out.println("查询异常:" + e.getMessage());
}
return student;
}
/** * 查询所有
* @return
*/
public List<Student> queryStudentAll(){
String sql = "select * from t_student";
List<Student> studentList = jdbcTemplate.query(sql,
new BeanPropertyRowMapper<Student>(Student.class));
return studentList;
}
}
7. 创建StudentService接口
在src目录中建立com.wfit.service文件夹,并在该文件夹内生成StudentService.java接口文件。
public interface StudentService {
public void addStudent(Student student);
public void updateStudent(Student student);
public void delStudent(String id);
public Student queryStudent(String id);
public List<Student> queryStudentAll();
}
8. 创建StudentServiceImpl类
在src目录中建立名为com.wfit.service.impl的包结构,并在该包内生成StudentServiceImpl.java文件,用以具体实现StudentService接口所定义的功能。
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentDao studentDao;
/** * 新增
* @param student
*/
@Override
public void addStudent(Student student) {
studentDao.addStudent(student);
}
/** * 修改
* @param student
*/
@Override
public void updateStudent(Student student) {
studentDao.updateStudent(student);
}
/** * 删除
* @param id
*/
@Override
public void delStudent(String id) {
studentDao.delStudent(id);
}
/** * 查询单个
* @param id
* @return
*/
@Override
public Student queryStudent(String id) {
return studentDao.queryStudent(id);
}
/** * 查询所有
* @return
*/
@Override
public List<Student> queryStudentAll() {
return studentDao.queryStudentAll();
}
}
9. 编写测试类
在src目录中建立名为com.wfit.test的包结构,并在该包内部生成一个名为StudentTest.java的类文件。
public class StudentTest {
private StudentService studentService;
@Before
public void init(){
ApplicationContext context =
new ClassPathXmlApplicationContext("applicationContext.xml");
studentService = context.getBean("studentServiceImpl", StudentService.class);
}
/** * 测试新增
*/
@Test
public void testAdd(){
Student student = new Student();
student.setId("3");
student.setName("zhangsan");
student.setAge(20);
studentService.addStudent(student);
}
/** * 测试修改
*/
@Test
public void testUpdate(){
Student student = new Student();
student.setId("3");
student.setName("lisi");
student.setAge(19);
studentService.updateStudent(student);
}
/** * 测试删除
*/
@Test
public void testDel(){
String id = "3";
studentService.delStudent("3");
}
/** * 测试查询
*/
@Test
public void testQuery(){
Student student = studentService.queryStudent("1");
System.out.println(student);
}
/** * 测试查询所有
*/
@Test
public void testQueryAll(){
List<Student> studentList = studentService.queryStudentAll();
System.out.println(studentList);
}
}
10. 执行结果
实施testAdd测试后所获得的结果


执行testUpdate操作后的测试结果


对testDel进行执行后所获得的结果


对testQuery进行执行后所获得的结果

完成testQueryAll操作后的执行结果

