如何基于mybatis框架查询数据库表数据并打印

一、需求说明

使用mybatis框架查询数据库user表数据并打印到控制台上

二、数据库数据准备

-- 创建用户表
create table user (
 id int primary key auto_increment,
 username varchar(20) not null,
 birthday date,
 sex char(1) default '男',
 address varchar(50)
);

-- 添加用户数据
insert into user values (null, '孙悟空','1980-10-24','男','花果山水帘洞');
insert into user values (null, '白骨精','1992-11-12','女','白虎岭白骨洞');
insert into user values (null, '猪八戒','1983-05-20','男','福临山云栈洞');
insert into user values (null, '蜘蛛精','1995-03-22','女','盤丝洞');

-- 查询用户数据
select * from user;

三、实现步骤

3.1 创建模块3

.2 导入Mybatis框架jar包

3.3 编写用户实体类:User

package com.vg.entity;

import java.util.Date;

public class User {
  private int id;
  private String username;
  private Date birthday;
  private String sex;
  private String address;

  //alt+insert快速生成getter/setter方法
  public int getId() {
    return id;
  }

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

  public String getUsername() {
    return username;
  }

  public void setUsername(String username) {
    this.username = username;
  }

  public Date getBirthday() {
    return birthday;
  }

  public void setBirthday(Date birthday) {
    this.birthday = birthday;
  }

  public String getSex() {
    return sex;
  }

  public void setSex(String sex) {
    this.sex = sex;
  }

  public String getAddress() {
    return address;
  }

  public void setAddress(String address) {
    this.address = address;
  }

  @Override
  public String toString() {
    return "User{" +
        "id=" + id +
        ", username='" + username + '\'' +
        ", birthday=" + birthday +
        ", sex='" + sex + '\'' +
        ", address='" + address + '\'' +
        '}';
  }
}

3.4 编写dao接口:UserMapper

package com.vg.dao;
import com.vg.entity.User;
import java.util.List;
/**
 * 数据访问层接口:对用户进行增删改查操作
 * */
public interface UserMapper {
  /**
   * 查询所有用户
   * */
  List<User> findAllUsers();
}

3.5 编写dao接口映射文件:UserMapper.xml

<?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>

</mapper>

3.6 编写Mybatis主配置文件:sqlMapConfig.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>

</configuration>

3.7 编写测试类

package com.vg.test;
import org.junit.Test;
/**
 * 测试类
 */
public class TestUserMapper {

  /**
   * 测试方法:查询所有学生
   */
  @Test
  public void testFindAllUsers(){

  }
}

四、完善sqlMapConfig.xml

4.1 目标

完成mybatis主配置文件相关信息的配置:数据库环境信息配置,包括如下:

  • 导入mybatis约束(复制约束信息)
  • 数据库事务配置
  • 数据库连接信息配置
  • 连接池信息配置

4.2 sqlMapConfig.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>
  <!--environments标签作用:配置数据库环境
    default:设置默认的数据库环境
    environment:用来配置一个数据库的环境信息
  -->
  <environments default="develop">
    <!--用来配置一个数据库的环境信息
      id:配置环境信息的唯一标识
    -->
    <environment id="develop">
      <!--
        transactionManager:配置事务管理器
          type:设置事务管理器的类型,取值有type=“[JDBC|MANAGED]”
            JDBC:事务管理使用JDBC的管理方式
            MANAGED:事务交给容器管理(mybatis不管理),后续交给spring容器管理。

      -->
      <transactionManager type="JDBC"></transactionManager>
      <!--
        dataSource:配置数据源(连接池)信息
          type:设置数据源类型,常用的值有:unpooled 和 pooled
            unpooled:不使用连接池,每次都重新获取连接操作数据
            pooled:使用mybatis内置的连接池
      -->
      <dataSource type="POOLED">
        <!--数据库驱动字符串-->
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <!--数据库驱动字符串-->
        <property name="url" value="jdbc:mysql://localhost:3306/test"/>
        <!--用户名-->
        <property name="username" value="root"/>
        <!--密码-->
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>
</configuration>

五、完善UserMapper.xml文件

5.1 目标

完成接口映射配置文件UserMapper.xml的编写:这个映射文件就相当于UserMapper接口实现类配置

5.2 UserMapper.xml接口映射文件

<?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属性的作用:关联接口,需要配置对应接口的类全名字符串
-->
<mapper namespace="com.vg.dao.UserMapper">
  <!-- 完成接口映射配置文件UserMapper.xml的编写:这个映射文件就相当于UserMapper接口实现类配置 -->

  <!--select标签的作用:用来配置查询要执行的SQL语句
    id属性:关联接口中的方法名
    resultType属性:设置方法返回的数据类型,如果是集合则配置集合元素的类型
  -->
  <select id="findAllUsers" resultType="com.vg.entity.User">
    select * from user
  </select>
</mapper>

