MyBatis学习day3-Mapper动态代理dao层

it2023-11-24  70

MyBatis学习day3-Mapper动态代理dao层

1.为每个Mapper.xml文件创建对应的接口2.将xml文件中的sql语句id存放到接口中3.Mapper接口的使用 之前我们已经学习了通过使用SqlSession提供的各种方法指定某一个Mapper中的sql语句进行各种各样的数据库操作,但是这样的方法并不是很方便,由于是通过字符串的形式指定各种数据库操作标签的id,所以要预先知道Mapper.xml文件中有哪些sql语句;其次调用不同Mapper中的语句时还要加不同的文件名前缀,比较繁琐,所以今天提供了一种新的方式来简化Dao层开发

1.为每个Mapper.xml文件创建对应的接口

首先我们在src下创建com.mybatis.Mapper(改了改了,叫MapInterface好了,不然名字重复总感觉不太舒服,下面图还没改回来,先不用管) 包,用于创建各种Mapper接口。然后我们在这个包里面新建一个接口叫UserMapper,如下图

接下来我们怎么让接口与xml文件联系起来呢?我们需要在xml文件中,在mapper标签中设定namespace属性为接口的全包名,如下图(这个.java的后缀不用写奥、刚开始我搞错了)

2.将xml文件中的sql语句id存放到接口中

做完上述准备工作以后,我们就可以在接口中声明方法指定对应的sql语句了,声明的方法名要与对应sql语句的id相同,返回类型与参数类型也要相同,最后的UserMapper接口如下所示

package com.mybatis.Mapper; import com.mybatis.beans.User; import java.util.List; public interface UserMapper { public User selectUserById(Integer id); public List<User> selectUserByName(String username);//返回多个结果时用List public void insertUser(User u); public void updateUser(User u); public void deleteUserById(User u); }

3.Mapper接口的使用

接着我们就来看看这个接口是如何用来执行sql语句的;

首先我们按照常规的方式得到SqlSession实例,然后调用session的getMapper()函数,其内部会自动生成一个实现对应接口的对象实例,用xml文件中的sql语句重写接口的方法,这个时候我们就可以直接使用了,具体代码如下:

package com.mybatis.test; import com.mybatis.Mappers.UserMapper; import com.mybatis.beans.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.Test; import java.io.IOException; import java.io.InputStream; import java.util.List; public class HelloMyBatis { //入门程序 通过ID查询用户 @Test public void test() throws IOException { //读取配置文件 String resource="sqlMapConfig.xml"; InputStream in=Resources.getResourceAsStream(resource); //生成sqlSessionFactoryBuilder SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder(); //创建sqlSessionFactory SqlSessionFactory factory=builder.build(in); //生产一个sqlSession SqlSession session=factory.openSession(); //操作数据库 UserMapper um=session.getMapper(UserMapper.class); System.out.println("条件查询"); System.out.println("------------------"); User u=um.selectUserById(1); System.out.println(u); System.out.println("模糊查询"); System.out.println("------------------"); List<User> arr=um.selectUserByName("王"); for(User temp:arr){ System.out.println(temp); } //另外两个方法就不展示了,类似 } }

最后的结果如下所示

最新回复(0)