使用Mybatis的时候需要写mapper.xml来映射实体类和数据表字段
mapper.xml也是官方推荐的用法,现在我们用带注解的class来实现mapper.xml
代码如下:
顺便配置了一下CRUD的缓存,如果不用缓存,把@CacheNamespace和@Options去掉就行,他们配置的是缓存类型和缓存时间
public class User { private String userName; private String password; private Boolean enable; 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; } public Boolean getEnable() { return enable; } public void setEnable(Boolean enable) { this.enable = enable; } }
import java.util.List; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Options; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; @CacheNamespace public interface UserMapper { @Options(flushCache = true, timeout = 20000) @Insert("insert into demo.user(user_name, password, enable) values(#{userName}, #{password}, #{enable})") public void insert(User object); @Options(flushCache = true, timeout = 20000) @Update("update demo.user set password=#{password}, enable=#{enable} where user_name=#{userName}") public void update(User object); @Options(useCache = true, flushCache = false, timeout = 10000) @Select("select * from demo.user where user_name=#{userName}") @Results(value = { @Result(id = true, property = "userName", column = "user_name"), @Result(property = "password", column = "password"), @Result(property = "enable", column = "enable"), }) public List<User> query(@Param("userName") String userName); @Options(flushCache = true, timeout = 20000) @Delete("delete from demo.user where user_name=#{userName}") public void delete(@Param("userName") String userName); }
使用:
@Autowired private SqlSessionFactory sqlSessionFactory; @Test public void testInsert() { User user = new User("username", "password", true); sqlSessionFactory.openSession().getMapper(UserMapper.class).insert(user); }
注意,如果需要映射一对多的关系,还是老老实实用xml,毕竟mybatis的注解还不完善,简单的实体用class风格还是不错的,挺方便,而且如果需要mapper.xml和class风格的mapper混用,也是可以滴(在class中使用@ResultMap和mapper.xml进行合体)
扫描二维码关注公众号,回复:
381236 查看本文章
以上