Mybatis入门程序,根据id查询用户

作者: 小小蒜头 | 来源:发表于2017-11-23 10:44 被阅读20次

    1. 创建数据库(在源代码中给出)

    sql_table.sql:记录表结构
    sql_data.sql:记录测试数据,在实际企业开发中,最后提供一个初始化数据脚本

    数据库

    JDBC传统程序问题总结

    1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响 数据库性能。
    设想:使用数据库连接池管理数据库连接。
    
    2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。
    设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。
    
    
    3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。
    设想:将sql语句及占位符号和参数全部配置在xml中。
    
    4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,,不利于系统维护。
    设想:将查询的结果集,自动映射成java对象。
    

    2. Mybatis框架

    mybatis是一个持久层的框架,是apache下的顶级项目。
    mybatis托管到goolecode下,再后来托管到github下。

    mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。

    mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)

    原理

    3. 工程结构

    jar包和配置文件

    4. 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>
    
    
        <!-- 1. 和spring整合后 environments配置将废除-->
        <environments default="development">
            <environment id="development">
                <!-- 使用jdbc事务管理,事务控制由mybatis-->
                <transactionManager type="JDBC"/>
                <!-- 数据库连接池,由mybatis管理-->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="root"/>
                </dataSource>
            </environment>
        </environments>
    
        <!-- 2. 加载映射文件 -->
        <mappers>
            <mapper resource="sqlMap/user.xml"/>
        </mappers>
    
    </configuration>
    

    5. 创建pojo类

    package com.eurasia.pojo;
    
    import java.util.Date;
    
    /**
     * Created by yvettee on 2017/11/22.
     */
    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;
        }
    
        @Override
        public String toString() {
            return "User [id=" + id + ", username=" + username + ", sex=" + sex
                    + ", birthday=" + birthday + ", address=" + address + "]";
        }
    }
    

    6. 映射文件

    记得要在SqlMapConfig.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">
    <!-- namespace命名空间,作用就是对sql进行分类化管理
    注意:使用mapper代理方法开发,namespace有特殊重要作用
    -->
    <mapper namespace="test">
        <!--在映射文件中配置很多sql语句-->
        <!--需求:通过id查询用户表的记录-->
        <!--通过select执行数据库查询
        id:标识映射文件中的sql,将sql语句封装到mappedstatement,
        所以将id称为statement的id
        #{}表示一个占位符,parameterType指定输入参数的类型
        #{id}:其中id表示接收输入的参数,名称叫id,如果输入参数是简单类型,#{}中参数名可以任意
        resultType:指定sql输出结果所映射的java对象类型
        -->
    
        <select id="findUserById" parameterType="int" resultType="com.eurasia.pojo.User">
          SELECT * FROM USER WHERE id = #{id};
        </select>
    </mapper>
    

    7. 程序编写

    package com.eurasia.test;
    
    import com.eurasia.pojo.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.IOException;
    import java.io.InputStream;
    
    /**
     * Created by yvettee on 2017/11/23.
     */
    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类型的参数
            User user = sqlSession.selectOne("test.findUserById", 1);
            System.out.println(user);
    
            //释放资源
            sqlSession.close();
        }
    }
    

    源代码:https://github.com/yvettee36/MybatisOrdinary

    相关文章

      网友评论

        本文标题:Mybatis入门程序,根据id查询用户

        本文链接:https://www.haomeiwen.com/subject/aaoavxtx.html