mybatis的基本使用方法
更新时间:2023-10-30什么是MyBatis
MyBatis 是一个优秀的支持定制化 SQL、存储过程的持久层框架,它避免了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。 MyBatis 可以使用简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects)为数据库中的记录。
MyBatis的基本使用方法
1. 引入 MyBatis 依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
2. 创建数据源连接池:
// xml 配置方式
<!-- 数据源连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClassName}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
// Java 配置方式
DataSource dataSource = new PooledDataSource(
"com.mysql.jdbc.Driver",
"jdbc:mysql://localhost:3306/test",
"root",
"root"
);
3. 配置 MyBatis SQL 映射文件:
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" resultType="com.example.model.User">
select * from user where id = #{id}
</select>
</mapper>
4. 调用 MyBatis 接口方法,执行 SQL 操作:
public class UserMapperTest {
@Test
public void getUserById() throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
try {
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.getUserById(1);
System.out.println(user);
} finally {
session.close();
}
}
}
MyBatis映射文件的基本语法
1. namespace
指定映射文件对应的数据访问接口的完整类名。在调用接口方法时,通过该属性找到对应的 SQL 映射语句。一般情况下,namespace 属性的值和接口的完整类名相同。
<mapper namespace="com.example.mapper.UserMapper">
</mapper>
2. select、update、insert、delete
指定 SQL 语句以及返回值类型(或者不需要返回值)。
<select id="getUserById" resultType="com.example.model.User">
select * from user where id = #{id}
</select>
3. resultType、resultMap
指定返回值的类型或自定义映射关系。
<select id="getUserById" resultMap="userResult">
select * from user where id = #{id}
</select>
<resultMap id="userResult" type="com.example.model.User">
<result property="id" column="user_id" />
<result property="username" column="user_name" />
</resultMap>
4. parameterType
指定输入参数的类型。
<update id="updateUserById" parameterType="com.example.model.User">
update user set username = #{username} where id = #{id}
</update>
MyBatis与Spring的整合
1. 引入 MyBatis 与 Spring 整合的依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.5</version>
</dependency>
2. 配置数据源和事务管理器:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClassName}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
3. 配置 SqlSessionFactory 和 MapperScannerConfigurer:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper" />
</bean>
4. 在业务层中注入数据访问接口的实现:
public interface UserMapper {
User getUserById(@Param("id") int id);
}
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User getUserById(int id) {
return userMapper.getUserById(id);
}
}