Spring框架(九)MyBatis分页实现. 关联表查询和映射. Spring+MyBatis应用

MyBatis

目录
分页实现
    1. 使用分页SQL实现(通用方法)
    2. 使用MyBatis分页器RowBounds
    3. 使用PageHelper组件扩展MyBatis分页(推荐)
关联表查询和映射
    单行关联查询< association>/@One
    多行关联查询< collection>/@Many
Spring+MyBatis应用
    1. 引入spring、mybatis开发环境
    2. 编写MyBatis文件
    3. Spring配置
    4. 创建Spring容器,从容器获取Mapper对象操作

分页实现

1.使用分页SQL实现(通用方法)

@Select("select * from (select t.*,rownum r from (select * from dept order by deptno) t) where r>=#{begin} and r<=#{end}") public List<Dept> findPage(@Param("begin")int begin,@Param("end")int end); 

2.使用MyBatis分页器RowBounds

@Select("select * from dept order by deptno") public List<Dept> findAll();  SqlSession session = factory.openSession(); RowBounds bounds = new RowBounds(3,3);//从0开始抓取3条 List<Dept> list = session.selectList(     "cn.xdl.dao.DeptMapper.findAll",null,bounds); 

3.使用PageHelper组件扩展MyBatis分页(推荐)
    引入pagehelper工具包

    在sqlmap-config.xml配置

    <plugins>     <plugin interceptor="com.github.pagehelper.PageHelper">     </plugin> </plugins> 

    在mapper映射器对象方法前调用

    SqlSession session = factory.openSession(); DeptMapper deptDao = session.getMapper(DeptMapper.class); //设置分页处理 Page page = PageHelper.startPage(2, 3);//显示第1页,一页3条 List<Dept> list = deptDao.findAll(); 

关联表查询和映射
单行关联查询< association>/@One

1.使用多表查询SQL一次性加载数据(性能好、复杂)

@Select({     "select ",     "   e.empno,e.ename,e.deptno,",     "   d.dname,d.loc",     "from emp e ",      "   join dept d on(e.deptno=d.deptno)" }) @Results({     @Result(column="empno",property="empno"),     @Result(column="ename",property="ename"),     @Result(column="deptno",property="deptno"),     @Result(column="deptno",property="dept.deptno"),     @Result(column="dname",property="dept.dname"),     @Result(column="loc",property="dept.loc") }) public List<Emp> find1(); 

2.使用多个单表查询SQL多次执行加载数据(性能低、简单)

@Select("select * from emp order by empno") @Results({     @Result(column="empno",property="empno"),     @Result(column="ename",property="ename"),     @Result(column="deptno",property="deptno"),     @Result(property="dept",column="deptno",         one=@One(select="cn.xdl.dao.DeptMapper.findById")) }) public List<Emp> find2(); 

多行关联查询< collection>/@Many

1.使用多个单表查询SQL多次执行加载

@Select("select * from dept where deptno=#{no}") @Results({     @Result(column="deptno",property="deptno"),     @Result(column="dname",property="dname"),     @Result(column="loc",property="loc"),     @Result(property="emps",javaType=List.class,column="deptno",         many=@Many(select="cn.xdl.dao.EmpMapper.findByDeptNo")) }) public Dept findById1(@Param("no")int deptno); 

2.使用多表查询SQL一次性加载数据
    需要使用XML配置写法完成。

Spring+MyBatis应用

1.引入spring、mybatis开发环境
    spring ioc、aop、dao
    dbcp连接池、ojdbc驱动包
    mybatis工具包
    mybatis-spring整合包
    sqlmap-config.xml
    applicationContext.xml

2.编写MyBatis文件
    实体类
    SQL定义
    Mapper接口

3.Spring配置

    dbcp连接池配置

    <!-- dbcp连接池 --> <bean id="dbcp" class="org.apache.commons.dbcp.BasicDataSource">     <property name="username" value="SCOTT"></property>     <property name="password" value="TIGER"></property>     <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"></property>     <property name="driverClassName" value="oracle.jdbc.OracleDriver"></property> </bean> 

    SqlSessionFactoryBean

    <!-- 在spring创建SqlSessionFactory对象,提供SqlSession --> <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">     <property name="dataSource" ref="dbcp"></property>     <property name="configLocation" value="classpath:sqlmap-config.xml"></property> </bean> 

    MapperScannerConfigurer

    <!-- 在spring创建Mapper映射器对象,id以接口名首字母小写 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">     <property name="sqlSessionFactory" ref="factory"></property>     <property name="basePackage" value="cn.xdl.dao"></property> </bean> 

4.创建Spring容器,从容器获取Mapper对象操作

@Test public void test1(){     String conf = "applicationContext.xml";     ApplicationContext ac =          new ClassPathXmlApplicationContext(conf);     DeptMapper deptDao =          ac.getBean("deptMapper",DeptMapper.class);     List<Dept> list = deptDao.findAll();     for(Dept dept:list){         System.out.println(dept.getDeptno()+" "+dept.getDname());     } } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值