Mybatis注解开发
- mybatis的常用注解
- 使用 Mybatis 注解实现基本 CRUD
- 项目目录结构
- 编写实体类
- 使用注解方式开发持久层接口
- 编写 SqlMapConfig.xml 配置文件
- 编写测试代码
- 使用注解实现复杂关系映射开发
- 复杂关系映射的注解说明
- 项目目录
- 使用注解实现一对一复杂关系映射及立即加载
- 添加 User 实体类及 Account 实体类
- 添加账户的持久层接口并使用注解配置
- 添加用户的持久层接口并使用注解配置
- 测试一对一关联及立即加载
- 使用注解实现一对多复杂关系映射及延迟加载
- User 实体类加入 List``
- 编写用户的持久层接口并使用注解配置
- 编写账户的持久层接口并使用注解配置
- 编写测试代码
- 回顾下一级缓存
- mybatis 基于注解的二级缓存
- 在 SqlMapConfig.xml 中开启二级缓存支持
- 在持久层接口中使用注解配置二级缓存
- 编写测试二级缓存的测试类
mybatis的常用注解
注解 | 说明 |
---|---|
@Insert | 实现新增 |
@Delete | 实现删除 |
@Update | 实现更新 |
@Select | 实现查询 |
@Result | 实现结果集封装 |
@Results | 可以与@Result 一起使用,封装多个结果集 |
@ResultMap | 实现引用@Results 定义的封装 |
@One | 实现一对一结果集封装 |
@Many | 实现一对多结果集封装 |
@SelectProvider | 实现动态 SQL 映射 |
@CacheNamespace | 实现注解二级缓存的使用 |
使用 Mybatis 注解实现基本 CRUD
项目目录结构
编写实体类
User:
<span style="color:#000000"><code class="language-java"><span style="color:#c678dd">package</span> com<span style="color:#999999">.</span>keafmd<span style="color:#999999">.</span>domain<span style="color:#999999">;</span>
<span style="color:#c678dd">import</span> java<span style="color:#999999">.</span>io<span style="color:#999999">.</span>Serializable<span style="color:#999999">;</span>
<span style="color:#c678dd">import</span> java<span style="color:#999999">.</span>util<span style="color:#999999">.</span>Date<span style="color:#999999">;</span>
<span style="color:#5c6370">/**
* Keafmd
*
* @ClassName: User
* @Description: User实体类
* @author: 牛哄哄的柯南
* @date: 2021-02-16 20:28
*/</span>
<span style="color:#c678dd">public</span> <span style="color:#c678dd">class</span> User <span style="color:#c678dd">implements</span> Serializable <span style="color:#999999">{</span>
<span style="color:#c678dd">private</span> Integer id<span style="color:#999999">;</span>
<span style="color:#c678dd">private</span> String username<span style="color:#999999">;</span>
<span style="color:#c678dd">private</span> String address<span style="color:#999999">;</span>
<span style="color:#c678dd">private</span> String sex<span style="color:#999999">;</span>
<span style="color:#c678dd">private</span> Date birthday<span style="color:#999999">;</span>
<span style="color:#c678dd">public</span> Integer <span style="color:#61aeee">getId</span><span style="color:#999999">(</span><span style="color:#999999">)</span> <span style="color:#999999">{</span>
<span style="color:#c678dd">return</span> id<span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#c678dd">public</span> <span style="color:#c678dd">void</span> <span style="color:#61aeee">setId</span><span style="color:#999999">(</span>Integer id<span style="color:#999999">)</span> <span style="color:#999999">{</span>
<span style="color:#c678dd">this</span><span style="color:#999999">.</span>id <span style="color:#669900">=</span> id<span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#c678dd">public</span> String <span style="color:#61aeee">getUsername</span><span style="color:#999999">(</span><span style="color:#999999">)</span> <span style="color:#999999">{</span>
<span style="color:#c678dd">return</span> username<span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#c678dd">public</span> <span style="color:#c678dd">void</span> <span style="color:#61aeee">setUsername</span><span style="color:#999999">(</span>String username<span style="color:#999999">)</span> <span style="color:#999999">{</span>
<span style="color:#c678dd">this</span><span style="color:#999999">.</span>username <span style="color:#669900">=</span> username<span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#c678dd">public</span> String <span style="color:#61aeee">getAddress</span><span style="color:#999999">(</span><span style="color:#999999">)</span> <span style="color:#999999">{</span>
<span style="color:#c678dd">return</span> address<span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#c678dd">public</span> <span style="color:#c678dd">void</span> <span style="color:#61aeee">setAddress</span><span style="color:#999999">(</span>String address<span style="color:#999999">)</span> <span style="color:#999999">{</span>
<span style="color:#c678dd">this</span><span style="color:#999999">.</span>address <span style="color:#669900">=</span> address<span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#c678dd">public</span> String <span style="color:#61aeee">getSex</span><span style="color:#999999">(</span><span style="color:#999999">)</span> <span style="color:#999999">{</span>
<span style="color:#c678dd">return</span> sex<span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#c678dd">public</span> <span style="color:#c678dd">void</span> <span style="color:#61aeee">setSex</span><span style="color:#999999">(</span>String sex<span style="color:#999999">)</span> <span style="color:#999999">{</span>
<span style="color:#c678dd">this</span><span style="color:#999999">.</span>sex <span style="color:#669900">=</span> sex<span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#c678dd">public</span> Date <span style="color:#61aeee">getBirthday</span><span style="color:#999999">(</span><span style="color:#999999">)</span> <span style="color:#999999">{</span>
<span style="color:#c678dd">return</span> birthday<span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#c678dd">public</span> <span style="color:#c678dd">void</span> <span style="color:#61aeee">setBirthday</span><span style="color:#999999">(</span>Date birthday<span style="color:#999999">)</span> <span style="color:#999999">{</span>
<span style="color:#c678dd">this</span><span style="color:#999999">.</span>birthday <span style="color:#669900">=</span> birthday<span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#999999">@Override</span>
<span style="color:#c678dd">public</span> String <span style="color:#61aeee">toString</span><span style="color:#999999">(</span><span style="color:#999999">)</span> <span style="color:#999999">{</span>
<span style="color:#c678dd">return</span> <span style="color:#669900">"User{"</span> <span style="color:#669900">+</span>
<span style="color:#669900">"id="</span> <span style="color:#669900">+</span> id <span style="color:#669900">+</span>
<span style="color:#669900">", username='"</span> <span style="color:#669900">+</span> username <span style="color:#669900">+</span> <span style="color:#669900">'\''</span> <span style="color:#669900">+</span>
<span style="color:#669900">", address='"</span> <span style="color:#669900">+</span> address <span style="color:#669900">+</span> <span style="color:#669900">'\''</span> <span style="color:#669900">+</span>
<span style="color:#669900">", sex='"</span> <span style="color:#669900">+</span> sex <span style="color:#669900">+</span> <span style="color:#669900">'\''</span> <span style="color:#669900">+</span>
<span style="color:#669900">", birthday="</span> <span style="color:#669900">+</span> birthday <span style="color:#669900">+</span>
<span style="color:#669900">'}'</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#999999">}</span>
</code></span>
使用注解方式开发持久层接口
IUserDao:
<span style="color:#000000"><code class="language-java"><span style="color:#c678dd">package</span> com<span style="color:#999999">.</span>keafmd<span style="color:#999999">.</span>dao<span style="color:#999999">;</span>
<span style="color:#c678dd">import</span> com<span style="color:#999999">.</span>keafmd<span style="color:#999999">.</span>domain<span style="color:#999999">.</span>User<span style="color:#999999">;</span>
<span style="color:#c678dd">import</span> org<span style="color:#999999">.</span>apache<span style="color:#999999">.</span>ibatis<span style="color:#999999">.</span>annotations<span style="color:#999999">.</span>Delete<span style="color:#999999">;</span>
<span style="color:#c678dd">import</span> org<span style="color:#999999">.</span>apache<span style="color:#999999">.</span>ibatis<span style="color:#999999">.</span>annotations<span style="color:#999999">.</span>Insert<span style="color:#999999">;</span>
<span style="color:#c678dd">import</span> org<span style="color:#999999">.</span>apache<span style="color:#999999">.</span>ibatis<span style="color:#999999">.</span>annotations<span style="color:#999999">.</span>Select<span style="color:#999999">;</span>
<span style="color:#c678dd">import</span> org<span style="color:#999999">.</span>apache<span style="color:#999999">.</span>ibatis<span style="color:#999999">.</span>annotations<span style="color:#999999">.</span>Update<span style="color:#999999">;</span>
<span style="color:#c678dd">import</span> java<span style="color:#999999">.</span>util<span style="color:#999999">.</span>List<span style="color:#999999">;</span>
<span style="color:#5c6370">/**
* Keafmd
*
* @ClassName: IUserDao
* @Description:
* @author: 牛哄哄的柯南
* @date: 2021-02-16 20:30
*/</span>
<span style="color:#5c6370">/**
* 在mybatis中针对CRUD一共有四个注解
* @Select @Insert @Update @Delete
*/</span>
<span style="color:#c678dd">public</span> <span style="color:#c678dd">interface</span> IUserDao <span style="color:#999999">{</span>
<span style="color:#5c6370">/**
* 查询所有用户
* @return
*/</span>
<span style="color:#999999">@Select</span><span style="color:#999999">(</span><span style="color:#669900">"select * from user"</span><span style="color:#999999">)</span>
List<span style="color:#61aeee"><span style="color:#999999"><</span>User<span style="color:#999999">></span></span> <span style="color:#61aeee">findAll</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#5c6370">/**
* 保存用户
* @param user
*/</span>
<span style="color:#999999">@Insert</span><span style="color:#999999">(</span><span style="color:#669900">"insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday})"</span><span style="color:#999999">)</span>
<span style="color:#c678dd">void</span> <span style="color:#61aeee">saveUser</span><span style="color:#999999">(</span>User user<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#5c6370">/**
* 更新用户
* @param user
*/</span>
<span style="color:#999999">@Update</span><span style="color:#999999">(</span><span style="color:#669900">"update user set username=#{username},sex=#{sex},birthday=#{birthday},address=#{address} where id=#{id}"</span><span style="color:#999999">)</span>
<span style="color:#c678dd">void</span> <span style="color:#61aeee">updateUser</span><span style="color:#999999">(</span>User user<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#5c6370">/**
* 删除用户
* @param userId
*/</span>
<span style="color:#999999">@Delete</span><span style="color:#999999">(</span><span style="color:#669900">"delete from user where id=#{id}"</span><span style="color:#999999">)</span>
<span style="color:#c678dd">void</span> <span style="color:#61aeee">deleteUser</span><span style="color:#999999">(</span>Integer userId<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#5c6370">/**
* 根据id查询用户
* @param userId
* @return
*/</span>
<span style="color:#999999">@Select</span><span style="color:#999999">(</span><span style="color:#669900">"select * from user where id=#{id}"</span><span style="color:#999999">)</span>
User <span style="color:#61aeee">findById</span><span style="color:#999999">(</span>Integer userId<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#5c6370">/**
* 根据用户名称模糊查询
* @param username
* @return
*/</span>
<span style="color:#5c6370">//@Select("select * from user where username like #{username}") //占位符</span>
<span style="color:#999999">@Select</span><span style="color:#999999">(</span><span style="color:#669900">"select * from user where username like '%${value}%'"</span><span style="color:#999999">)</span> <span style="color:#5c6370">//字符串拼接</span>
List<span style="color:#61aeee"><span style="color:#999999"><</span>User<span style="color:#999999">></span></span> <span style="color:#61aeee">findByName</span><span style="color:#999999">(</span>String username<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#5c6370">/**
* 查询总数量
* @return
*/</span>
<span style="color:#999999">@Select</span><span style="color:#999999">(</span><span style="color:#669900">"select count(*) from user"</span><span style="color:#999999">)</span>
<span style="color:#c678dd">int</span> <span style="color:#61aeee">findTotal</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
</code></span>
通过注解方式,就不需要再去编写 UserDao.xml 映射文件了。
编写 SqlMapConfig.xml 配置文件
SqlMapConfig.xml:
<span style="color:#000000"><code class="language-xml"><span style="color:#5c6370"><?xml version="1.0" encoding="UTF-8"?></span>
<span style="color:#61aeee"><!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>configuration</span><span style="color:#999999">></span></span>
<span style="color:#5c6370"><!--引入外部配置文件--></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>properties</span> <span style="color:#d19a66">resource</span><span style="color:#669900"><span style="color:#999999">=</span><span style="color:#999999">"</span>jdbcConfig.properties<span style="color:#999999">"</span></span><span style="color:#999999">></span></span><span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>properties</span><span style="color:#999999">></span></span>
<span style="color:#5c6370"><!--配置别名--></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>typeAliases</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>package</span> <span style="color:#d19a66">name</span><span style="color:#669900"><span style="color:#999999">=</span><span style="color:#999999">"</span>com.keafmd.domain<span style="color:#999999">"</span></span><span style="color:#999999">/></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>typeAliases</span><span style="color:#999999">></span></span>
<span style="color:#5c6370"><!--配置环境--></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>environments</span> <span style="color:#d19a66">default</span><span style="color:#669900"><span style="color:#999999">=</span><span style="color:#999999">"</span>mysql<span style="color:#999999">"</span></span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>environment</span> <span style="color:#d19a66">id</span><span style="color:#669900"><span style="color:#999999">=</span><span style="color:#999999">"</span>mysql<span style="color:#999999">"</span></span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>transactionManager</span> <span style="color:#d19a66">type</span><span style="color:#669900"><span style="color:#999999">=</span><span style="color:#999999">"</span>JDBC<span style="color:#999999">"</span></span><span style="color:#999999">></span></span><span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>transactionManager</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>dataSource</span> <span style="color:#d19a66">type</span><span style="color:#669900"><span style="color:#999999">=</span><span style="color:#999999">"</span>POOLED<span style="color:#999999">"</span></span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>property</span> <span style="color:#d19a66">name</span><span style="color:#669900"><span style="color:#999999">=</span><span style="color:#999999">"</span>driver<span style="color:#999999">"</span></span> <span style="color:#d19a66">value</span><span style="color:#669900"><span style="color:#999999">=</span><span style="color:#999999">"</span>${jdbc.driver}<span style="color:#999999">"</span></span><span style="color:#999999">></span></span><span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>property</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>property</span> <span style="color:#d19a66">name</span><span style="color:#669900"><span style="color:#999999">=</span><span style="color:#999999">"</span>url<span style="color:#999999">"</span></span> <span style="color:#d19a66">value</span><span style="color:#669900"><span style="color:#999999">=</span><span style="color:#999999">"</span>${jdbc.url}<span style="color:#999999">"</span></span><span style="color:#999999">></span></span><span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>property</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>property</span> <span style="color:#d19a66">name</span><span style="color:#669900"><span style="color:#999999">=</span><span style="color:#999999">"</span>username<span style="color:#999999">"</span></span> <span style="color:#d19a66">value</span><span style="color:#669900"><span style="color:#999999">=</span><span style="color:#999999">"</span>${jdbc.username}<span style="color:#999999">"</span></span><span style="color:#999999">></span></span><span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>property</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>property</span> <span style="color:#d19a66">name</span><span style="color:#669900"><span style="color:#999999">=</span><span style="color:#999999">"</span>password<span style="color:#999999">"</span></span> <span style="color:#d19a66">value</span><span style="color:#669900"><span style="color:#999999">=</span><span style="color:#999999">"</span>${jdbc.password}<span style="color:#999999">"</span></span><span style="color:#999999">></span></span><span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>property</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>dataSource</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>environment</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>environments</span><span style="color:#999999">></span></span>
<span style="color:#5c6370"><!--指定带有注解的dao接口所在位置--></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>mappers</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"><</span>package</span> <span style="color:#d19a66">name</span><span style="color:#669900"><span style="color:#999999">=</span><span style="color:#999999">"</span>com.keafmd.dao<span style="color:#999999">"</span></span><span style="color:#999999">></span></span><span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>package</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>mappers</span><span style="color:#999999">></span></span>
<span style="color:#e06c75"><span style="color:#e06c75"><span style="color:#999999"></</span>configuration</span><span style="color:#999999">></span></span>
</code></span>
编写测试代码
AnnotationCRUDTest:
<span style="color:#000000"><code class="language-java"><span style="color:#c678dd">package</span> com<span style="color:#999999">.</span>keafmd<span style="color:#999999">.</span>test<span style="color:#999999">;</span>
<span style="color:#c678dd">import</span> com<span style="color:#999999">.</span>keafmd<span style="color:#999999">.</span>dao<span style="color:#999999">.</span>IUserDao<span style="color:#999999">;</span>
<span style="color:#c678dd">import</span> com<span style="color:#999999">.</span>keafmd<span style="color:#999999">.</span>domain<span style="color:#999999">.</span>User<span style="color:#999999">;</span>
<span style="color:#c678dd">import</span> org<span style="color:#999999">.</span>apache<span style="color:#999999">.</span>ibatis<span style="color:#999999">.</span>io<span style="color:#999999">.</span>Resources<span style="color:#999999">;</span>
<span style="color:#c678dd">import</span> org<span style="color:#999999">.</span>apache<span style="color:#999999">.</span>ibatis<span style="color:#999999">.</span>session<span style="color:#999999">.</span>SqlSession<span style="color:#999999">;</span>
<span style="color:#c678dd">import</span> org<span style="color:#999999">.</span>apache<span style="color:#999999">.</span>ibatis<span style="color:#999999">.</span>session<span style="color:#999999">.</span>SqlSessionFactory<span style="color:#999999">;</span>
<span style="color:#c678dd">import</span> org<span style="color:#999999">.</span>apache<span style="color:#999999">.</span>ibatis<span style="color:#999999">.</span>session<span style="color:#999999">.</span>SqlSessionFactoryBuilder<span style="color:#999999">;</span>
<span style="color:#c678dd">import</span> org<span style="color:#999999">.</span>junit<span style="color:#999999">.</span>After<span style="color:#999999">;</span>
<span style="color:#c678dd">import</span> org<span style="color:#999999">.</span>junit<span style="color:#999999">.</span>Before<span style="color:#999999">;</span>
<span style="color:#c678dd">import</span> org<span style="color:#999999">.</span>junit<span style="color:#999999">.</span>Test<span style="color:#999999">;</span>
<span style="color:#c678dd">import</span> java<span style="color:#999999">.</span>io<span style="color:#999999">.</span>InputStream<span style="color:#999999">;</span>
<span style="color:#c678dd">import</span> java<span style="color:#999999">.</span>util<span style="color:#999999">.</span>Date<span style="color:#999999">;</span>
<span style="color:#c678dd">import</span> java<span style="color:#999999">.</span>util<span style="color:#999999">.</span>List<span style="color:#999999">;</span>
<span style="color:#5c6370">/**
* Keafmd
*
* @ClassName: AnnotationCRUDTest
* @Description: 注解开发CRUD测试
* @author: 牛哄哄的柯南
* @date: 2021-02-16 21:05
*/</span>
<span style="color:#c678dd">public</span> <span style="color:#c678dd">class</span> AnnotationCRUDTest <span style="color:#999999">{</span>
<span style="color:#c678dd">private</span> InputStream in<span style="color:#999999">;</span>
<span style="color:#c678dd">private</span> SqlSessionFactory factory<span style="color:#999999">;</span>
<span style="color:#c678dd">private</span> SqlSession session<span style="color:#999999">;</span>
<span style="color:#c678dd">private</span> IUserDao userDao<span style="color:#999999">;</span>
<span style="color:#999999">@Before</span>
<span style="color:#c678dd">public</span> <span style="color:#c678dd">void</span> <span style="color:#61aeee">init</span><span style="color:#999999">(</span><span style="color:#999999">)</span> <span style="color:#c678dd">throws</span> Exception<span style="color:#999999">{</span>
in <span style="color:#669900">=</span> Resources<span style="color:#999999">.</span><span style="color:#61aeee">getResourceAsStream</span><span style="color:#999999">(</span><span style="color:#669900">"SqlMapConfig.xml"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
factory <span style="color:#669900">=</span> <span style="color:#c678dd">new</span> SqlSessionFactoryBuilder<span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">.</span><span style="color:#61aeee">build</span><span style="color:#999999">(</span>in<span style="color:#999999">)</span><span style="color:#999999">;</span>
session <span style="color:#669900">=</span> factory<span style="color:#999999">.</span><span style="color:#61aeee">openSession</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
userDao <span style="color:#669900">=</span> session<span style="color:#999999">.</span><span style="color:#61aeee">getMapper</span><span style="color:#999999">(</span>IUserDao<span style="color:#999999">.</span><span style="color:#c678dd">class</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#999999">@After</span>
<span style="color:#c678dd">public</span> <span style="color:#c678dd">void</span> <span style="color:#61aeee">destory</span><span style="color:#999999">(</span><span style="color:#999999">)</span> <span style="color:#c678dd">throws</span> Exception<span style="color:#999999">{</span>
session<span style="color:#999999">.</span><span style="color:#61aeee">commit</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
session<span style="color:#999999">.</span><span style="color:#61aeee">close</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
in<span style="color:#999999">.</span><span style="color:#61aeee">close</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#999999">@Test</span>
<span style="color:#c678dd">public</span> <span style="color:#c678dd">void</span> <span style="color:#61aeee">testSave</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
User user <span style="color:#669900">=</span> <span style="color:#c678dd">new</span> User<span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
user<span style="color:#999999">.</span><span style="color:#61aeee">setUsername</span><span style="color:#999999">(</span><span style="color:#669900">"mybatis annotation"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
user<span style="color:#999999">.</span><span style="color:#61aeee">setAddress</span><span style="color:#999999">(</span><span style="color:#669900">"北京"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
userDao<span style="color:#999999">.</span><span style="color:#61aeee">saveUser</span><span style="color:#999999">(</span>user<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#999999">@Test</span>
<span style="color:#c678dd">public</span> <span style="color:#c678dd">void</span> <span style="color:#61aeee">testUpdate</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
User user <span style="color:#669900">=</span> <span style="color:#c678dd">new</span> User<span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
user<span style="color:#999999">.</span><span style="color:#61aeee">setId</span><span style="color:#999999">(</span><span style="color:#98c379">55</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
user<span style="color:#999999">.</span><span style="color:#61aeee">setUsername</span><span style="color:#999999">(</span><span style="color:#669900">"mybatis annotation"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
user<span style="color:#999999">.</span><span style="color:#61aeee">setAddress</span><span style="color:#999999">(</span><span style="color:#669900">"北京"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
user<span style="color:#999999">.</span><span style="color:#61aeee">setSex</span><span style="color:#999999">(</span><span style="color:#669900">"男"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
user<span style="color:#999999">.</span><span style="color:#61aeee">setBirthday</span><span style="color:#999999">(</span><span style="color:#c678dd">new</span> Date<span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
userDao<span style="color:#999999">.</span><span style="color:#61aeee">updateUser</span><span style="color:#999999">(</span>user<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#999999">@Test</span>
<span style="color:#c678dd">public</span> <span style="color:#c678dd">void</span> <span style="color:#61aeee">testDelete</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
userDao<span style="color:#999999">.</span><span style="color:#61aeee">deleteUser</span><span style="color:#999999">(</span><span style="color:#98c379">54</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#999999">@Test</span>
<span style="color:#c678dd">public</span> <span style="color:#c678dd">void</span> <span style="color:#61aeee">testFindOne</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
User user <span style="color:#669900">=</span> userDao<span style="color:#999999">.</span><span style="color:#61aeee">findById</span><span style="color:#999999">(</span><span style="color:#98c379">55</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
System<span style="color:#999999">.</span>out<span style="color:#999999">.</span><span style="color:#61aeee">println</span><span style="color:#999999">(</span>user<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#999999">@Test</span>
<span style="color:#c678dd">public</span> <span style="color:#c678dd">void</span> <span style="color:#61aeee">testFindByName</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
<span style="color:#5c6370">//List<User> users = userDao.findByName("%Keafmd%");</span>
List<span style="color:#61aeee"><span style="color:#999999"><</span>User<span style="color:#999999">></span></span> users <span style="color:#669900">=</span> userDao<span style="color:#999999">.</span><span style="color:#61aeee">findByName</span><span style="color:#999999">(</span><span style="color:#669900">"Keafmd"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#c678dd">for</span> <span style="color:#999999">(</span>User user <span style="color:#669900">:</span> users<span style="color:#999999">)</span> <span style="color:#999999">{</span>
System<span style="color:#999999">.</span>out<span style="color:#999999">.</span><span style="color:#61aeee">println</span><span style="color:#999999">(</span>user<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#999999">}</span>
<span style="color:#999999">@Test</span>
<span style="color:#c678dd">public</span> <span style="color:#c678dd">void</span> <span style="color:#61aeee">testFindTotal</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
<span style="color:#c678dd">int</span> total <span style="color:#669900">=</span> userDao<span style="color:#999999">.</span><span style="color:#61aeee">findTotal</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
System<span style="color:#999999">.</span>out<span style="color:#999999">.</span><span style="color:#61aeee">println</span><span style="color:#999999">(</span>total<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#999999">}</span>
</code></span>
使用注解实现复杂关系映射开发
实现复杂关系映射之前我们可以在映射文件中通过配置
<resultMap>
来实现,在使用注解开发时我们需要借助@Results 注解,@Result 注解,@One 注解,@Many 注解。
复杂关系映射的注解说明
@Results 注解
代替的是标签<resultMap>
该注解中可以使用单个@Result 注解,也可以使用@Result 集合
@Results({@Result(),@Result()})或@Results(@Result())
@Resutl 注解
代替了<id>
标签和<result>
标签
@Result 中的属性介绍:
@Result 中的属性 | 介绍 |
---|---|
id | 是否是主键字段 |
column | 数据库的列名 |
property | 需要装配的属性名 |
one | 需要使用的@One 注解(@Result(one=@One)())) |
many | 需要使用的@Many 注解(@Result(many=@many)())) |
@One 注解(一对一)
代替了<assocation>
标签,是多表查询的关键,在注解中用来指定子查询返回单一对象。
@One 注解属性介绍:
select 指定用来多表查询的 sqlmapper
fetchType 会覆盖全局的配置参数 lazyLoadingEnabled。
使用格式:@Result(column=" “,property=”",one=@One(select=""))
@Many 注解(多对一)
代替了<collection>
标签,是是多表查询的关键,在注解中用来指定子查询返回对象集合。
注意:聚集元素用来处理“一对多”的关系。需要指定映射的 Java 实体类的属性,属性的 javaType(一般为 ArrayList)但是注解中可以不定义。
使用格式:@Result(property="",column="",many=@Many(select=""))
项目目录