MyBatis配置
数据源配置
在MyBatis中,首先需要配置数据源,以确保与数据库的连接顺利建立。在mybatis-config.xml
文件中,你可以指定数据源的类型、URL、用户名和密码。示例如下:
<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/mydatabase" />
<property name="username" value="root" />
<property name="password" value="password" />
</dataSource>
</environment>
</environments>
<!-- 其他配置 -->
</configuration>
映射文件配置
MyBatis使用XML映射文件来定义SQL语句和数据库映射关系。在映射文件中,你可以使用<select>
、<insert>
、<update>
和<delete>
等标签定义相应的SQL语句。示例如下:
<mapper namespace="com.example.mapper.UserMapper">
<!-- 查询用户信息 -->
<select id="selectUserById" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
<!-- 插入用户信息 -->
<insert id="insertUser" parameterType="User">
INSERT INTO user (username, password) VALUES (#{username}, #{password})
</insert>
<!-- 更新用户信息 -->
<update id="updateUser" parameterType="User">
UPDATE user SET password = #{password} WHERE id = #{id}
</update>
<!-- 删除用户信息 -->
<delete id="deleteUser" parameterType="int">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
MyBatis部署
集成到项目
要将MyBatis集成到项目中,首先需要将MyBatis的jar包添加到项目的依赖中。可以使用Maven或Gradle等构建工具,也可以手动下载jar包添加到项目中。
<!-- Maven依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
配置Spring
如果项目使用Spring框架,需要配置Spring与MyBatis的整合。可以在Spring配置文件中添加MyBatis的配置信息,并使用SqlSessionFactoryBean
来创建SqlSessionFactory
。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:mapper/*.xml" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>
测试类
编写单元测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
public void testSelectUserById() {
User user = userMapper.selectUserById(1);
assertNotNull(user);
assertEquals("John Doe", user.getUsername());
}
// 其他测试方法类似
}
使用代码生成器
MyBatis提供了代码生成器,可以根据数据库表自动生成实体类和映射文件,极大地简化了开发流程。配置代码生成器,只需在generatorConfig.xml
中指定数据库连接信息和要生成的表即可。
<!-- generatorConfig.xml -->
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="MysqlTables" targetRuntime="MyBatis3">
<!-- 数据库连接配置 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mydatabase" userId="root" password="password" />
<!-- 生成实体类和映射文件的包名 -->
<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java" />
<sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources" />
<javaClientGenerator targetPackage="com.example.mapper" targetProject="src/main/java" type="XMLMAPPER" />
<!-- 要生成的表 -->
<table tableName="user" />
</context>
</generatorConfiguration>
防范SQL注入
为了防范SQL注入攻击,使用MyBatis的参数绑定功能是十分重要的。在编写SQL语句时,不要直接拼接字符串,而是使用#{param}
的方式将参数传递给MyBatis,MyBatis会自动进行参数绑定,防止SQL注入攻击。
<!-- 错误的用法,容易受到SQL注入攻击 -->
<select id="selectUserByUsernameAndPassword" resultType="User">
SELECT * FROM user WHERE username = '${username}' AND password = '${password}'
</select>
<!-- 正确的用法,使用参数绑定 -->
<select id="selectUserByUsernameAndPassword" resultType="User">
SELECT * FROM user WHERE username = #{username} AND password = #{password}
</select>