Mybatis注解开发
时间: 2024-01-16 18:05:16 浏览: 78
Mybatis是一款优秀的持久层框架,提供了注解和XML两种开发方式。本文将介绍Mybatis注解开发。
1. 环境搭建
在项目中引入Mybatis的依赖,以及数据库驱动的依赖。如果需要使用注解开发,还需要在配置文件中开启注解支持。
```xml
<!-- Mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
```
在Mybatis的配置文件中开启注解支持。
```xml
<configuration>
<!-- 开启注解支持 -->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25000"/>
<setting name="jdbcTypeForNull" value="NULL"/>
<setting name="logPrefix" value="mybatis"/>
<setting name="logImpl" value="STDOUT_LOGGING"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
<setting name="safeResultHandlerEnabled" value="true"/>
<setting name="defaultScriptingLanguage" value="org.apache.ibatis.scripting.xmltags.XMLLanguageDriver"/>
<setting name="callSettersOnNulls" value="false"/>
<setting name="returnInstanceForEmptyRow" value="false"/>
<setting name="logPrefix" value="mybatis"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="useColumnLabel" value="true"/>
<setting name="returnInstanceForEmptyRow" value="false"/>
<setting name="useActualParamName" value="true"/>
<setting name="configurationFactory" value="org.apache.ibatis.session.ConfigurationFactory"/>
</settings>
</configuration>
```
2. 注解介绍
Mybatis提供了多个注解,用于进行数据库操作。下面是一些常用的注解介绍。
- @Select:表示查询操作。
```java
@Select("SELECT * FROM user WHERE id = #{id}")
User getUserById(int id);
```
- @Insert:表示插入操作。
```java
@Insert("INSERT INTO user(username, password) VALUES(#{username}, #{password})")
int insertUser(User user);
```
- @Update:表示更新操作。
```java
@Update("UPDATE user SET name = #{name} WHERE id = #{id}")
int updateUserById(@Param("id") int id, @Param("name") String name);
```
- @Delete:表示删除操作。
```java
@Delete("DELETE FROM user WHERE id = #{id}")
int deleteUserById(int id);
```
- @ResultMap:表示结果集映射。
```java
@ResultMap("userMap")
@Select("SELECT * FROM user")
List<User> getAllUsers();
```
- @Results:表示多个@Result注解的组合。
```java
@Results(id = "userMap", value = {
@Result(property = "id", column = "id"),
@Result(property = "name", column = "name"),
@Result(property = "age", column = "age")
})
@Select("SELECT * FROM user")
List<User> getAllUsers();
```
- @Result:表示查询结果字段和实体类属性的映射关系。
```java
@Result(property = "id", column = "id"),
@Result(property = "name", column = "name"),
@Result(property = "age", column = "age")
@Select("SELECT * FROM user WHERE id = #{id}")
User getUserById(int id);
```
- @Param:表示方法参数和SQL语句中的参数的映射关系。
```java
@Update("UPDATE user SET name = #{name} WHERE id = #{id}")
int updateUserById(@Param("id") int id, @Param("name") String name);
```
3. 实现步骤
首先定义实体类User。
```java
public class User {
private int id;
private String username;
private String password;
// getter和setter方法
}
```
然后定义Mapper接口UserMapper。
```java
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User getUserById(int id);
@Insert("INSERT INTO user(username, password) VALUES(#{username}, #{password})")
int insertUser(User user);
@Update("UPDATE user SET name = #{name} WHERE id = #{id}")
int updateUserById(@Param("id") int id, @Param("name") String name);
@Delete("DELETE FROM user WHERE id = #{id}")
int deleteUserById(int id);
}
```
最后在需要进行数据库操作的地方注入UserMapper,即可使用注解完成数据库操作。
```java
@Autowired
private UserMapper userMapper;
public User getUserById(int id) {
return userMapper.getUserById(id);
}
public int insertUser(User user) {
return userMapper.insertUser(user);
}
public int updateUserById(int id, String name) {
return userMapper.updateUserById(id, name);
}
public int deleteUserById(int id) {
return userMapper.deleteUserById(id);
}
```
注:在使用注解时,也可以使用XML配置文件进行结果集映射等操作。
阅读全文