1 实现原理
Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由MyBatis框架根据解耦定义创建的动态代理对象,代理对象的方法同上边Dao解耦实现类方法。
Mapper接口开发需要遵循的规范:
1 、Mapper.xml文件中的namespace与mapper接口的类路径相同。
2、Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
3、Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
4、Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
Mapper.xml映射文件
定义mapper映射文件UserMapper.xml(内容同Users.xml),需要修改namespace的值为 UserMapper接口路径。将UserMapper.xml放在classpath 下mapper目录 下。
idea:直接在resource创建mapper目录
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net920vip.mapper.UserMapper">
<select id="findUserById" parameterType="int" resultType="net920vip.bean.UserBean">
select * from user where id = #{id}
</select>
<select id="findUserByUsername" parameterType="java.lang.String" resultType="net920vip.bean.UserBean">
select * from user where username like '%${value}%'
</select>
<insert id="insertUser" parameterType="net920vip.bean.UserBean">
insert into user(username,sex,birthday,address) values(#{username},#{sex},#{birthday},#{address})
</insert>
<delete id="deleteUserById" parameterType="int">
delete from user where id = #{id}
</delete>
<update id="updateUserById" parameterType="net920vip.bean.UserBean">
update user set username=#{username},
sex=#{sex},
birthday=#{birthday},
address=#{address}
where id = #{id}
</update>
</mapper>
3 UserMapper.java 接口文件
接口定义有如下特点:
-
Mapper解耦方法和Mapper.xml中定义的statement的id相同
-
Mapper接口方法的输入参数类型和mapper.xml中定义的statement的parameter的类型相同
-
Mapper接口方法的输出参数类型和mapper.xml中定义的statement的resultType的类型相同
package net920vip.mapper;
import net920vip.bean.UserBean;
import java.util.List;
public interface UserMapper {
public UserBean findUserById(int id) throws Exception;
public List<UserBean> findUserByUsername(String username)throws Exception;
}
4 接在UserMapper.xml文件
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
5 测试
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
UserBean user1 = new UserBean(26,"李白", "2",new Date(), "666");
userMapper.updateUserById(user1);
sqlSession.commit();
sqlSession.close();
输出:
UserBean{id=10, username='Charles', sex='1', birthday=Thu Oct 21 00:00:00 GMT+08:00 2021, address='中国'}
gitee地址:
https://gitee.com/net920vip/mybatis-demo01.git
<h2><a id="1__0"></a>1 实现原理</h2>
<p>Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由MyBatis框架根据解耦定义创建的动态代理对象,代理对象的方法同上边Dao解耦实现类方法。</p>
<p>Mapper接口开发需要遵循的规范:</p>
<p>1 、Mapper.xml文件中的namespace与mapper接口的类路径相同。</p>
<p>2、Mapper接口方法名和Mapper.xml中定义的每个statement的id相同</p>
<p>3、Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同</p>
<p>4、Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同</p>
<h2><a id="Mapperxml_14"></a>Mapper.xml映射文件</h2>
<p>定义mapper映射文件UserMapper.xml(内容同Users.xml),需要修改namespace的值为 UserMapper接口路径。将UserMapper.xml放在classpath 下mapper目录 下。</p>
<p>idea:直接在resource创建mapper目录</p>
<pre><div class="hljs"><code class="lang-xml"><span class="hljs-meta"><?xml version="1.0" encoding="UTF-8" ?></span>
<span class="hljs-meta"><!DOCTYPE <span class="hljs-keyword">mapper</span>
<span class="hljs-keyword">PUBLIC</span> <span class="hljs-string">"-//mybatis.org//DTD Mapper 3.0//EN"</span>
<span class="hljs-string">"http://mybatis.org/dtd/mybatis-3-mapper.dtd"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">mapper</span> <span class="hljs-attr">namespace</span>=<span class="hljs-string">"net920vip.mapper.UserMapper"</span>></span>
<span class="hljs-comment"><!-- 根据id查询user --></span>
<span class="hljs-tag"><<span class="hljs-name">select</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"findUserById"</span> <span class="hljs-attr">parameterType</span>=<span class="hljs-string">"int"</span> <span class="hljs-attr">resultType</span>=<span class="hljs-string">"net920vip.bean.UserBean"</span>></span>
select * from user where id = #{id}
<span class="hljs-tag"></<span class="hljs-name">select</span>></span>
<span class="hljs-comment"><!-- 根据用户名模糊查询 --></span>
<span class="hljs-tag"><<span class="hljs-name">select</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"findUserByUsername"</span> <span class="hljs-attr">parameterType</span>=<span class="hljs-string">"java.lang.String"</span> <span class="hljs-attr">resultType</span>=<span class="hljs-string">"net920vip.bean.UserBean"</span>></span>
select * from user where username like '%${value}%'
<span class="hljs-tag"></<span class="hljs-name">select</span>></span>
<span class="hljs-comment"><!-- 新增用户 --></span>
<span class="hljs-tag"><<span class="hljs-name">insert</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"insertUser"</span> <span class="hljs-attr">parameterType</span>=<span class="hljs-string">"net920vip.bean.UserBean"</span>></span>
insert into user(username,sex,birthday,address) values(#{username},#{sex},#{birthday},#{address})
<span class="hljs-tag"></<span class="hljs-name">insert</span>></span>
<span class="hljs-comment"><!-- 删除用户 --></span>
<span class="hljs-tag"><<span class="hljs-name">delete</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"deleteUserById"</span> <span class="hljs-attr">parameterType</span>=<span class="hljs-string">"int"</span>></span>
delete from user where id = #{id}
<span class="hljs-tag"></<span class="hljs-name">delete</span>></span>
<span class="hljs-comment"><!-- 修改用户 --></span>
<span class="hljs-tag"><<span class="hljs-name">update</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"updateUserById"</span> <span class="hljs-attr">parameterType</span>=<span class="hljs-string">"net920vip.bean.UserBean"</span>></span>
update user set username=#{username},
sex=#{sex},
birthday=#{birthday},
address=#{address}
where id = #{id}
<span class="hljs-tag"></<span class="hljs-name">update</span>></span>
<span class="hljs-tag"></<span class="hljs-name">mapper</span>></span>
</code></div></pre>
<h2><a id="3_UserMapperjava__58"></a>3 UserMapper.java 接口文件</h2>
<p>接口定义有如下特点:</p>
<ul>
<li>
<p>Mapper解耦方法和Mapper.xml中定义的statement的id相同</p>
</li>
<li>
<p>Mapper接口方法的输入参数类型和mapper.xml中定义的statement的parameter的类型相同</p>
</li>
<li>
<p>Mapper接口方法的输出参数类型和mapper.xml中定义的statement的resultType的类型相同</p>
</li>
</ul>
<pre><div class="hljs"><code class="lang-java"><span class="hljs-keyword">package</span> net920vip.mapper;
<span class="hljs-keyword">import</span> net920vip.bean.UserBean;
<span class="hljs-keyword">import</span> java.util.List;
<span class="hljs-comment">/**
* 接口文件 对应UserMapper.xml文件
* 用户管理mapper
* */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">interface</span> <span class="hljs-title class_">UserMapper</span> {
<span class="hljs-comment">// 根据id查询user</span>
<span class="hljs-keyword">public</span> UserBean <span class="hljs-title function_">findUserById</span><span class="hljs-params">(<span class="hljs-type">int</span> id)</span> <span class="hljs-keyword">throws</span> Exception;
<span class="hljs-comment">// 根据用户名模糊查询</span>
<span class="hljs-keyword">public</span> List<UserBean> <span class="hljs-title function_">findUserByUsername</span><span class="hljs-params">(String username)</span><span class="hljs-keyword">throws</span> Exception;
}
</code></div></pre>
<h2><a id="4_UserMapperxml_89"></a>4 接在UserMapper.xml文件</h2>
<pre><div class="hljs"><code class="lang-xml"><span class="hljs-tag"><<span class="hljs-name">mappers</span>></span>
<span class="hljs-tag"><<span class="hljs-name">mapper</span> <span class="hljs-attr">resource</span>=<span class="hljs-string">"mapper/UserMapper.xml"</span>/></span>
<span class="hljs-tag"></<span class="hljs-name">mappers</span>></span>
</code></div></pre>
<h2><a id="5__96"></a>5 测试</h2>
<pre><div class="hljs"><code class="lang-java"><span class="hljs-comment">// 配置文件</span>
<span class="hljs-type">String</span> <span class="hljs-variable">resource</span> <span class="hljs-operator">=</span> <span class="hljs-string">"SqlMapConfig.xml"</span>;
<span class="hljs-type">InputStream</span> <span class="hljs-variable">inputStream</span> <span class="hljs-operator">=</span> Resources.getResourceAsStream(resource);
<span class="hljs-comment">// 使用SqlSessionFactoryBuilder从xml配置文件中创建SqlSessionFactory</span>
<span class="hljs-type">SqlSessionFactory</span> <span class="hljs-variable">sqlSessionFactory</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">SqlSessionFactoryBuilder</span>().build(inputStream);
<span class="hljs-comment">// 创建数据库会话实例sqlSession</span>
<span class="hljs-type">SqlSession</span> <span class="hljs-variable">sqlSession</span> <span class="hljs-operator">=</span> sqlSessionFactory.openSession();
<span class="hljs-comment">// ---------------Mappper接口开发测试-------------</span>
<span class="hljs-comment">// 使用动态代理获得UserMapper接口的代理对象</span>
<span class="hljs-type">UserMapper</span> <span class="hljs-variable">userMapper</span> <span class="hljs-operator">=</span> sqlSession.getMapper(UserMapper.class);
<span class="hljs-comment">// 查询</span>
<span class="hljs-comment">//UserBean user = userMapper.findUserById(10);</span>
<span class="hljs-comment">//System.out.println(user);</span>
<span class="hljs-comment">// 新增</span>
<span class="hljs-comment">//UserBean user1 = new UserBean(20,"李白", "2",new Date(), "666");</span>
<span class="hljs-comment">//userMapper.insertUser(user1);</span>
<span class="hljs-comment">//sqlSession.commit();</span>
<span class="hljs-comment">//sqlSession.close();</span>
<span class="hljs-comment">// 修改</span>
<span class="hljs-type">UserBean</span> <span class="hljs-variable">user1</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">UserBean</span>(<span class="hljs-number">26</span>,<span class="hljs-string">"李白"</span>, <span class="hljs-string">"2"</span>,<span class="hljs-keyword">new</span> <span class="hljs-title class_">Date</span>(), <span class="hljs-string">"666"</span>);
userMapper.updateUserById(user1);
sqlSession.commit();
sqlSession.close();
<span class="hljs-comment">// 删除</span>
<span class="hljs-comment">// userMapper.deleteUserById(1);</span>
</code></div></pre>
<p>输出:</p>
<pre><code class="lang-">UserBean{id=10, username='Charles', sex='1', birthday=Thu Oct 21 00:00:00 GMT+08:00 2021, address='中国'}
</code></pre>
<p>gitee地址:</p>
<pre><code class="lang-">https://gitee.com/net920vip/mybatis-demo01.git
</code></pre>
留言