mapper代理

转载于:http://blog.csdn.net/u012373815/article/details/47001015

目录(?)[+]

  1.   Mapper动态代理方式 
    1.    实现步骤
    2.      实现原理
    3. Mapperxml映射文件
    4.     Mapperjava接口文件
    5. 15      加载UserMapperxml文件
    6. 16  测试
    7. 17  总结    再次重申一下和

  Mapper动态代理方式  mapper代理使用的是jdk的代理机制

   实现步骤

1.      mapper.xml 配置文件 (重)

2.      mapper.Java  接口(重)

3.      记得加载映射文件SqlMapConfig.xml

     实现原理

       Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。

Mapper接口开发需要遵循以下规范:(重要)

1、  Mapper.xml文件中的namespacemapper接口的类路径相同。

2、  Mapper接口方法名和Mapper.xml中定义的每个statementid相同

3、  Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql parameterType的类型相同

4、  Mapper接口方法的输出参数类型和mapper.xml中定义的每个sqlresultType的类型相同

Mapper.xml(映射文件)

       定义mapper映射文件UserMapper.xml(内容同Users.xml),需要修改namespace的值为 UserMapper接口路径。将UserMapper.xml放在classpath 下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=cn.hpu.mybatis.mapper.UserMapper>

根据id获取用户信息 –>

    <select id=“findUserById” parameterType=“int”resultType=“cn.hpu.mybatis.po.User”>

       select * from user where id =#{id}

    select>

自定义条件查询用户列表 –>

    <select id=“findUserByUsername” parameterType=“java.lang.String”

           resultType=“cn.hpu.mybatis.po.User”>

      select * from user where username like ‘%${value}%’

    select>

添加用户 –>

    <insert id=“insertUser” parameterType=“cn.hpu.mybatis.po.User”>

    <selectKey keyProperty=“id” order=“AFTER”resultType=“java.lang.Integer”>

       select LAST_INSERT_ID()

    selectKey>

     insert into user(username,birthday,sex,address)

     values(#{username},#{birthday},#{sex},#{address})

    insert>

mapper>

    Mapper.java(接口文件)

/**

 * 用户管理mapper

 */

Public interface UserMapper {

    //根据用户id查询用户信息

    public User findUserById(int id) throws Exception;

    //查询用户列表

    public ListfindUserByUsername(String username) throws Exception;

    //添加用户信息

    public void insertUser(Useruser)throws Exception;

}

接口定义有如下特点:

1.Mapper接口方法名和Mapper.xml中定义的statementid相同

2、 Mapper接口方法的输入参数类型和mapper.xml中定义的statementparameterType的类型相同

3、 Mapper接口方法的输出参数类型和mapper.xml中定义的statementresultType的类型相同

1.1.5      加载UserMapper.xml文件

修改SqlMapConfig.xml文件:

  加载映射文件 –>

  <mappers>

    <mapper resource=“mapper/UserMapper.xml”/>

  mappers>

1.1.6  测试

Public class UserMapperTest extends TestCase {

    private SqlSessionFactory sqlSessionFactory;

    protected void setUp() throws Exception {

       //mybatis配置文件

       String resource = “sqlMapConfig.xml”;

       InputStream inputStream =Resources.getResourceAsStream(resource);

       //使用SqlSessionFactoryBuilder创建sessionFactory

       sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    }

    Public void testFindUserById() throws Exception {

       //获取session

       SqlSession session = sqlSessionFactory.openSession();

//创建usermapper对象,mybatis自动生成mapper代理对象

       UserMapper userMapper =session.getMapper(UserMapper.class);

       //调用代理对象方法

       User user = userMapper.findUserById(1);

       System.out.println(user);

       //关闭session

       session.close();

    }

    @Test

    public voidtestFindUserByUsername() throws Exception {

       SqlSession sqlSession = sqlSessionFactory.openSession();

       UserMapper userMapper =sqlSession.getMapper(UserMapper.class);

       List list =userMapper.findUserByUsername();

       System.out.println(list.size());

    }

Public void testInsertUser() throws Exception {

       //获取session

       SqlSession session = sqlSessionFactory.openSession();

       //获取mapper接口的代理对象

       UserMapper userMapper =session.getMapper(UserMapper.class);

       //要添加的数据

       User user = new User();

       user.setUsername(张三);

       user.setBirthday(new Date());

       user.setSex(“1”);

       user.setAddress(北京市);

       //通过mapper接口添加用户

       userMapper.insertUser(user);

       //提交

       session.commit();

       //关闭session

       session.close();

    }

}

1.1.7  总结    再次重申一下#{}和${}

#{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap。

如果接收简单类型,#{}中可以写成value或其它名称。

#{}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性…的方式获取对象属性值。

 

sql<spanstyle="color:red">使</span><spanstyle="color:red"> {}。

${}接收输入参数,类型可以是简单类型,pojo、hashmap。

如果接收简单类型,${}中只能写成value。

${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性…的方式获取对象属性值。


selectOne和selectList

动态代理对象调用sqlSession.selectOne()和sqlSession.selectList()是根据mapper接口方法的返回值决定,如果返回list则调用selectList方法,如果返回单个对象则调用selectOne方法。

namespace

mybatis官方推荐使用mapper代理方法开发mapper接口,程序员不用编写mapper接口实现类,使用mapper代理方法时,输入参数可以使用pojo包装对象或map对象,保证dao的通用性。

document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js?cdnversion=" + Math.ceil(new Date()/3600000)

你可能感兴趣的:(java项目)