5.3 在sqlMapConfig.xml中加载接口映射配置文件

 <!--mappers标签的作用:用来配置接口映射文件-->
  <mappers>
    <!--mapper标签:一个该标签就配置一个接口映射文件
      resource属性:配置映射文件的路径,路径分隔符使用 / : com/vg/dao/UserMapper.xml
      url:用于配置互联网上的映射文件的路径,比如:http://www.baidu.com/xxx.xml
    -->
    <mapper resource="com/vg/dao/UserMapper.xml"></mapper>
  </mappers>

六、编写测试类运行

6.1 运行效果

6.2 实现步骤

  • 1. 通过Resources类,加载sqlMapConfig.xml,得到文件输入流对象
  • 2. 实例化会话工厂创建类SqlSessionFactoryBuilder
  • 3. 通过会话工厂创建类,读取上面的输入流,得到会话工厂SqlSessionFactory类
  • 4. 使用SqlSessionFactory对象,创建SqlSession对象
  • a) 它相当于JDBC中的Connection对象,提供了操作数据库的CRUD方法
  • b) 它提供了一个getMapper()方法,获取接口的实现对象。
  • 5. 获取接口 UserMapper 实现类对象
  • 6. 执行数据库的查询操作,输出用户信息
  • 7. 关闭会话,释放资源。

6.3 测试类代码

package com.vg.test;

import com.vg.dao.UserMapper;
import com.vg.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.Test;

import java.io.InputStream;
import java.util.List;

/**
 * 测试类
 */
