接下来用代码来实现
首先编写一个接口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());
}
结果