MyBatis是一款流行的持久层框架,简化了JDBC操作。以下是其基础入门语法:
1. 核心配置文件(mybatis-config.xml)
用于配置数据库连接和映射文件位置。
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.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
2. SQL映射文件(UserMapper.xml)
定义SQL语句与Java方法的映射关系。
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.mapper.UserMapper">
<!-- 查询单个用户 -->
<select id="selectUser" parameterType="int" resultType="com.example.entity.User">
SELECT * FROM users WHERE id = #{id}
</select>
<!-- 插入用户 -->
<insert id="insertUser" parameterType="com.example.entity.User">
INSERT INTO users (name, age) VALUES (#{name}, #{age})
<!-- 获取自增主键 -->
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
</mapper>
3. Java实体类(User.java)
对应数据库表结构。
java
public class User {
private Integer id;
private String name;
private Integer age;
// getters/setters
}
4. Mapper接口(UserMapper.java)
定义操作数据库的方法。
java
public interface UserMapper {
User selectUser(int id);
int insertUser(User user);
}
5. 获取SqlSession并执行操作
java
// 加载配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 执行查询
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectUser(1);
System.out.println(user.getName());
}
6. 动态SQL
根据条件动态生成SQL语句。
xml
<select id="findUsers" resultType="User">
SELECT * FROM users
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age > #{age}
</if>
</where>
</select>
7. 参数处理
#{}:预编译处理(防止SQL注入)${}:直接替换(用于表名、列名等)
xml
<select id="selectUsers" resultType="User">
SELECT * FROM ${tableName} WHERE age > #{minAge}
</select>
8. 结果映射
处理列名与属性名不一致的情况。
xml
<resultMap id="userResultMap" type="User">
<id property="id" column="user_id"/>
<result property="name" column="user_name"/>
</resultMap>
<select id="selectUser" resultMap="userResultMap">
SELECT user_id, user_name FROM users WHERE id = #{id}
</select>
9. 事务管理
java
SqlSession session = sqlSessionFactory.openSession(false); // 手动提交
try {
UserMapper mapper = session.getMapper(UserMapper.class);
mapper.insertUser(user1);
mapper.insertUser(user2);
session.commit(); // 提交事务
} catch (Exception e) {
session.rollback(); // 回滚事务
throw e;
} finally {
session.close();
}
10. 注解方式(替代XML)
java
public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{id}")
User selectUser(int id);
@Insert("INSERT INTO users (name, age) VALUES (#{name}, #{age})")
@Options(useGeneratedKeys = true, keyProperty = "id")
int insertUser(User user);
}