通过S框架实现高效获取数据库中的ID (s框架获取数据库中的id)
在进行软件开发中,无论是Web开发还是移动端开发,我们一般都需要和数据库打交道。而在数据库操作中,主键ID是非常重要的一个属性,因为它通常被作为唯一标识符。因此,正确、高效的获取数据库中的ID十分关键。本文将介绍如何。
一、S框架概述
S框架是由Spring、SpringMVC、MyBatis三个框架整合而成的一个Web应用框架。其中,Spring主要负责管理应用的Bean对象,SpringMVC负责处理请求和响应,MyBatis负责映射Java对象和关系型数据库表。S框架具有轻量级、配置简单、易于理解等优点,因此在许多项目中得到了广泛应用。
二、高效获取数据库中的ID
1.优化MySQL数据库的主键类型
MySQL数据库提供多种主键类型,包括INT、BIGINT、UUID等。在一般情况下,我们使用INT作为主键类型,它可以存储范围为-2^31到2^31-1的整数。如果需要存储更大的整数,可以选择BIGINT类型。如果需要在分布式环境下生成唯一标识符,可以选择UUID类型。在实际开发中,建议根据项目需求来选择合适的主键类型。
2.通过MyBatis Generator生成ID
MyBatis Generator是一个自动生成MyBatis框架代码的工具,它可以自动生成DAO(数据访问对象)、Mapper(数据访问映射器)和Model(数据模型)等Java类。其中,Mapper接口封装了数据库的操作方法。在Mapper中,我们可以通过以下方式来获取自动生成的ID:
“`
SELECT LAST_INSERT_ID()
INSERT INTO user(username,password)
VALUES(#{username},#{password})
“`
其中,selectKey标签用于获取自动生成的ID,keyProperty属性用于指定ID对应的Java属性名称,resultType属性用于指定ID的类型,order属性用于指定获取ID的顺序。这种方式可以大幅提高获取ID的效率。
3.通过JDBC获取自增ID
如果没有使用MyBatis Generator生成代码,可以通过JDBC的PreparedStatement对象来获取自增ID,具体代码如下:
“`
try(Connection conn = dataSource.getConnection()) {
String sql = “INSERT INTO user(username,password) VALUES(?,?)”;
PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ps.setString(1, “admin”);
ps.setString(2, “123456”);
ps.executeUpdate();
try(ResultSet rs = ps.getGeneratedKeys()) {
if(rs.next()) {
int id = rs.getInt(1);
// 获取自增ID
}
}
}
“`
其中,Statement.RETURN_GENERATED_KEYS表示返回自动生成的ID。在执行完SQL语句后,可以通过PreparedStatement对象的getGeneratedKeys()方法获取自动生成的ID。
三、S框架应用实例
考虑一个简单的用户管理系统,包括用户的添加、查询、修改和删除等操作。在数据库中,我们建立一个user表,包括id、username和password三个字段。接下来,我们将基于S框架实现用户管理系统,并演示如何获取数据库中的ID。
1.创建项目
使用Maven创建一个S框架项目,具体步骤省略。
2.配置POM文件
在POM文件中添加Spring、SpringMVC和MyBatis等依赖。
“`
org.springframework
spring-context
5.3.5
org.springframework
spring-webmvc
5.3.5
org.mybatis
mybatis
3.5.6
mysql
mysql-connector-java
8.0.23
“`
3.配置数据源
在Spring配置文件中配置数据源,具体配置方式参见MyBatis官方文档。
4.创建Mapper
创建UserMapper接口,定义user表的增、删、改、查方法。
“`
public interface UserMapper {
int insert(User user);
int delete(int id);
int update(User user);
User selectById(int id);
List selectAll();
}
“`
其中,User为实体类,包含id、username和password三个属性。
5.创建XML文件
创建UserMapper对应的XML文件,包含SQL语句和映射规则。在Mapper XML文件中,我们可以通过以下方式来获取自动生成的ID。
“`
SELECT nextval(‘user_id_seq’)
INSERT INTO user(id,username,password)
VALUES(#{id},#{username},#{password})
“`
其中,nextval(‘user_id_seq’)用于获取当前序列号,BEFORE表示在插入前获取自动生成的ID。在插入完成后,id属性会自动赋值为自动生成的ID。
6.创建Service
创建UserService服务,对UserMapper进行封装。
“`
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public int addUser(User user) {
return userMapper.insert(user);
}
public int deleteUser(int id) {
return userMapper.delete(id);
}
public int updateUser(User user) {
return userMapper.update(user);
}
public User getUserById(int id) {
return userMapper.selectById(id);
}
public List getAllUser() {
return userMapper.selectAll();
}
}
“`
其中,@Service注解表示该类为Spring容器中的Bean对象,@Autowired注解表示自动注入UserMapper。
7.创建Controller
创建UserController控制器,处理HTTP请求和响应。
“`
@Controller
@RequestMapping(value=”/user”)
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value=”/add”,method=RequestMethod.POST)
public String addUser(HttpServletRequest request) {
String username = request.getParameter(“username”);
String password = request.getParameter(“password”);
User user = new User();
user.setUsername(username);
user.setPassword(password);
userService.addUser(user);
return “redirect:/user/list”;
}
}
“`
其中,@Controller注解表示该类为SpringMVC的控制器,@RequestMapping注解表示URL的映射关系。在addUser方法中,我们通过HttpServletRequest对象获取请求参数,并将其封装为User对象,最后调用UserService的addUser方法实现用户的添加。
8.实验验证
配置Tomcat服务器,启动项目,并使用Postman测试用户信息的添加和查询操作。
“`
// 添加用户
POST http://localhost:8080/user/add
Body:
username=admin&password=123456
// 查询用户
GET http://localhost:8080/user/list
“`
在MySQL数据库中查看user表,可以发现ID自动增长,并正确地添加到数据库中。
四、