MyBatis - Mapper动态代理开发
采用Mapper动态代理方法只需要编写相应的Mapper接口(相当于Dao接口),那么Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同Dao接口实现类方法。
- Mapper接口开发需要遵循以下规范:
① Mapper.xml文件中的namespace与mapper接口的全类名相同。 ② Mapper接口方法名和Mapper.xml中定义的statement的id相同。 ③ Mapper接口方法的输入参数类型和mapper.xml中定义的statement的parameterType的类型相同。 ④ Mapper接口方法的输出参数类型和mapper.xml中定义的statement的resultType的类型相同。
- 注意:
mapper动态代理开发中,根据返回值类型自动选择selectOne与selectList
Mapper动态代理示例演示
Mapper接口开发方法编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象。
① Mapper接口文件
- map接口中的方法名必须和配置文件中的id属性值是一致的。
package com.sikiedu.mapper;
import java.util.List;
import com.sikiedu.beans.User;
import com.sikiedu.beans.UserVo;
public interface UserMapper {
// 根据ID查询用户
public User selectUserById(Integer id);
// 根据用户名模糊查询用户
public List<User> selectUserLikeUsername(String username);
// 同过包装类UserVo查询用户
public User selectUserByUserVoId(UserVo vo);
// 查询用户总条数
public Integer selectUserCount();
}② 定义mapper映射文件
- namespace必须对应着map接口的全类名。
<?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.sikiedu.mapper.UserMapper">
<!-- 注意这里的 namespace必须对应着map接口的全类名-->
<!-- 查询用户 -->
<select id="selectUserById" parameterType="Integer" resultType="com.sikiedu.beans.User">
SELECT * FROM user WHERE id = #{id}
</select>
<select id="selectUserLikeUsername" parameterType="String" resultType="User">
<!-- SELECT * FROM coke.user WHERE username LIKE ‘%${value}%‘ -->
SELECT * FROM user WHERE username LIKE "%"#{username}"%"
</select>
<!-- 同过包装类UserVo查询用户 -->
<select id="selectUserByUserVoId" parameterType="UserVo" resultType="user">
SELECT * FROM user WHERE id = #{id}
</select>
<!-- selectUserCount -->
<select id="selectUserCount" resultType="Integer">
SELECT COUNT(*) FROM user
</select>
</mapper>③ 在SqlMapConfig.xml中加入映射文件
<!--配置映射器的位置 -->
<mappers>
<!-- 单个配置 -->
<!-- <mapper resource="com/sikiedu/mapper/UserMapper.xml" /> -->
<!-- <mapper url="file:\\\D:\Java\WorkSpace\JavaEE_SSM_Test\ssm_mybatis\src\com\sikiedu\mapper\UserMapper.xml" /> -->
<!-- <mapper class="com.sikiedu.mapper.UserMapper" /> -->
<!-- 多配置-以包的形式;推荐使用 -->
<package name="com.sikiedu.mapper" />
</mappers>④ 测试代码
package com.sikiedu.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
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.sikiedu.beans.Role;
import com.sikiedu.beans.RoleVo;
import com.sikiedu.beans.User;
import com.sikiedu.beans.UserVo;
import com.sikiedu.mapper.RoleMapper;
import com.sikiedu.mapper.UserMapper;
public class MapperTest {
private SqlSessionFactory ssf;
@Before
public void getSqlSessionFactory() throws Exception {
// 读取配置文件
String resource = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
// 需要sqlSessionFactoryBuilder
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
// 创建sqlSessionFactory
ssf = ssfb.build(in);
}
@Test // 根据ID查询用户
public void Test_selectUserById() throws IOException {
// 生产一个sqlSession
SqlSession sqlSession = ssf.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.selectUserById(3);
System.out.println(user);
}
@Test // 根据用户名模糊查询用户
public void Test_selectUserLikeUsername() throws IOException {
// 生产一个sqlSession
SqlSession sqlSession = ssf.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> users = userMapper.selectUserLikeUsername("");
for (User user : users) {
System.out.println(user);
}
}
@Test // 同过包装类UserVo查询用户
public void Test_selectUserByUserVoId() throws IOException {
// 生产一个sqlSession
SqlSession sqlSession = ssf.openSession();
// 操作数据库
UserVo vo = new UserVo();
// vo.setId(44);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.selectUserByUserVoId(vo);
System.out.println(user);
}
@Test // 查询用户总条数
public void Test_selectUserCount() throws IOException {
// 生产一个sqlSession
SqlSession sqlSession = ssf.openSession();
// 操作数据库
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Integer userCount = mapper.selectUserCount();
System.out.println(userCount);
}
}相关推荐
xiuyangsong 2020-07-26
Dullonjiang 2020-07-19
dongxurr 2020-08-08
Dullonjiang 2020-07-30
liqiancao 2020-07-26
helloxusir 2020-07-08
mituan 2020-06-14
xiuyangsong 2020-11-16
Nishinoshou 2020-11-09
jimgreatly 2020-09-01
dongxurr 2020-08-18
Dullonjiang 2020-08-15
Dullonjiang 2020-08-11
Dullonjiang 2020-08-09
yunzhonmghe 2020-08-07
jimgreatly 2020-08-03
jimgreatly 2020-07-27