努力尽今夕,少年犹可夸。这篇文章主要讲述mybatis 使用session.getMapper相关的知识,希望能为你提供帮助。
使用selectList,selectOne..的缺陷刚开始学习mybatis的时候,使用selectList或者selectOne,传入要调用的mapper,如果又参数要传递的话,就需要将参数进行封装为对象,或者保存到map中,然后传入一个map或者对象,这样的话,在mapper.xml中才可以接收到传入的参数。
这个过程其实是很麻烦的,使用session.selectOne("......")来调用mapper定义的方法(id),和我们平时开发时调用方法的形式有点相似,但是由于需要处理参数的封装,就显得不爽了。
mybatis提供了getMapper方法,可以很方便的解决这个问题,最终达到的效果就是:使用mapperName.idName(paramlist)的形式来调用mapperName中的idName方法,传入paralist参数。
创建Person.java实体类类的全路径为lixin.gan.pojo.Person
包含id、name、age、addr四个属性。
package lixin.gan.pojo; public class Person { private int id; private String name; private int age; private String addr; //省略了 有参和无参构造方法、getter、setter、toString }
【mybatis 使用session.getMapper】
创建PersonMapper.xml映射文件创建包:lixin.gan.mapper,包内创建PersonMapper.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="lixin.gan.mapper.PersonMapper"> < select id="selectAll"resultType="Person"> < !-- public List< Person> selectAll(); --> select * from person < /select> < select id="selectById" resultType="Person"> < !-- public Person selectById(int id); --> select * from person where id=#{0} < /select> < select id="selectByLimit" resultType="Person"> < !-- public List< Person> selectByLimit(int start, int offset); #{0}获取start, #{1}获取offset --> < !-- select * from person limit #{0}, #{1} --> < !-- public List< Person> selectByLimit(@Param("start")int start,@Param("offset") int offset); --> < !-- 使用注解后,参数会被组装为一个map,然后传入,那么就可以使用#{key}来使用传入的参数了 --> select * from person limit #{start}, #{offset} < /select> < select id="selectByAddr" resultType="Person"> select * from person where addr=#{addr} < /select> < /mapper>
需要注意的是,namespace属性值要设定为当前文件名的全路径(不包含.xml后缀)。parameterType可以省略。
创建PersonMapper.java接口在lixin.gan.mapper包下面,也就是和PersonMapper.xml在一个地方,创建一个PersonMapper.java文件,文件名必须与xml文件保持对应,这里的PersonMapper.xml对应PersonMapper.java。
PersonMapper.java这个接口中,只需要声明xml中定义的方法(与id对应),不需要实现接口。
package lixin.gan.mapper; import java.util.List; import org.apache.ibatis.annotations.Param; import lixin.gan.pojo.Person; public interface PersonMapper { public List< Person> selectAll(); public Person selectById(int id); //public List< Person> selectByLimit(int start, int offset); public List< Person> selectByLimit(@Param("start")int start,@Param("offset") int offset); public List< Person> selectByAddr(String addr); }
创建mybatis.xml配置文件在项目的src目录下创建mybatis.xml,内容如下:
< ?xml version="1.0" encoding="UTF-8"?> < !DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> < configuration> < !-- 配置别名 --> < typeAliases> < package name="lixin.gan.pojo"/> < /typeAliases> < environments default="mysql"> < environment id="mysql"> < transactionManager type="jdbc"> < /transactionManager> < dataSource type="pooled"> < property name="driver" value="https://www.songbingjia.com/android/com.mysql.jdbc.Driver"/> < property name="url" value="https://www.songbingjia.com/android/jdbc:mysql://localhost:3306/mybatis"/> < property name="username" value="https://www.songbingjia.com/android/root"/> < property name="password" value="https://www.songbingjia.com/android/root"/> < /dataSource> < /environment> < /environments> < !-- 引入资源文件 --> < mappers> < mapper resource="lixin/gan/mapper/PersonMapper.xml"> < /mapper> < /mappers> < /configuration>
运行测试代码
package lixin.gan.test; import java.io.IOException; import java.io.InputStream; 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 lixin.gan.mapper.PersonMapper; import lixin.gan.pojo.Person; public class Test { public static void main(String[] args) throws IOException {InputStream config = Resources.getResourceAsStream("mybatis.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config); SqlSession session = factory.openSession(); // 以前的做法 //List< Person> list1 = session.selectList("lixin.gan.mapper.PersonMapper.selectAll"); // 现在的做法 PersonMapper personMapper = session.getMapper(PersonMapper.class); List< Person> list1 = personMapper.selectAll(); for (Person p : list1) { System.out.println(p); }Person p1 = personMapper.selectById(1); System.out.println(p1); List< Person> list2 = personMapper.selectByLimit(2,2); for (Person p : list1) { System.out.println(p); } }}
推荐阅读
- android添加阴影
- Android 内核编译记录
- Sping Cloud项目启动报A component required a bean of type 'com.tianyan.bbc.dao.SecurityUserBaseMapper&
- APP开发,微信第三方登录的介绍
- 易利购社交电商APP开发
- 精英审判下载|精英审判app下载
- Oracle中append与Nologging
- android注解处理技术APT
- Mac上eclipse安卓开发查看SQLite数据库