mybatis开发原始dao层请阅读我的上一篇博客: mybatis开发dao层的两种方式(原始dao层开发)
接上一篇博客继续介绍mybatis开发dao层的第二种方式: mapper动态代理方式
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的类型相同
1、定义mapper映射文件usermapper.xml(内容同user.xml),需要修改namespace的值为 usermapper接口路径。将usermapper.xml放在classpath 下sqlmapperr目录下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?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= "com.xyfer.mapper.usermapper" > <!-- 根据id查询用户 --> <select id= "getuserbyid" parametertype= "int" resulttype= "com.xyfer.po.user" > select * from user where id = #{id} </select> <!-- 添加用户 --> <insert id= "insertuser" parametertype= "com.xyfer.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> <!-- 修改用户 --> <update id= "updateuser" parametertype= "com.xyfer.po.user" > update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id} </update> <!-- 删除用户 --> <delete id= "deleteuserbyid" parametertype= "int" > delete from user where id=#{id} </delete> </mapper> |
2、usermapper.java接口文件
1 2 3 4 5 6 7 8 9 10 11 12 |
package com.xyfer.mapper;
import com.xyfer.po.user;
public interface usermapper {
public user getuserbyid( int id); //根据id值查询一个用户 public void insertuser(user user); //新增一个用户 public void updateuser(user user); //修改一个用户 public void deleteuser( int id); //删除一个用户
} |
接口定义有如下特点:
(1)usermapper接口方法名和mapper.xml中定义的statement的id相同
(2)usermapper接口方法的输入参数类型和mapper.xml中定义的statement的parametertype的类型相同
(3) usermapper接口方法的输出参数类型和mapper.xml中定义的statement的resulttype的类型相同
3、在sqlmapconfig.xml文件中加载usermapper.xml文件
1 2 3 |
<mappers> <mapper resource= "usermapper.xml" /> </mappers> |
4、测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
package com.xyfer.mapper;
import static org.junit. assert .*;
import java.io.inputstream; import java.util.date;
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.xyfer.po.user;
import junit.framework.testcase;
public class usermappertest extends testcase{
private sqlsessionfactory sqlsessionfactory;
protected void setup() throws exception { sqlsessionfactorybuilder sessionfactorybuilder = new sqlsessionfactorybuilder(); inputstream inputstream = resources.getresourceasstream( "sqlmapconfig.xml" ); sqlsessionfactory = sessionfactorybuilder.build(inputstream); }
@test public void testgetuserbyid() { //获取sqlsession sqlsession sqlsession = sqlsessionfactory.opensession(); //获取usermapper接口代理对象 usermapper usermapper = sqlsession.getmapper(usermapper. class ); //调用代理对象方法 user user = usermapper.getuserbyid( 10 ); //打印结果 system.out.println(user); //关闭sqlsession sqlsession.close(); }
@test public void testinsertuser() { //获取sqlsession sqlsession sqlsession = sqlsessionfactory.opensession(); //获取usermapper接口代理对象 usermapper usermapper = sqlsession.getmapper(usermapper. class ); //新建一个对象 user user = new user(); user.setusername( "小谢" ); user.setsex( "男" ); user.setbirthday( new date()); user.setaddress( "浙江省杭州市" ); //调用代理对象方法 usermapper.insertuser(user); //关闭sqlsession sqlsession.close(); }
@test public void testupdateuser() { //获取sqlsession sqlsession sqlsession = sqlsessionfactory.opensession(); //获取usermapper接口代理对象 usermapper usermapper = sqlsession.getmapper(usermapper. class ); //新建一个对象 user user = new user(); user.setusername( "小谢" ); user.setsex( "男" ); user.setbirthday( new date()); user.setaddress( "上海市" ); //调用代理对象方法 usermapper.updateuser(user); //关闭sqlsession sqlsession.close(); }
@test public void testdeleteuser() { //获取sqlsession sqlsession sqlsession = sqlsessionfactory.opensession(); //获取usermapper接口代理对象 usermapper usermapper = sqlsession.getmapper(usermapper. class ); //调用代理对象方法 usermapper.deleteuser( 6 ); //关闭sqlsession sqlsession.close(); }
} |
以上步骤,完成mybatis框架以mapper动态代理方式开发dao层,并对数据库进行增删改查操作。
需要注意的是,上文提到的config文件夹和sqlmapper文件夹均为资源文件夹(source folder),默认会加载该路径下的文件。希望对大家的学习有所帮助,也希望大家多多支持。
原文链接:http://HdhCmsTestcnblogs测试数据/xyfer1018/p/10117227.html
查看更多关于详解MyBatis开发Dao层的两种方式(Mapper动态代理方式)的详细内容...