您的位置:首页 > 移动开发

[mybatis]Mapper接口代理开发

2016-03-08 20:57 561 查看
Mapper代理实现思想:
1. 首先映射文件的namespace命名空间必须是Mapper的完全限定名
2. 其次每个statement的id必须与Mapper里的方法名一致
3. 然后映射文件中的输入参数与输出参数又与Mapper里的方法对应
4. 最后根据映射文件中的每个statement标签头判断是执行哪个CRUD

所以Mapper代理在实现接口中的方法时,
1 : 代理方法的返回值,
2 : 方法体中Session要执行哪个方法
3 : 以及方法体中Session执行CRUD方法的第一个参数(statement的id),第二个参数( 4:代理方法传参进来)
就都明确了


/*
* UserMapper接口开发规范 :
*      1 : 接口方法名为UserMapper.xml中statement的id值
*      2 : 接口方法参数为UserMapper.xml中parameterType对应的值
*      3 : 接口方法返回值为UserMapper.xml中resultType对应的值
*/

/*
* 代理对象内部怎样调用selectOne或selectList?
*
* 1 : 如果mapper方法返回单个pojo对象(非集合对象)
*       代理对象内部掉用selectOne()
* 2 : 如果mapper方法返回集合对象
*     代理对象内部调用selectList()
*
*/

/*
* mapper接口方法参数只能有一个是否影响开发 ?
* 系统框架中,dao层的代码是被业务层公用的,
* 即使mapper接口方法只能有一个参数,
* 可以使用包装类型的pojo满足不同的业务方法的需求
*/


首先是UserMapper.xml

<?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">
<!--
namespace : 命名空间为UserMapper接口的完全限定名
-->
<mapper namespace="mapper.UserMapper" >
<!-- 根据id查找用户 -->
<select id="findUserById" parameterType="int" resultType="Bean.User">
SELECT * FROM USER WHERE ID=#{id}
</select>

<!-- 根据名字查找用户集合 -->
<select id="findUserByName" parameterType="java.lang.String" resultType="Bean.User">
SELECT * FROM USER WHERE USERNAME LIKE '%${value}%'
</select>

<!-- 插入一条记录 -->
<insert id="insertUser" parameterType="Bean.User">
insert into user(id,username,birthday,sex,address)
<!-- #{}中的参数名必须为User对象的属性名 -->
value(#{id},#{username},#{birthday},#{sex},#{address})
</insert>

<!-- 根据id删除一个用户 -->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id = #{id}
</delete>

<!-- 根据id更新用户 -->
<update id="updateUser" parameterType="Bean.User">
update user
set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}
where id = #{id}
</update>

</mapper>


Mapper代理

import Bean.User;

/**
* @Description: UserMapper接口
* @author 佳。
* @date 2016年3月8日
*/
public interface UserMapper {

//根据id查找用户
public User findUserById (int id) ;

//根据名字查找用户集合
public List<User> findUserByName (String username) ;

//插入一条记录
public void insertUser (User user) ;

//根据id删除一个用户
public void deleteUser (int id);

//根据id删除一个用户
public void updateUser (User user) ;

}


MapperTest测试类

package mapper.text;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

import mapper.UserMapper;

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 Bean.User;

public class MapperTest {
private SqlSessionFactory sessionFactory;

@Before
public void before () throws IOException{
//mybaties配置文件
String resource = "SqlMapConfig.xml";
//获取mybaties配置文件的流
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建会话工厂,传入mybaties的配置信息
sessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
}

//根据id查找用户
@Test
public void testFindUserById (){
//创建session
SqlSession session = sessionFactory.openSession();
//通过session获取mapper代理
UserMapper mapper = session.getMapper(UserMapper.class);
//调用代理接口中的方法
User user = mapper.findUserById(3);
//输出user
System.out.println(user);
}

//根据名字查找用户集合
@Test
public void testFindUserByName (){
//创建session
SqlSession session = sessionFactory.openSession();
//通过session获取mapper代理
UserMapper mapper = session.getMapper(UserMapper.class);
//根据名字查找用户集合
List<User> list = mapper.findUserByName("用");
System.out.println(list);
}

//新建一个用户
@Test
public void testInsertUser (){
//创建session
SqlSession session = sessionFactory.openSession();
//通过session获取mapper代理
UserMapper mapper = session.getMapper(UserMapper.class);
//新建一个用户
User user = new User(10,"adm","男",new Date(),"地址");
mapper.insertUser(user);
session.commit();
}

//根据id删除一个用户
@Test
public void testDeleteUser (){
//创建session
SqlSession session = sessionFactory.openSession();
//通过session获取mapper代理
UserMapper mapper = session.getMapper(UserMapper.class);

mapper.deleteUser(10);
session.commit();
}

//更新一个用户
@Test
public void testUpdateUser (){
//创建session
SqlSession session = sessionFactory.openSession();
//通过session获取mapper代理
UserMapper mapper = session.getMapper(UserMapper.class);

//更新一个用户
User user = new User(6,"adm","男",new Date(),"地址");
mapper.updateUser(user);
session.commit();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: