面试题答案
一键面试利用Java注解实现数据库事务管理
- 思路:在Spring Boot项目中,通过
@Transactional
注解来管理事务。该注解可以作用在类或方法上。当作用在类上时,类中所有的公共方法都会被事务管理;作用在方法上时,仅该方法会被事务管理。Spring会在方法执行前开启事务,方法正常结束后提交事务,如果方法抛出异常则回滚事务。 - 关键代码示例:
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class UserService {
@Transactional
public void saveUser() {
// 这里调用DAO层方法进行数据库操作,如插入用户数据
// 如果这中间任何一个数据库操作失败,整个方法的操作都会回滚
}
}
同时,在Spring Boot项目的配置类中,需要确保事务管理器已经正确配置,通常在Spring Boot项目中,只要引入了相关的数据库依赖(如spring-boot-starter-jdbc
或spring-boot-starter-data -jpa
等),Spring Boot会自动配置一个默认的事务管理器。如果使用MyBatis,一般配置如下:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
@Configuration
@EnableTransactionManagement
public class TransactionConfig {
@Autowired
private DataSource dataSource;
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource);
}
}
利用Java注解实现自定义SQL映射(MyBatis)
- 思路:MyBatis提供了
@Select
、@Insert
、@Update
、@Delete
等注解来实现自定义SQL映射。通过在Mapper接口方法上使用这些注解,可以直接在Java代码中定义SQL语句,而无需编写XML映射文件。 - 关键代码示例:
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User getUserById(int id);
@Insert("INSERT INTO user (name, age) VALUES (#{name}, #{age})")
void insertUser(User user);
}
这里#{}
表示占位符,MyBatis会将方法参数的值传入SQL语句中对应的位置。同时,在Spring Boot项目中,需要在启动类或配置类中通过@MapperScan
注解扫描Mapper接口所在的包,例如:
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}