mybatis学习

oneqhw      2022-02-08     406

关键词:

前言

感觉学习进度还是比较慢啊,一整天的学习效率不是很高,一会看电视,一会喝茶,对自己的要求不严格...今天就说说关联表数据的插入以及别名的使用。

正文

1.关联插入

  之前,我在数据库中已经创建了一张users表,现在我新增了一张手机表cellphone,用来记录用户手机的信息,结构如下所示:

  其中cellphone对应的实体类为:

package org.tonny.entity;

public class Cellphone
{
    private int id;
    
    private int userId;
    
    private String number;
    
    private String city;
    
    public int getId()
    {
        return id;
    }
    
    public void setId(int id)
    {
        this.id = id;
    }
    
    public int getUserId()
    {
        return userId;
    }
    
    public void setUserId(int userId)
    {
        this.userId = userId;
    }
    
    public String getNumber()
    {
        return number;
    }
    
    public void setNumber(String number)
    {
        this.number = number;
    }
    
    public String getCity()
    {
        return city;
    }
    
    public void setCity(String city)
    {
        this.city = city;
    }
    
    @Override
    public String toString()
    {
        return "Cellphone [id=" + id + ", userId=" + userId + ", number=" + number + ", city=" + city + "]";
    }
    
}

  cellphone中的字段user_id是外键,对应于users表的主键id。那现在我需要插入用户信息,同时包含他的手机信息该如何操作呢?思路是这样,先向users表中插入记录,然后再向cellphone中插入相关的记录,可是user_id如何获取成了一个难题。同样MyBatis为我们提供了解决方案,通过配置文件实现,配置信息如下:

