Mybatis 动态SQL是 Mybatis 框架中非常重要的一个功能,可以通过此功能来动态生成 SQL 语句,从而满足不同场景需求。下面是 Mybatis 动态SQL搭建环境的全过程的详细介绍:
1. 环境准备
需要准备以下环境:
- JDK
- Maven
- MySQL数据库
- Mybatis IDE插件(建议使用IDEA)
2. 创建项目
使用 Maven 创建一个新的项目,设置项目名称、GroupId 和 ArtifactId。项目创建完成后,在 pom.xml 文件中添加 Mybatis 和 MySQL 驱动的依赖:
<dependencies>
<!-- Mybatis 依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- MySQL 驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
</dependencies>
3. 创建数据库和表
在 MySQL 中创建一个新的数据库,并在该库中创建一个新的表用于测试。例如,可以创建一个名为“test”的数据库,其中包含一个名为“user”的表,通过以下 SQL 语句来实现:
CREATE DATABASE test;
USE test;
CREATE TABLE user (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(20) NOT NULL,
password VARCHAR(20) NOT NULL
);
4. 编写 Mybatis 配置文件
在 src/main/resources 目录下创建一个名为 mybatis-config.xml 的文件,并添加以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&maxReconnects=10"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
</configuration>
这里包括了 Mybatis 的数据库配置,即指定了数据库连接的驱动、URL、用户名和密码。
5. 编写 Mybatis 映射文件
在 src/main/resources 目录下创建一个名为 UserMapper.xml 的文件,并添加以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">
<select id="getUsers" resultType="com.example.demo.entity.User">
SELECT * FROM user
</select>
<insert id="addUser" parameterType="com.example.demo.entity.User">
INSERT INTO user (username, password) VALUE (#{username}, #{password})
</insert>
</mapper>
这里定义了两个 SQL 操作语句:查询用户列表(getUsers)和新增用户(addUser)。
6. 编写 Java 实体类
创建一个名为 User 的 Java 实体类,对应数据库中的 user 表。代码如下:
public class User {
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
7. 编写 DAO 接口
创建一个名为 UserMapper 的 DAO 接口,代码如下:
public interface UserMapper {
List<User> getUsers();
int addUser(User user);
}
8. 创建 DAO 接口的实现类
创建一个名为 UserMapperImpl 的 DAO 接口实现类,并实现该类中的两个方法:
public class UserMapperImpl implements UserMapper {
private SqlSessionFactory sqlSessionFactory;
public UserMapperImpl(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
@Override
public List<User> getUsers() {
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
return mapper.getUsers();
}
}
@Override
public int addUser(User user) {
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
return mapper.addUser(user);
}
}
}
9. 测试
可以在一个测试类中进行测试,代码如下:
public class UserMapperTest {
private static SqlSessionFactory sqlSessionFactory;
@BeforeClass
public static void setUp() {
String resource = "mybatis-config.xml";
try (Reader reader = Resources.getResourceAsReader(resource)) {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void getUsers() {
UserMapper userMapper = new UserMapperImpl(sqlSessionFactory);
List<User> users = userMapper.getUsers();
for (User user : users) {
System.out.println(user.getId() + " " + user.getUsername() + " " + user.getPassword());
}
Assert.assertNotNull(users);
}
@Test
public void addUser() {
UserMapper userMapper = new UserMapperImpl(sqlSessionFactory);
User user = new User();
user.setUsername("test");
user.setPassword("test");
int result = userMapper.addUser(user);
Assert.assertEquals(1, result);
}
}
这里定义了两个测试方法:查询用户列表和新增用户。
以上就是 Mybatis 动态SQL搭建环境的全过程,通过 Mybatis 动态SQL 可以轻松实现灵活的 SQL 生成,便于满足不同需求的应用场景。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mybatis 动态SQL搭建环境的全过程 - Python技术站