Mybatis——Mapper动态代理

来源:互联网 发布:淘宝上进货 编辑:程序博客网 时间:2024/06/06 17:40

(一)相应的规则

Mapper动态代理需要创建Mapeer接口和与其相对应的XML文件。

一般我们可以先创建好xml文件,因为:

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(UserMapper.xml)

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.ydalien.mapper.UserMapper"><!-- 根据id获取用户信息 --><!-- parameterType:表示输入类型resultType:表示输出类型,这里是自定义的POJO类型 --><select id="findUserById" parameterType="int" resultType="com.ydalien.po.User">select * from user where id = #{id}</select><!-- 自定义条件查询用户列表 --><select id="findUserByUsername" parameterType="java.lang.String"  resultType="com.ydalien.po.User">   select * from user where username like '%${value}%'  </select><!-- 添加用户 --><insert id="insertUser" parameterType="com.ydalien.po.User"><selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">select LAST_INSERT_ID() </selectKey>  insert into user(username,sex,address)   values(#{username},#{sex},#{address})</insert><!-- 删除用户 --><delete id="deleteUserById" parameterType="int">delete from user where id=#{id}</delete><!-- 更新用户 --><update id="updateUser" parameterType="com.ydalien.po.User">update user set username=#{username},sex=#{sex},address=#{address}where id=#{id}</update></mapper>

(三)mapper接口(UserMapper.java)

package com.ydalien.mapper;import com.ydalien.po.User;public interface UserMapper {//通过id查用户public User findUserById(int id) throws Exception;//插入用户public void insertUser(User user) throws Exception;}

(四)将mapper加入全局配置文件(SqlMapConfig.xml)

<!-- 加载映射文件 --><mappers><mapper resource="com/ydalien/mapper/UserMapper.xml"/></mappers>


(五)测试类(UserMapperTest.java)

package com.ydalien.test;import static org.junit.Assert.*;import java.io.InputStream;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Before;import org.junit.Test;import com.ydalien.mapper.UserMapper;import com.ydalien.po.User;public class UserMapperTest {private SqlSessionFactory sqlSessionFactory;@Beforepublic void setUp() throws Exception {String resource = "sqlMapConfig.xml";InputStream inputStream = Resources.getResourceAsStream(resource);//使用SqlSessionFactoryBuilder创建sessionFactorysqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);}@Testpublic void testFindUserById() throws Exception {//获取sessionSqlSession session = sqlSessionFactory.openSession();//获取mapper接口的代理对象UserMapper userMapper = session.getMapper(UserMapper.class);//调用代理对象方法User user = userMapper.findUserById(1);System.out.println(user);//关闭sessionsession.close();}}




0 0