[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(); } }
相关文章推荐
- Android提供的layout文件存放位置
- 微信开发系列(五)_消息,事件的处理
- Android Studio安装过程中出现一些问题的解决方法(都已解决)
- android I/O Performance 的一些查看方法
- iOS设计模式--原型模式
- 4.4.3 Android animation制作 跳动的心
- android editText 软键盘enter键图标的设置
- iOS多线程之线程状态
- cocos2d-x之多个移动的小球
- Android中滑屏实现----手把手教你如何实现触摸滑屏以及Scroller类详解
- 浅谈Android下的Bitmap之大Bitmap加载
- Android中Scroller类的分析
- 关于android百度地图开发LocationClient对象不能启动的问题解决
- Unity3d 加密 Assembly-CSharp.dll (Android平台) 全记录
- ios微信登录
- Android Studio配置SVN服务器
- android中页面的跳转成功,但是页面上的布局丢失问题
- android自定义布局
- Android Fragment 你应该知道的一切
- Android Fragment 真正的完全解析(下)