mybatis使用总结
1.使用方法
1.1. dao层接口
@Repository
public interface TestDao {
List<Person> selectPeople();
}
1.2. dao层实现类
public class TestDaoImpl implements TestDao {
public SqlSession sqlSession;
public TestDaoImpl(SqlSession sqlSession) {
this.sqlSession = sqlSession;
}
@Override
public List<Person> selectPeople() {
return sqlSession.selectList("TestDao.selectPeople");
}
}
1.3. mapper.xml
<?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="TestDao">
<select id="selectPeople" resultType="top.xuqian.dto.Person">
select * from people;
</select>
</mapper>
1.4. 测试
public class TestDaotest {
public TestDao testDao;
public SqlSession sqlSession;
@Before
public void setUp(){
try {
// InputStream is = new FileInputStream("mybatis.xml");
// 根据xml构建sqlSessionFactoryBuilder
// SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
// 构建sqlSessionFactory
// SqlSessionFactory ssf = ssfb.build(is);
// spring结合mybatis后,可直接获取SqlSeesionFacetory
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("spring/spring-mybatis.xml");
SqlSessionFactory ssf = (SqlSessionFactory)ac.getBean("sqlSessionFactory");
SqlSession sqlSession = ssf.openSession();
this.testDao = new TestDaoImpl(sqlSession);
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testSelect(){
List<Person> list = testDao.selectPeople();
System.out.println(list);
}
}
2.mybatis动态代理
实际使用中,我们并不会写dao层的接口实现类,因为mybatis提供了动态代理,只需修改之前的mapper.xml,删除接口实现类 TestDaoImpl.java
2.1 修改后的mapper.xml
<?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">
<!--使用动态代理,命名空间必须使用dao接口的全路径-->
<mapper namespace="top.xuqian.dao.TestDao">
<select id="selectPeople" resultType="top.xuqian.dto.Person">
select * from people;
</select>
</mapper>
2.2 修改后的测试用例
public class TestDaotest {
public TestDao testDao;
public SqlSession sqlSession;
@Before
public void setUp(){
try {
// InputStream is = new FileInputStream("mybatis.xml");
// 根据xml构建sqlSessionFactoryBuilder
// SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
// 构建sqlSessionFactory
// SqlSessionFactory ssf = ssfb.build(is);
// spring结合mybatis后,可直接获取SqlSeesionFacetory
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("spring/spring-mybatis.xml");
SqlSessionFactory ssf = (SqlSessionFactory)ac.getBean("sqlSessionFactory");
SqlSession sqlSession = ssf.openSession();
// this.testDao = new TestDaoImpl(sqlSession);
this.testDao = sqlSession.getMapper(TestDao.class);
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testSelect(){
List<Person> list = testDao.selectPeople();
System.out.println(list);
}
}
2.3 动态代理总结
- mapper.xml的命名空间必须是dao层接口的全路径
- sql的id必须与方法名一致
- resultType要与方法返回值一致(有可能不一样,List< T >则是T类型)
- parameterType要与方法入参数一致(有可能不一样,List< T >则是T类型)
参考 https://blog.csdn.net/hellozpc/article/details/80878563#1JDBC_10