<insert id="addUserBeforeCellphone" parameterType="org.tonny.entity.User">
        <!-- 使用selectKey标签,用于主键返回
        keyProperty:接受返回主键的属性,本例对应到实体类User的id属性
        order:insert语句生成主键的时机,mysql在执行操作之后(即AFTER),oracle是在执行操作之前 
        resultType:返回给实体类User的Id属性的数据类型
        SQL语句:生成主键值的sql语句:SELECT LAST_INSERT_ID()-->
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
            SELECT LAST_INSERT_ID()
        </selectKey>
        INSERT INTO users(name,age)
        VALUES(#{name},#{age})
    </insert>
    
    <insert id="addCellphone4User" parameterType="org.tonny.entity.Cellphone">
        INSERT INTO cellphone(user_id, number, city)
        VALUES(#{userId},#{number},#{city})
    </insert>

我在增加user的时候,使用了selectKey标签,这个标签的作用就是用来返回数据插入users返回的主键值,其子标签内容也比较详细,不再赘述。同样的,我加入增加cellphone的语句。接着就是Java测试代码了:

public void addUserAndCellphone()
    {
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //插入User表
        String sql = "org.tonny.mapper.UsersMapper.addUserBeforeCellphone";// 映射sql的标识字符串
        User user = new User();
        user.setName("Jerry Chien");
        user.setAge(-2);
        int result = sqlSession.insert(sql, user);
        System.out.println("插入user执行结果:" + result);
        
        //插入手机号码
        Cellphone cellphone = new Cellphone();
        cellphone.setUserId(user.getId());
        cellphone.setNumber("18915892672");
        cellphone.setCity("nj");
        sql = "org.tonny.mapper.UsersMapper.addCellphone4User";
        result = sqlSession.insert(sql, cellphone);
        System.out.println("插入cellphone执行结果:" + result);
        
        sqlSession.commit();
        sqlSession.close();
    }

  就是先插入users表,执行int result = sqlSession.insert(sql, user);后,MyBatis就会给user的id赋值,可以通过user.getId()取出来。然后再执行另外一条语句即可。

执行结果:

2.别名使用

  使用别名可以简化名字的使用。在mybatis.xml中增加配置信息,如下:

<!-- 定义别名 -->
    <typeAliases>
        <!-- type:源类型名称 alias:目标别名 下面的意思就是把"org.tonny.entity.User" 别名为 "user" -->
        <typeAlias type="org.tonny.entity.User" alias="aliasUser" />
    </typeAliases>

  我在这里定义了别名,将类型org.tonny.entity.User简化为user。这个标签要注意顺序,在properties之后,在enviroments之前,否则会报下面的错误。

  完整内容如下:

<?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>
    <!-- 指定数据库信息文件 -->
    <properties resource="db.properties"></properties>
    
    <!-- 定义别名 -->
    <typeAliases>
        <!-- type:源类型名称 alias:目标别名 下面的意思就是把"org.tonny.entity.User" 别名为 "user" -->
        <typeAlias type="org.tonny.entity.User" alias="user" />
    </typeAliases>
    
    <!-- 数据库环境配置如果和spring整合就不需要配置了,完全交给spring -->
    <!-- environments中可以配置多个数据库,但是同一时间只能使用一个。
        default标识当前默认使用的数据库,当前默认使用mysql
     -->
    <environments default="mysql">
        <environment id="mysql">
            <!-- 事务管理器,当前只使用了mybatis框架,所以使用jdbc事务管理器。
            如果与spring集成的话,可以使用spring的事务管理器 -->
            <transactionManager type="JDBC" />
            <!-- 配置数据库连接信息,使用数据库连接池(POOLED)方式连接 -->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}" />
                <property name="url" value="${url}" />
                <property name="username" value="${name}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>
    
    <!-- 管理每张表的映射文件 -->
    <mappers>
        <!-- 需要将每张表的配置文件加载进来,使用resource引入 -->
        <mapper resource="org/tonny/mapper/UsersMapper.xml" />
        <mapper resource="org/tonny/mapper/PersonMapper.xml" />
    </mappers>
</configuration>

这样就可以使用了,下面代码配置了通过别名的方式来查询数据。

<select id="getUserByMapUsingAlias" parameterType="java.util.Map" resultType="user">
        SELECT *
        FROM users WHERE id=#{id} and name like #{name}
    </select>

测试代码如下:

@Test
    public void getUserByMapUsingAlias()
    {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 映射sql的标识字符串
        String sql = "org.tonny.mapper.UsersMapper.getUserByMapUsingAlias";
        Map<String, Object> param = new HashMap<String, Object>();
        param.put("id", 1);
        param.put("name", "%Chien%");
        List<User> userList = sqlSession.selectList(sql, param);
        sqlSession.close();
        System.out.println(userList);
    }

执行结果:

后记

  今天记录下来的内容比较少,明天继续....

转mybatis学习总结——mybatis快速入门

【转】MyBatis学习总结(一)——MyBatis快速入门一、Mybatis介绍    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis... 查看详情

mybatis学习资料

MyBatis从入门到精通官方文档Mybatis通用Mapper 查看详情

mybatis学习笔记一

  昨天看了一下mybatis,学习了一下有很多东西还不懂,但是想把一些知道的记录一下,如有错误请大家多多指点。   mybatis它是apche的一个开源项目,它以前的没名字并不是叫mybatis而是叫ibatis,2010年这个项目由apachesoftwarefound... 查看详情

mybatis学习

MyBatis的学习1.中文文档https://mybatis.org/mybatis-3/zh/index.htmlMyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注... 查看详情

mybatis学习笔记11:解决字段名和属性的映射关系(代码片段)

解决字段名和属性的映射关系【Mybatis】学习笔记01:连接数据库,实现增删改【Mybatis】学习笔记02:实现简单的查【MyBatis】学习笔记03:配置文件进一步解读(非常重要)【MyBatis】学习笔记04:配置文件模板【MyBatis】学习笔记05... 查看详情

mybatis学习初始mybatis

本文借鉴:MyBatis【快速入门】(特此感谢!)初识MyBatis一、MyBatis简介  MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为MyBatis,是一个基于Java的持久层框架。持久层:可以... 查看详情

mybatis学习

1.mybatis的执行的大体过程2.配置文件的配置<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration& 查看详情

mybatis学习--日志

学习笔记,选自Mybatis官方中文文档:http://www.mybatis.org/mybatis-3/zh/logging.html Logging  Mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种工具:SLF4JApacheCommonsLoggingLog4j2Log4jJDKlogging  具体选择哪个日志实现工具由My... 查看详情

mybatis学习

 一Mybatis搭建核心架构配置文件1<?xmlversion="1.0"encoding="UTF-8"?>19<!DOCTYPEconfiguration20PUBLIC"-//mybatis.org//DTDConfig3.0//EN"21"http://mybatis.org/dtd/mybatis-3-config.dtd">2223<confi 查看详情

mybatis框架学习笔记(代码片段)

本篇Mybatis框架学习笔记;紧跟之前的学习Mybatis框架学习笔记(2)—>在mybatis框架核心配置文件中需要学习的配置configuration(配置)properties(属性)settings(设置)typeAliases(类型别名)typeHandlers 查看详情

mybatsi学习

深入浅出Mybatis系列(一)---Mybatis入门深入浅出Mybatis系列(二)---配置简介(mybatis源码篇)深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis... 查看详情

mybatis学习笔记

目录1.Mybatis简介1.1原始JDBC操作1.2原始JDBC操作的分析1.3什么是Mybatis2.Mybatis的快速入门2.1Mybatis的开发步骤2.2Mybatis入门2.3Mybatis的映射文件概述3.Mybatis的增删改查操作3.1Mybatis的插入数据操作3.1.1示例3.1.2插入操作的注意事项3.2Mybatis的... 查看详情

mybatis框架学习笔记(代码片段)

本篇Mybatis框架学习笔记;紧跟之前的学习Mybatis框架学习笔记(1)—>小智RE0在mybatis框架核心配置文件中需要学习的配置configuration(配置)properties(属性)settings(设置)typeAliases(类型别名)typeHandl... 查看详情

mybatis学习笔记

MyBatis中文文档参考:https://mybatis.org/mybatis-3/zh/index.html视频连接:1.MyBatis简介1.1MyBatis历史MyBatis最初是Apache的一个开源项目iBatis,2010年6月这个项目由ApacheSoftwareFoundation迁移到了GoogleCode。随着开发团队转投GoogleCode旗下 查看详情

mybatis学习

1.加jar包,2个jar包(mybatis,jar,mybatis-connet-java.jar)2.配置xml,properils3.书写sql语句即**.xml4.启动测试@TestpublicvoidgetAllUser(){//1.启动mybatis框架//SqlSession-->SqlSessionFactory-->SqlSessionFactioryBuilderS 查看详情

mybatis学习总结——mybatis快速入门

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(PlainOldJ... 查看详情

mybatis学习

1.Mybatis是什么? Mybatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。 Mybatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程... 查看详情

mybatis基础学习—初识mybatis

一、MyBatis是什么?    MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。    MyBatis是一个优秀的持久层框架... 查看详情