mapper代理方法开发mybatis规范:
1、在mapper.xml中,使namespace等于mapper接口的地址(完全限定名)
2、mapper.java接口中的方法名和mapper.xml中statement的id一致
3、mapper.java接口中方法的输入参数类型和mapper.xml中statement的parameterType指定的类型一致
4、mapper.java接口中方法返回值类型和mapper.xml中statement的resultType指定的类型一致
UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<mapper namespace="mybatis.mapper.UserMapper">
<!-- sql片段一般不包含where -->
<sql id="queryuser">
<if test="userCustom!=null">
<if test="userCustom.sex!=null and userCustom.sex!=‘’">
and user.sex=#{userCustom.sex}
</if>
<if test="userCustom.username!=null and userCustom.username!=‘’">
and user.username=#{userCustom.username}
</if>
</if>
</sql>
<select id="findUserById" parameterType="int" resultType="mybatis.po.User">
select * from user where id=#{id}
</select>
<select id="findUserList" parameterType="mybatis.po.UserQueryVo" resultType="mybatis.po.UserCustom">
select * from user
<!-- 引用sql片段 -->
<where>
<include refid="queryuser"></include>
</where>
</select>
<!--
type:最终映射成的java对象
id:resultMap的唯一标识
-->
<resultMap type="user" id="userResultMap">
<!-- id表示对查询结果集唯一的标识列 -->
<id column="id_" property="id"/>
<!--普通列名映射 -->
<result column="username_" property="username"/>
</resultMap>
<!-- 如果查询出的列名和pojo的属性名不一致,通过定义一个ResultMap对pojo的属性名之间做一个关系映射 -->
<select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">
select id id_,username username_ from user where id=#{value}
</select>
</mapper>
UserMapper.java
package mybatis.mapper;
import java.util.List;
import mybatis.po.User;
import mybatis.po.UserCustom;
import mybatis.po.UserQueryVo;
public interface UserMapper {
public User findUserById(int id);
public List<UserCustom> findUserList(UserQueryVo userQueryVo);
public User findUserByIdResultMap(int id);
}
测试类:
import java.io.IOException;
import java.io.InputStream;
import mybatis.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;
public class UserMapperTest {
SqlSessionFactory sessionFactory = null;
@Before
public void setUp() throws IOException {
String resource = "SqlMapConfig.xml";
InputStream InputStream = Resources.getResourceAsStream(resource);
sessionFactory = new SqlSessionFactoryBuilder().build(InputStream);
}
@Test
public void testfindUserById(){
SqlSession sqlSession=sessionFactory.openSession();
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
User user=userMapper.findUserById(1);
System.out.println(user);
}
@Test
public void testfindUserList(){
SqlSession sqlSession=sessionFactory.openSession();
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
UserQueryVo userQueryVo=new UserQueryVo();
UserCustom userCustom=new UserCustom();
userCustom.setSex("1");
userCustom.setUsername("赵四");
userQueryVo.setUserCustom(userCustom);
List<UserCustom> list=userMapper.findUserList(userQueryVo);
System.out.println(list);
}
}
SqlMapConfig:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 别名 -->
<typeAliases>
<typeAlias type="mybatis.po.User" alias="user" />
<!-- 批量定义别名,别名就是类名 -->
<package name="mybatis.po"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<mapper resource="sqlmap/User.xml"/>
<!-- 批量加载mapper:mapper接口名和mapper.xml名字一致且在同一个目录 -->
<package name="mybatis.mapper"/>
</mappers>
</configuration>