一 mapper 代理
使用 mapper
代理方式来开发持久层,作为开发者只需要编写对应的接口,不需要去写实现类,mybastis
可以自动生成相应的 mapper
接口代理实现类。
二 开发规范
1、在 mapper.xml
中的namespace
等于mapper
接口的地址
<mapper namespace="_2mapperProxy.StudentMapper"></mapper>
2、mapper
接口中的方法名和mapper.xml
中的statement
的id
一致
<!-- statement的id 为 findById、方法名也为 findById -->
<select id="findById" resultType="_2mapperProxy.Student" parameterType="int">
SELECT * FROM students WHERE id = #{id}
</select>
Student findById(int id);
3、mapper
接口中的方法参数需要和mapper.xml
中statement
的parameterType
类型一致
4、mapper
接口中的方法返回值类型需要和mapper.xml
中statement
的resultType
类型一致
三 demo(附上核心代码)
StudentMapper.class
public interface StudentMapper {
void insertStu(Student student);
Student findById(int id);
void updateStu(Student student);
void deleteById(int id);
}
studentMapper.xml
<mapper namespace="_2mapperProxy.StudentMapper">
<insert id="insertStu" parameterType="_2mapperProxy.Student">
insert into students(name,sal) values(#{name},#{sal})
</insert>
<update id="updateStu" parameterType="_2mapperProxy.Student">
UPDATE students SET name = #{name} and sal=#{sal] WHERE id=#{id}
</update>
<select id="findById" resultType="_2mapperProxy.Student" parameterType="int">
SELECT * FROM students WHERE id = #{id}
</select>
<delete id="deleteById" parameterType="int">
DELETE FROM students WHERE id = #{id}
</delete>
</mapper>
TestStudent.class
public class TestStudent {
private SqlSessionFactory sqlSessionFactory;
//在执行测试用例前执行
@Before
public void setUp() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testInsert() {
SqlSession sqlSession = sqlSessionFactory.openSession();
StudentMapper student = sqlSession.getMapper(StudentMapper.class);
Student stu = new Student();
stu.setName("哈哈");
stu.setSal(70.0);
student.insertStu(stu);
sqlSession.commit();
}
@Test
public void testDeleteById() {
SqlSession sqlSession = sqlSessionFactory.openSession();
StudentMapper student = sqlSession.getMapper(StudentMapper.class);
student.deleteById(2);
}
}
四 局限性
mapper
接口方法参数只能有一个,如果想要传入多个参数就必须传入一个包装性的 pojo 类。但使用包装类型不适合业务的拓展。
完整代码地址:点我下载