@Service @Transactional(rollbackFor = Exception.class) public class StudentServiceImpl implements StudentService { @Resource private StudentInfoMapper studentInfoMapper; @Override public StudentInfo studentLogin(String studentTel, String studentPwd) { return studentInfoMapper.selectByTelAndPwd(studentTel, studentPwd); } @Override public int studentReg(StudentInfo studentInfo) { return studentInfoMapper.insertStudent(studentInfo); } @Override public int updStudent(String studentId, String studentName, String studentTel, String studentPwd, String studentcard, String studentEmail) { int intid = Integer.valueOf(studentId); return studentInfoMapper.updStudent(intid, studentName, studentTel, studentPwd, studentcard, studentEmail); } @Override public int getStudentCount(String studentTel) { return studentInfoMapper.selectCountByTel(studentTel); } @Override public int getStudentcount(String studentCard) { return studentInfoMapper.selectCountByCard(studentCard); }
时间: 2024-04-28 12:26:43 浏览: 100
这段代码是关于学生信息管理的服务实现类,其中包括学生登录、注册、信息修改等功能的实现。使用了@Transactional注解来保证事务的一致性,若在操作中发生异常则会进行回滚。同时使用了@Resource注解来进行依赖注入,将StudentInfoMapper接口注入到该服务实现类中。这段代码中的方法名和参数都表明了该服务实现类的功能,例如studentLogin用于学生登录,getStudentCount用于获取学生的数量等。
相关问题
1. 编写一个程序,采用JdbcTemplate创建一个数据表student,有一下字段: stuno(学号,主键,设为数据库自增),stuname(姓名),birthday(生日),gender(性别),score(成绩)。 2. 向student表中插入5条记录,记录数据自定,数据要合理、正确。 3. 将student表中最后一条记录的score的值改为377。 4. 查询出性别是女的生日在7月份的同学。 5. 分别采用基于XML的和基于Annotation方式的声明式事务管理,删除student表中所有score大于200的记录。若人为加入异常,查看student表中记录情况;若没有发生异常,观察student表中数据情况。
由于这是一个较为复杂的问题,需要涉及到数据库的创建、插入、修改、查询以及事务管理等多个方面的知识。我将大致地给出实现方案,具体的实现方法可以根据你的具体情况进行调整。
1. 创建student表
```sql
CREATE TABLE student (
stuno INT PRIMARY KEY AUTO_INCREMENT,
stuname VARCHAR(20),
birthday DATE,
gender CHAR(1),
score INT
);
```
2. 向student表中插入5条记录
```java
public class StudentDAO {
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public void insertStudents() {
String sql = "INSERT INTO student (stuname, birthday, gender, score) VALUES (?, ?, ?, ?)";
Object[] params1 = {"张三", Date.valueOf("2000-01-01"), "男", 80};
Object[] params2 = {"李四", Date.valueOf("2001-02-02"), "女", 90};
Object[] params3 = {"王五", Date.valueOf("2002-03-03"), "男", 85};
Object[] params4 = {"赵六", Date.valueOf("2003-04-04"), "女", 95};
Object[] params5 = {"钱七", Date.valueOf("2004-05-05"), "男", 88};
jdbcTemplate.update(sql, params1);
jdbcTemplate.update(sql, params2);
jdbcTemplate.update(sql, params3);
jdbcTemplate.update(sql, params4);
jdbcTemplate.update(sql, params5);
}
}
```
3. 将student表中最后一条记录的score的值改为377
```java
public void updateStudentScore() {
String sql = "UPDATE student SET score = ? WHERE stuno = (SELECT MAX(stuno) FROM student)";
jdbcTemplate.update(sql, 377);
}
```
4. 查询出性别是女的生日在7月份的同学
```java
public List<Student> queryFemaleStudentsBornInJuly() {
String sql = "SELECT * FROM student WHERE gender = ? AND MONTH(birthday) = ?";
return jdbcTemplate.query(sql, new Object[]{"女", 7}, new StudentMapper());
}
public class StudentMapper implements RowMapper<Student> {
@Override
public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
Student student = new Student();
student.setStuno(rs.getInt("stuno"));
student.setStuname(rs.getString("stuname"));
student.setBirthday(rs.getDate("birthday"));
student.setGender(rs.getString("gender"));
student.setScore(rs.getInt("score"));
return student;
}
}
```
5. 分别采用基于XML的和基于Annotation方式的声明式事务管理,删除student表中所有score大于200的记录
基于XML的声明式事务管理
```xml
<bean id="studentDAO" class="com.example.StudentDAO">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="deleteStudents"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.example.StudentDAO.deleteStudents())"/>
</aop:config>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
```
```java
public void deleteStudents() {
String sql = "DELETE FROM student WHERE score > ?";
jdbcTemplate.update(sql, 200);
}
```
基于Annotation的声明式事务管理
```java
public class StudentService {
private StudentDAO studentDAO;
@Transactional
public void deleteStudents() {
String sql = "DELETE FROM student WHERE score > ?";
studentDAO.delete(sql, 200);
}
public void setStudentDAO(StudentDAO studentDAO) {
this.studentDAO = studentDAO;
}
}
```
```xml
<bean id="studentService" class="com.example.StudentService">
<property name="studentDAO" ref="studentDAO"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
```
注意:需要在Spring配置文件中配置数据源(dataSource)和JdbcTemplate对象(jdbcTemplate)。此外,使用Spring进行声明式事务管理时,需要在配置文件中配置事务管理器(transactionManager)。
阅读全文