public class TestUserMapper {
  /**
   * 测试方法:查询所有学生
   * SqlSessionFactoryBuilder=>SqlSessionFactory=>Sqlsession:相当于JDBC中的Connection对象
   */
  @Test
  public void testFindAllUsers() throws Exception{
    //1. 通过Resources类,加载sqlMapConfig.xml,得到文件输入流对象
    // Resources类作用:专门读取src目录下的资源文件
    InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
    //2. 实例化会话工厂创建类SqlSessionFactoryBuilder
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    //3. 通过会话工厂创建类,读取上面的输入流,得到会话工厂SqlSessionFactory类
    SqlSessionFactory sqlSessionFactory = builder.build(in);
    //4. 使用SqlSessionFactory对象,创建SqlSession对象
    //a) 它相当于JDBC中的Connection对象,提供了操作数据库的CRUD方法
    //b) 它提供了一个getMapper()方法,获取接口的实现对象。
    SqlSession sqlSession = sqlSessionFactory.openSession();
    //5. 获取接口 UserMapper 实现类对象
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    System.out.println("userMapper = " +userMapper);
    //6. 执行数据库的查询操作,输出用户信息
    List<User> userList = userMapper.findAllUsers();
    for (User user : userList) {
      System.out.println(user);
    }
    //7. 关闭会话,释放资源。
    sqlSession.close();
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • mybatis关系映射之一对多和多对一

    本实例使用用户和订单的例子做说明: 一个用户可以有多个订单, 一个订单只对应一个用户.(其中应用到注释) 1.代码的结构 2. 建表语句: CREATE DATABASE test; USE test; CREATE TABLE person( personId VARCHAR(36) PRIMARY KEY, personName VARCHAR(64), personAddress VARCHAR(128), personTel VARCHAR(11) ); CREATE TABLE ord

  • Mybatis 一对多和多对一关联查询问题

    首先  数据库量表之间字段关系(没有主外键) studentmajor表的id字段对应student表里major字段 两个实体类 package com.model; import java.util.Date; public class Student { private Integer sno; private String sname; private String ssex; private Integer sclass; private StudentMajor studentmaj

  • 解决mybatis三表连接查询数据重复的问题

    此问题的产生,主要是数据库的字段名一样导致 三张表 DOCTOR JOB OBJECT 有问题的查询语句和查询结果是: SELECT d.*,j.*,o.* from (select d.*,rownum r from DOCTOR d where rownum<=6) d join job j on d.job_id=j.id join object o on o.id=d.object_id where r>0 <img src="https://img-blog.csdn

  • MyBatisPlus 一对多、多对一、多对多的完美解决方案

    在学习MyBatisPlus 时,简单的查询非常简单,只需继承了相关类,就能够进行增删改.但是在实际运用时,对象之间的关系非常复杂,一对多.多对一.多对多.网上查询了大量i资料都无法解决此问题. 难道要把所有的用Mybatis的重写一次? 重写一次Plus的方法还能不能用? 实在没办只能查看官网https://mp.baomidou.com/guide/在注解处找到了可能的解决方案 @TableName注解可以设置对应的resultMap 看到这里我想是不是,在Mapper中设置好resultM

  • 关于MyBatis 查询数据时属性中多对一的问题(多条数据对应一条数据)

    数据准备 数据表 CREATE TABLE `teacher`( id INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO `teacher`(id,`name`) VALUES(1,'大师'); CREATE TABLE `student`( id INT(10) NOT NULL, `name` VARCHAR

  • Mybatis应用mysql存储过程查询数据实例

    1.创建mysql存储过程,这是个复杂查询加上了判断,比较复杂 CREATE PROCEDURE searchAllList ( IN tradingAreaId VARCHAR (50), IN categoryName VARCHAR (100), IN intelligenceSort TINYINT UNSIGNED, IN priceBegin DOUBLE, IN priceEnd DOUBLE, IN commodityName VARCHAR (200), IN flag TIN

  • 如何基于mybatis框架查询数据库表数据并打印

    一.需求说明 使用mybatis框架查询数据库user表数据并打印到控制台上 二.数据库数据准备 -- 创建用户表 create table user ( id int primary key auto_increment, username varchar(20) not null, birthday date, sex char(1) default '男', address varchar(50) ); -- 添加用户数据 insert into user values (null, '孙

  • sql脚本查询数据库表,数据,结构,约束等操作的方法

    1.查询当前数据库所有表 复制代码 代码如下: SELECT     O.object_id AS TableId,    TableName=O.name  ,    TableDesc= O.type FROM sys.columns C    INNER JOIN sys.objects O        ON C.[object_id]=O.[object_id]            AND O.type='U'            AND O.is_ms_shipped=0   

  • java mybatis框架实现多表关系查询功能

    基于Maven框架的整体设计 -- 一多一的关系 思路:导入mybatis.mysql.Junit4.13依赖: 编写两个java实体类: 编写sqMapConfig.xml mybatis核心配置文件 编写dao层接口: 编写mapper 映射文件: 编写测试类. 1.导入相关依赖 <!--配置依赖--> <dependencies> <!--配置mybatis--> <dependency> <groupId>org.mybatis</

  • 基于Mybatis Plus实现多表分页查询的示例代码

    注意:Mybatis Plus 3.0.7 版本才开始用[自定义sql]+[QueryWrapper],低版本不能使用,还是老实写SQL进行条件拼接 1.源码分析 在Wrapper<T>接口中就有如下方法 /** * 获取自定义SQL 简化自定义XML复杂情况 * 使用方法:自定义sql + ${ew.customSqlSegment} * 1.逻辑删除需要自己拼接条件 (之前自定义也同样) * 2.不支持wrapper中附带实体的情况 (wrapper自带实体会更麻烦) * 3.用法 ${e

  • MySQL实现查询数据库表记录数

    前言: mysql统计一个数据库里所有表的数据量,最近在做统计想查找一个数据库里基本所有的表数据量,数据量少的通过select count再加起来也是可以的,不过表的数据有点多,不可能一个一个地查.记得在Navicat里,选择一个数据量,点击表,如图: 那么如何通过sql实现呢?在mysql里是可以查询information_schema.tables这张表的 SELECT table_rows,table_name FROM information_schema.tables WHERE TA

  • Python如何读取MySQL数据库表数据

    本文实例为大家分享了Python读取MySQL数据库表数据的具体代码,供大家参考,具体内容如下 环境:Python 3.6 ,Window 64bit 目的:从MySQL数据库读取目标表数据,并处理 代码: # -*- coding: utf-8 -*- import pandas as pd import pymysql ## 加上字符集参数,防止中文乱码 dbconn=pymysql.connect( host="**********", database="kimbo&

  • layui前端框架之table表数据的刷新方法

    最简单的方法就是: //当前页的刷新 $(".layui-laypage-btn")[0].click(); 以上这篇layui前端框架之table表数据的刷新方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • SpringBoot结合Mybatis实现创建数据库表的方法

    目录 前言 为什么要通过应用实现创建表的功能 准备创建表的 SQL 语句 实现通过 MyBatis 创建数据库表示例 在 Maven 中引入相关依赖 在 SpringBoot 配置文件中添加数据库配置 创建测试的 Mapper 接口类 创建与 Mapper 关联的 XML 文件 创建用于测试的 Controller 类 创建 SpringBoot 启动类 调用创建表的接口进行测试 前言 系统环境: JAVA JDK 版本:1.8 MySQL 版本:8.0.27 MyBatis 版本:3.5.9

  • 实例讲解Java的MyBatis框架对MySQL中数据的关联查询

    mybatis 提供了高级的关联查询功能,可以很方便地将数据库获取的结果集映射到定义的Java Bean 中.下面通过一个实例,来展示一下Mybatis对于常见的一对多和多对一关系复杂映射是怎样处理的. 设计一个简单的博客系统,一个用户可以开多个博客,在博客中可以发表文章,允许发表评论,可以为文章加标签.博客系统主要有以下几张表构成: Author表:作者信息表,记录作者的信息,用户名和密码,邮箱等. Blog表   :  博客表,一个作者可以开多个博客,即Author和Blog的关系是一对多.

  • BootStrap+Mybatis框架下实现表单提交数据重复验证

    效果: jsp页面: <form class="form-horizontal lui-tj-bd" id="dbc_code_add_form" method="post"> <div class="row"> <div class="col-xs-12"> <!-- PAGE CONTENT BEGINS --> <div class="t

随机推荐