1、数据准备

2、编写实体类

package com.forest.owl.entity;

import java.util.Date;

public class User {
    private Long id;
    private String userName;
    private String userPassword;
    private String userPhone;
    private String userEmail;
    private byte[] headImg;
    private Date createTime;
    private Date updateTime;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserPassword() {
        return userPassword;
    }

    public void setUserPassword(String userPassword) {
        this.userPassword = userPassword;
    }

    public String getUserPhone() {
        return userPhone;
    }

    public void setUserPhone(String userPhone) {
        this.userPhone = userPhone;
    }

    public String getUserEmail() {
        return userEmail;
    }

    public void setUserEmail(String userEmail) {
        this.userEmail = userEmail;
    }

    public byte[] getHeadImg() {
        return headImg;
    }

    public void setHeadImg(byte[] headImg) {
        this.headImg = headImg;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

}

3、编写相对应的Mapper接口

package com.forest.owl.mapper;

import com.forest.owl.entity.User;

import java.util.List;

public interface UserMapper {

    User selectUserById(Long id);

    List<User> selectAllUser();

}

4、编写UserMapper.xml

在resources中加入文件夹com/forest/owl/mapper,在此文件夹中添加UserMapper文件

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.forest.owl.mapper.UserMapper">
    <resultMap id="userMap" type="com.forest.owl.entity.User">
        <id property="id" column="id" />
        <result property="userName" column="user_name" />
        <result property="userPassword" column="user_password" />
        <result property="userPhone" column="user_phone" />
        <result property="userEmail" column="user_email" />
        <result property="headImg" column="head_img" jdbcType="BLOB" />
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP" />
        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP" />
    </resultMap>

    <select id="selectUserById" resultMap="userMap">
        SELECT * FROM user WHERE id=#{id}
    </select>

    <select id="selectAllUser" resultType="com.forest.owl.entity.User">
        SELECT id, user_name, user_password, user_phone, user_email, head_img, create_time, update_time
        FROM user
    </select>
</mapper>

5、修改mybatis-config.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>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <typeAliases>
        <package name="com.forest.owl.entity"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC">
                <property name="" value=""/>
            </transactionManager>
            <dataSource type="UNPOOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/forest?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <package name="com.forest.owl.mapper"/>
    </mappers>
</configuration>

6、编写测试代码

package com.forest.owl;

import com.forest.owl.entity.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.BeforeClass;

import java.io.IOException;
import java.io.Reader;

public class BaseMapperTest {
    private static SqlSessionFactory sqlSessionFactory;

