MyBatis接口代理方式 (主流)

接下来用代码来实现

首先编写一个接口mapper

package com.cong.dao;

import com.cong.domain.User;

import java.util.List;

public interface UserMapper {
    public List<User> findAll();
}

然后编写映射文件 注意的是: mapper接口要对应 id要对应方法名 

resultType="user"对应输出的实体对应名 
parameterType=""输入参数也要对应 对应findAll("parameterType"),这了没有参数所以就没有写
<?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="com.cong.dao.UserMapper">
<!--    查询所有-->
    <select id="findAll" resultType="user">
        select * from tb_user
    </select>
</mapper>

然后写一个service层调用dao层

package com.cong.service;

import com.cong.dao.UserMapper;
import com.cong.domain.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 java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class UserService {
    public static void main(String[] args) throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> all = mapper.findAll();
        System.out.println(all);
    }
}

编写一个带参数的查询 注意输入参数int 和输出参数user

findById
<!--    根据id查询实体-->
    <select id="findById" parameterType="int" resultType="user">
        select * from tb_user where id=#{id}
    </select>

编写接口 注意对应参数

    public User findById(int id);

测试

Mybatis映射文件深入

1.动态sql语句

先来看if语句

实际开发中在User实体中输入的信息并不是很全面 这时候就查不出来了 

这时候用if语句就可以解决 ]

下面代码实现

<?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="com.cong.mapper.UserMapper">
<!--    抽取sql语句-->
    <sql id="userSelect">select * from tb_user</sql>
    <!--    查询user实体-->
    <select id="findByUser" resultType="user" parameterType="user">
       <include refid="userSelect"></include>
        <where>
            <if test="id!=0">
                and id=#{id}
            </if>
            <if test="username!=null">
                and username=#{username}
            </if>
            <if test="password!=null">
                and password=#{password}
            </if>
        </where>
    </select>
</mapper>

这样就可以只输入 id 或者name password 其中一个或者两个就可以查出来

测试


    @Test
    public void  test01() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = new User();
       // user.setId(2);
       // user.setUsername("李四");
  //      user.setPassword("234");
        List<User> byUser = mapper.findByUser(user);
        System.out.println(byUser);

    }

 结果

解释一下 关键字

<select id="findByUser" resultType="user" parameterType="user">

这里resultType是输出的结果集要封装的对象 也就回输出参数

parameterType是输入的参数 可以使int 型 或者一个实体user

foreach语句

查询要求 查出id包括1,2,3,4的实体user

SELECT * FROM `tb_user` WHERE id in(1,2,3,4);

代码如下 

关键字解释

<select id="findByIds" parameterType="list" resultType="user">
    <include refid="userSelect"></include>
    <where>
        <foreach collection="list" open="id in(" close=")" item="id" separator=",">
            #{id}
        </foreach>
    </where>
</select>

collection="list"这是关键词如果传递的是一个数组 就用array 这里传递的是一个集合

open关键字是从哪里开始 ,close关键字是从哪里结束,item是list中的每一项叫id名字 separator是分隔符用逗号分隔, 最后取出来 #{id}

    <select id="findByIds" parameterType="list" resultType="user">
        <include refid="userSelect"></include>
        <where>
            <foreach collection="list" open="id in(" close=")" item="id" separator=",">
                #{id}
            </foreach>
        </where>
    </select>

 测试

    @Test
    public void  test02() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(5);
        list.add(6);
        List<Integer> byIds = mapper.findByIds(list);
        System.out.println(byIds);
    }

结果

抽取sql语句实现复用

<sql id="userSelect">select * from tb_user</sql>

 语句引用

 <include refid="userSelect"></include>

Mybatis核心文件深入 

1.分页功能实现

第一步先导入moven分页相关坐标

注意 :这里我导入的不是最新版的 最新版是5.多 但是实现不了这个分页功能 报错,目前还没有解决

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>3.4.2</version>
        </dependency>
        <dependency>
            <groupId>com.github.jsqlparser</groupId>
            <artifactId>jsqlparser</artifactId>
            <version>0.9.1</version>
        </dependency>

第二步 在核心配置文件中声明这个插件

    <!--    配置分分助手插件-->
<plugins>
    <plugin interceptor="com.github.pagehelper.PageHelper">
        <property name="dialect" value="mysql"/>
    </plugin>
</plugins>

测试

package com.cong;

import com.cong.mapper.UserMapper;
import com.cong.pojo.User;
import com.github.pagehelper.PageHelper;
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.ArrayList;
import java.util.List;

public class test {

    @Test
    public void  test02() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //设置分页相关的参数
        PageHelper.startPage(2,3);

        List<User> userList = mapper.findAll();
        for (User user : userList) {
            System.out.println(user);

        }
    }
}

结果 

分页助手相关参数

 @Test
    public void  test02() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //设置分页相关的参数
        PageHelper.startPage(2,3);

        List<User> userList = mapper.findAll();
        for (User user : userList) {
            System.out.println(user);
        }
        PageInfo<User> pageInfo = new PageInfo<>(userList);
        System.out.println("当前页"+pageInfo.getPageNum());
        System.out.println("每页显示条数"+pageInfo.getPageSize());
        System.out.println("总条数"+pageInfo.getTotal());
        System.out.println("总页数"+pageInfo.getPages());
        System.out.println("上一页"+pageInfo.getPrePage());
        System.out.println("下一页"+pageInfo.getNextPage());
        System.out.println("是否第一页"+pageInfo.isIsFirstPage());
        System.out.println("是否最后一页"+pageInfo.isIsLastPage());
    }

结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值