Mapper代理的开发方式,程序员只需要编写mapper接口(相当于dao接口)即可,MyBatis会自动为mapper接口生成动态代理实现类。
一、开发规范
1、mapper接口的全限定名要和mapper映射文件的namespace的值相同
2、mapper接口的方法名称要和mapper映射文件中的statement的id相同
3、mapper接口的方法参数一般只能有一个,且类型要和mapper映射文件中statement的parameterType的值保持一致
(传一个参数,可以直接以键值对方式匹配参数;如果想传多个参数,statement中不能写parameterType,SQL语句使用#{0}、#{1}```等形式占位符或者接口方法中使用注解@Param("username") String username形式
4、mapper接口的返回值类型要和mapper映射文件中statement的resultType值或resultMap中的type值保持一致
二、全局配置文件通过mapper的resource属性引入mapper映射文件
1、编写mapper接口
package com.hjp.mapper; import com.hjp.po.User; public interface UserMapper { User findUserById(int id) throws Exception; void insertUser(User user) throws Exception; }
2、编写mapper映射文件,注意namespace为接口的全限定名
<?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.hjp.mapper.UserMapper"> <select id="findUserById" parameterType="int" resultType="com.hjp.po.User"> SELECT * FROM USER WHERE id=#{id} </select> <insert id="insertUser" parameterType="com.hjp.po.User"> INSERT INTO USER (username,sex,birthday,address) VALUES (#{userName},#{sex},#{birthday},#{address}) </insert> </mapper>
3、将映射文件加入全局配置文件
4、测试代码
import com.hjp.mapper.UserMapper; import com.hjp.po.User; 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 java.io.InputStream; import java.util.Date; public class MapperDemoTest { private SqlSessionFactory factory; @Before public void setUp() throws Exception { String resource="sqlMapConfig.xml"; InputStream inputStream= Resources.getResourceAsStream(resource); factory=new SqlSessionFactoryBuilder().build(inputStream); } @Test public void findUserById() throws Exception { SqlSession session=factory.openSession(); //创建mapper代理对象 UserMapper userMapper=session.getMapper(UserMapper.class); User user=userMapper.findUserById(1); System.out.println(user); session.close(); } @Test public void insertUser() throws Exception { SqlSession session=factory.openSession(); UserMapper userMapper=session.getMapper(UserMapper.class); User user=new User(); user.setUserName("流水年华"); user.setSex("1"); user.setBirthday(new Date()); user.setAddress("bj"); userMapper.insertUser(user); session.commit(); session.close(); } }
三、全局配置属性设置
1、properties,如设置数据库配置信息
db.properties文件内容如下
在全局配置文件中使用如下
2、typeAliases定义别名
1)单个别名定义,全局配置文件sqlMapConfig.xml添加全局属性如下
在mapper映射文件UserMapper.xml中可以修改根据ID查询用户配置如下
2)批量别名定义,全局配置文件如下
3、mapper四种映射器配置方式(注意在IDEA Maven项目下,3)和4)配置有问题,因为IDEA Maven项目默认不会把src下除Java外的文件打包进class文件中,详见···)
1)使用相对路径,如前面例子中一样
<mapper resource="mapper/UserMapper.xml"></mapper>
2)使用绝对路径(不推荐)
<mapper url="file:///F:IDEAWebmybatisdemosrcmain esourcesmapperUserMapper.xml"></mapper>
3)使用mapper接口全限定名,但这要求映射文件名称要和接口名称相同,并且和接口在同一个包下
<mapper class="com.hjp.mapper.UserMapper"></mapper>
4)注册指定包下所有映射文件,但这要求映射文件名称要和接口名称相同,并且和接口在同一个包下(推荐),如下
<package name="com.hjp.mapper"/>