    @BeforeClass
    public static void init(){
        try {
            Reader reader = Resources.getResourceAsReader("mybatis.config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public SqlSession getSqlSession(){
        SqlSession sqlSession = sqlSessionFactory.openSession();
        return sqlSession;
    }
}
package com.forest.owl;

import com.forest.owl.entity.User;
import com.forest.owl.mapper.UserMapper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class MapperTest extends BaseMapperTest{

    @Test
    public void UserMapperTest(){
        SqlSession sqlSession = getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = userMapper.selectUserById((long) 3);
        System.out.println(user.getUserName());

        List<User> userList = userMapper.selectAllUser();
        userList.stream().forEach(i -> System.out.println(i.getUserName()));
    }
}

7、关联查询

假设在用户信息查询的基础上,我还想查询用户的角色与权限,该如何?

首先定义角色与权限的实体类

package com.forest.owl.entity;

import java.util.Date;

public class Role {
    private Long id;
    private String roleName;
    private int enabled;
    private Long createBy;
    private Date createTime;
    private Long updateBy;
    private Date updateTime;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getRoleName() {
        return roleName;
    }

    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }

    public int getEnabled() {
        return enabled;
    }

    public void setEnabled(int enabled) {
        this.enabled = enabled;
    }

    public Long getCreateBy() {
        return createBy;
    }

    public void setCreateBy(Long createBy) {
        this.createBy = createBy;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Long getUpdateBy() {
        return updateBy;
    }

    public void setUpdateBy(Long updateBy) {
        this.updateBy = updateBy;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

}
package com.forest.owl.entity;

import java.util.Date;

public class Privilege {
    private Long id;
    private String privilegeName;
    private String privilegeUrl;
    private Long createBy;
    private Date createTime;
    private Long updateBy;
    private Date updateTime;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getPrivilegeName() {
        return privilegeName;
    }

    public void setPrivilegeName(String privilegeName) {
        this.privilegeName = privilegeName;
    }

    public String getPrivilegeUrl() {
        return privilegeUrl;
    }

    public void setPrivilegeUrl(String privilegeUrl) {
        this.privilegeUrl = privilegeUrl;
    }

    public Long getCreateBy() {
        return createBy;
    }

    public void setCreateBy(Long createBy) {
        this.createBy = createBy;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Long getUpdateBy() {
        return updateBy;
    }

    public void setUpdateBy(Long updateBy) {
        this.updateBy = updateBy;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

}

在User实体类中添加Role与Privilege属性

    private Role role;
    private Privilege privilege;

    public Role getRole() { return role; }
    public void setRole(Role role) { this.role = role; }
    public Privilege getPrivilege() { return privilege; }
    public void setPrivilege(Privilege privilege) { this.privilege = privilege; }

修改UserMapper.xml文件

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.forest.owl.mapper.UserMapper">
    <resultMap id="userMap" type="com.forest.owl.entity.User">
        <id property="id" column="id" />
        <result property="userName" column="user_name" />
        <result property="userPassword" column="user_password" />
        <result property="userPhone" column="user_phone" />
        <result property="userEmail" column="user_email" />
        <result property="headImg" column="head_img" jdbcType="BLOB" />
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP" />
        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP" />
        <association property="role">
            <result property="roleName" column="role_name" />
        </association>
        <association property="privilege">
            <result property="privilegeName" column="privilege_name" />
            <result property="privilegeUrl" column="privilege_url" />
        </association>
    </resultMap>

    <select id="selectUserById" resultMap="userMap">
        SELECT u.*,
        r.role_name,
        p.privilege_name,
        p.privilege_url
        FROM user u
        INNER JOIN user_role ur on ur.user_id=u.id
        INNER JOIN role r on r.id=ur.role_id
        INNER JOIN role_privilege rp on rp.role_id=r.id
        INNER JOIN privilege p on p.id=rp.privilege_id
        WHERE u.id=#{id}
    </select>

    <select id="selectAllUser" resultType="com.forest.owl.entity.User">
        SELECT u.id,
        u.user_name,
        u.user_password,
        u.user_phone,
        u.user_email,
        u.head_img,
        u.create_time,
        u.update_time,
        r.role_name as "role.roleName",
        p.privilege_name as "privilege.privilegeName",
        p.privilege_url as "privilege.privilegeUrl"
        FROM user u
        INNER JOIN user_role ur on ur.user_id=u.id
        INNER JOIN role r on r.id=ur.role_id
        INNER JOIN role_privilege rp on rp.role_id=r.id
        INNER JOIN privilege p on p.id=rp.privilege_id
    </select>
</mapper>

编写测试类

    @Test
    public void UserMapperTest(){
        SqlSession sqlSession = getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = userMapper.selectUserById((long) 3);
        System.out.println(user.getUserName());
        System.out.println(user.getRole().getRoleName());
        System.out.println(user.getPrivilege().getPrivilegeName());
        System.out.println(user.getPrivilege().getPrivilegeUrl());

        List<User> userList = userMapper.selectAllUser();
        userList.stream().forEach(i -> {
            System.out.println(i.getUserName());
            System.out.println(i.getRole().getRoleName());
            System.out.println(i.getPrivilege().getPrivilegeName());
            System.out.println(i.getPrivilege().getPrivilegeUrl());
        });
    }

 8、新增数据

在UserMapper接口中新增方法

int insertUser(User user);

UserMapper.xml

<insert id="insertUser">
    INSERT INTO user (user_name, user_password, user_phone, user_email, head_img, create_time, update_time)
    VALUES( #{userName},  #{userPassword}, #{userPhone}, #{userEmail}, #{headImg}, #{createTime}, #{updateTime} )
</insert>

测试代码

    @Test
    public void UserMapperTest(){
        SqlSession sqlSession = getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        User user = new User();
        user.setUserName("新用户名");
        user.setUserPassword("密码");
        user.setUserPhone("手机号");
        user.setUserEmail("邮箱号");

        int result = userMapper.insertUser(user);
        System.out.println(result);
        sqlSession.commit();
    }

因为SqlSessionFactory.openSession()是不自动提交的,故此处需要手动提交,否则无效。

对于想要得到插入数据的主键,可以设置mybatis-config.xml的配置项useGeneratedKeys为true

    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <setting name="useGeneratedKeys" value="true"/>
    </settings>

然后在<insert />配置中添加keyProperty="id",在数据插入成功后,mybatis会将主键回写至id里,届时使用user.getId()获取即可。

    <insert id="insertUser" keyProperty="id">
        INSERT INTO user (user_name, user_password, user_phone, user_email, head_img, create_time, update_time)
        VALUES( #{userName},  #{userPassword}, #{userPhone}, #{userEmail}, #{headImg}, #{createTime}, #{updateTime} )
    </insert>

mybatis入门篇:Mapper接口/关联查询/新增数据的更多相关文章

  1. mybatis入门篇:通过SqlSession.selectList进行数据查询

    作为一个java菜鸟,早就从慕课网中学到一些基本的mybatis的用法,但是一直不成体系,懵懵懂懂,既然正式入了java这个坑,就打算好好学学,所以买了本<MyBatis从入门到精通>,在 ...

  2. Mybatis学习总结四(关联查询)

    一.一对一查询 实例:查询所有订单信息,关联查询下单用户信息. Method1:使用resultType,定义订单信息po类,此po类中包括了订单信息和用户信息. public class Order ...

  3. mybatis如何根据mapper接口生成其实现类

    SpringBoot集成mybatis mybatis的statement的解析与加载 mybatis如何根据mapper接口生成其实现类 mybatis的mapper返回map结果集 mybatis ...

  4. idea插件(mybatis框架下mapper接口快速跳转对应xml文件)亲测好用!

    我相信目前在绝大部分公司里,主要使用的框架是S(spring)S(spring MVC)M(mybatis),其中mybatis总体架构是编写mapper接口,框架扫描其对应的mapper.xml文件 ...

  5. mybatis入门篇:Mybatis高级查询

    1.ResultMap的association与collection association与collection功能类似,区别是一对一与一对多,这里以association为例. 首先说明一下需求: ...

  6. MyBatis入门学习教程-实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  7. Mybatis入门篇之结果映射,你射准了吗?

    目录 前言 什么是结果映射? 如何映射? 别名映射 驼峰映射 配置文件开启驼峰映射 配置类中开启驼峰映射 resultMap映射 总结 高级结果映射 关联(association) 例子 关联的嵌套 ...

  8. MyBatis入门篇

    一.什么是MyBatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改 ...

  9. mybatis入门篇:Mybatis注解方式的基本用法

    @Select 1.mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <! ...

随机推荐

  1. css隐藏滚动条依旧可以滚动

    在做企业页面的时候,大部分页面都应该是活的,不应该写死,因为要从后台拿数据进行填充.而后台的数据是不确定的,有时候会让我们的容器撑得很大.这时候我们需要隐藏掉滚动条达到美观或者其他布局效果,隐藏掉单个 ...

  2. Android 音视频深入 十 FFmpeg给视频加特效(附源码下载)

    项目地址,求starhttps://github.com/979451341/Audio-and-video-learning-materials/tree/master/FFmpeg(AVfilte ...

  3. 用python做一个烟花show

    烟花效果如图(截了几个时刻的静态图): 源代码如下: # -*- coding: utf-8 -*- # Nola import tkinter as tk from PIL import Image ...

  4. vue项目目录结构

    VUE项目目录结构 如上图所示,我们的目录结构就是这样的了. 目录/文件 说明 build 这个是我们最终发布的时候会把代码发布在这里,在开发阶段,我们基本不用管. config 配置目录,默认配置没 ...

  5. RSA加密及加签

    1.对方要求我们的私钥是pkcs8格式,但是实际的公钥没有用pkcs8转换之后的私钥完成,所以是可以不是pkcs8的格式的.我们加签跟格式没有关系. 2.数据格式很重要,to_mpint而非crypt ...

  6. 马凯军201771010116《面向对象程序设计(java)》第七周学习总结

    理论与知识部分 多态性:概念:指在程序中同一符号在不同的情况下具有不同的解释.超类中定义的域或方法,被子类继承之后,可以具有不同的数据类型或表现出不同的行为.这使得同一域或方法在超类及各个子类中具有不 ...

  7. oracle累积求和分析函数sum over的使用

    oracle sum()over函数的使用 over不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用. over函数的参数:over(partit ...

  8. Fedora 23 U盘启动出现“Failed to load ldlinux.c32”解决 ZT

      利用UltraISO制作了Fedora 23的U盘启动,开机F12键USB启动时出现 1 2 Failed to load ldlinux.c32 Boot failed: please chan ...

  9. 1458 Common Subsequence

    最简单的LIS; 设字符串为 a = acc  b = cc 则dp数组为 0 0 1 1 1 2 b[0] = a[1], b[1] = a[1] 防止这里算两个 要清楚的是 怎么不重复计算 也就是 ...

  10. linux 查看当前系统版本号

    为避免现场未能完全安装系统,使用yum 安装版本需一致 第一种方法: [root@sky9896sky]# lsb_release -a bash:lsb_release: command not f ...