mybatis学习笔记(三):根据用户ID(主键)查询用户信息

根据用户ID(主键)查询用户信息

需求

根据用户ID(主键)查询用户信息

用户表user信息

user表结构

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL COMMENT '用户名称',
  `birthday` date DEFAULT NULL COMMENT '生日',
  `sex` char(1) DEFAULT NULL COMMENT '性别',
  `address` varchar(255) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COMMENT='用户表';

user表数据

user表数据

创建MyBatis全局配置文件

创建MyBatis全局配置文件,如SqlMapConfig.xml,配置MyBatis的运行环境、数据源、事务等

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

    <!-- 和spring整合后environments配置将废除 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理,事务控制由mybatis管理 -->
            <transactionManager type="JDBC"/>

            <!-- 数据库连接池由mybatis管理 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>

        </environment>
    </environments>

</configuration>

创建用户User pojo类

import java.util.Date;

public class User {

    //属性名和数据库表的字段对应
    private int id;
    private String username; //用户姓名
    private String sex; //性别
    private Date birthday; //生日
    private String address; //地址

    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 String getSex() {
        return sex;
    }

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

    public Date getBirthday() {
        return birthday;
    }

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

    public String getAddress() {
        return address;
    }

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

创建映射文件

映射文件命名分两种:

  • 原始ibatis命名,如User.xml
  • mapper代理方法开发命名,命名形式一般是XXXMapper.xml,如UserMapper.xml、ItemsMapper.xml

User.xml映射文件:

<!-- mapper 为根元素节点, 一个namespace对应一个dao -->
<!-- namespace命名空间,作用就是对sql进行分类管理,可以理解为sql隔离
 注意:使用mapper代理方式开发,namespace有特殊重要的作用
 -->
<mapper namespace="test">


    <!-- 在映射文件中配置很多sql语句 -->
    <!-- 根据用户ID查询用户信息 -->
    <!-- 通过select执行数据库查询
     id: 标识映射文件的sql
     将sql语句封装到mappedStatement对象中,所以将id成为statement的id
     parameterType: 指定输入参数的类型
     #{}表示一个占位符号
     #{id}: 其中的id表示接收输入的参数,参数名称就是id,如果输入的参数是简单类型,#{}中的参数名称可以任意,可以是value或其他名称
     resultType: 指定sql输出结果所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象
     -->
    <select id="findUserById" parameterType="int" resultType="com.xxx.qa.po.User">
        SELECT * FROM USER WHERE id = #{id}
    </select>

</mapper

在SqlMapConfig.xml中加载映射文件

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>

    <!-- 和spring整合后environments配置将废除 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理,事务控制由mybatis管理 -->
            <transactionManager type="JDBC"/>

            <!-- 数据库连接池由mybatis管理 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>

        </environment>
    </environments>

    <!-- 加载映射文件 -->
    <mappers>
        <mapper resource="sqlmap/User.xml"/>
    </mappers>

</configuration>

加载映射文件就添加如下这些内容即可

    <!-- 加载映射文件 -->
    <mappers>
        <mapper resource="sqlmap/User.xml"/>
    </mappers>

其中<mappers>节点用来加载映射文件,resource属性指定映射文件所在位置

入门程序

程序代码


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.Date;
import java.util.List;

public class MybatisFirst {

    //根据用户id查询用户信息,得到一条记录结果
    @Test
    public void findUserByIdTest() throws IOException {

        //mybatis配置文件
        String resource = "SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream = Resources.getResourceAsStream(resource);

        //创建会话工厂,传入mybatis的配置文件信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //通过工厂得到SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //通过SqlSession操作数据库
        //第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id
        //第二个参数:指定和映射文件中所匹配的parameterType类型的参数
        //sqlSession.selectOne结果是与映射文件中所匹配的resultType类型的对象
        User user = sqlSession.selectOne("test.findUserById", 1);

        System.out.println(user);

        //释放资源
        sqlSession.close();
    }
}

程序执行结果

为了方便查看打印出来的结果,在User.java添加了toString方法

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

最终查看控制台输出的内容,大致如下:

......

[DEBUG]22:01:39,852,main,[Class]JdbcTransaction, [Method]openConnection, Opening JDBC Connection
[DEBUG]22:01:40,128,main,[Class]PooledDataSource, [Method]popConnection, Created connection 1226622409.
[DEBUG]22:01:40,128,main,[Class]JdbcTransaction, [Method]setDesiredAutoCommit, Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@491cc5c9]
[DEBUG]22:01:40,131,main,[Class]findUserById, [Method]debug, ==>  Preparing: SELECT * FROM USER WHERE id = ? 
[DEBUG]22:01:40,180,main,[Class]findUserById, [Method]debug, ==> Parameters: 2(Integer)
[DEBUG]22:01:40,216,main,[Class]findUserById, [Method]debug, <==      Total: 1
User{id=2, username='张三丰', sex='0', birthday=Wed Jul 13 00:00:00 CDT 1988, address='中国杭州'}

......

可以看到,日志中返回了我们想要的结果,也打印出了映射文件中配置的sql语句以及输入参数和参数值

猜你喜欢

转载自blog.csdn.net/kuangay/article/details/81123678