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. CentOS 使用yum命令安装出现错误提示”could not retrieve mirrorlist http://mirrorlist.centos.org

    CentOS 使用yum命令安装出现错误提示"could not retrieve mirrorlist http://mirrorlist.centos.org这个错误, 在网上找了好多, ...

  2. SpringBoot无法书写主启动类的情况之一

    首先需要引入 spring-boot-starter-web 依赖[springboot web 项目 启动器 jar包]: 如果使用镜像请确保镜像路径正确,可参看笔者博客园m-yb的maven 安装 ...

  3. GTS-800二次开发基本流程总结

    1.打开控制器 GT_Open 2.启动伺服使能    GT_ClrSts 3.轴规划位置清零 GT_SetPrfPos 4.轴运动模式 GT_PrfTrap 5.轴目标位置 GT_SetPos 6. ...

  4. scikit-learn实现简单的决策树

    #encoding=utf-8import numpy as npimport pandas as pd def main(): #Pre-processing from sklearn.datase ...

  5. unity3d平铺图片

    using System;using System.Linq;using System.Text;using System.Reflection;using System.Collections;us ...

  6. python脚本 FTP上传学习

    学习了这个博文http://www.cnblogs.com/cacique/archive/2012/08/24/2653686.html,楼主这个文章很适合初学者,所以根据楼主的内容推演了下上传文件 ...

  7. DAY 04运算符与流程控制

    输入输出补充: python2与python3的输入输出不同 python2中有两种用户 输入方式,一种是raw_input,和input raw_input与python3的input是相同的 而p ...

  8. linux command 3

    #user 相关命令 #新创建一个oracle用户,这初始属于oinstall组,且同时让他也属于dba组.useradd oracle -g oinstall -G dba #删除指定用户 –r:是 ...

  9. 学c++需要先学c语言吗?

    看你的需求,如果是底层开发,就必须学习C语言.如果只是应用开发,可以直接从C++开始学习.实际上这两个语言是平等的,只是在语法上C++尽量与C兼容,但仍然有很多不同的地方. 1) C++不是C的超集. ...

  10. leetcode 3.Longest Substring Without Repeating Charcters

    在一个字符串中寻找出最长的无重复字符的子串的,在不断的后续检索中需要去掉前面一个重复的字符,那么就是需要记录之前所出现过的字符的,在这里需要利用hashmap来记录字符和其出现的位置之间的映射关系的, ...