使用mybatis开发Dao有两种方式,
1.原始开发:需要写dao层接口,实现类,mapper文件,发现代码量很大,而且有很多问题。重复性很强吗,但是也有不变的地方,因此有mapper动态代理开发
2.mapper动态代理开发:
开发规范:
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指定的类型一致。
然后便可以只写接口和mapper.xml文件和测试文件即可完成,大大的缩减了代码量。
代码:
SqlMapConfig.xml和User.xml已经在上面的博客中写过,不再post。
接口:
1 package com.me.mybatis.mapper; 2 3 import com.me.mybatis.pojo.User; 4 5 public interface UserMapper { 6 //遵循四个原则 7 //1.接口方法名==user.xml文件中的id名 8 //2.返回值类型与mapper.xml文件中的返回值类型要一致 9 //3.方法的入参类型与mapper.xml中入参的类型一致 10 //4.mapper.xml文件的namespace与接口绑定在一起 11 public User findUserById(Integer id); 12 }
测试类:
1 package com.me.mybatis.junit; 2 3 import java.io.InputStream; 4 5 import org.apache.ibatis.io.Resources; 6 import org.apache.ibatis.session.SqlSession; 7 import org.apache.ibatis.session.SqlSessionFactory; 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 9 import org.junit.jupiter.api.Test; 10 11 import com.me.mybatis.mapper.UserMapper; 12 import com.me.mybatis.pojo.User; 13 14 public class MybatisMapperTest { 15 16 @Test 17 void testMapper() throws Exception { 18 // 加载核心配置文件 19 String resource = "SqlMapConfig.xml"; 20 InputStream resourceAsStream = Resources.getResourceAsStream(resource); 21 // 创建sqlsessionFactory 22 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); 23 // 创建sqlsession 24 SqlSession openSession = sqlSessionFactory.openSession(); 25 //sqlsession生成一个实现类 26 UserMapper mapper = openSession.getMapper(UserMapper.class); 27 //利用接口调方法 28 User user = mapper.findUserById(10); 29 System.out.println(user); 30 } 31 32 }
这样便可完成任务。
注意,user.xml文件有改动:
运行结果: