• Mybatis简单入门


    前言

      之前一直有直接使用Mybatis,但是没有细致的整理出来。长时间没有使用,细致的内容都忘记了。因此借此机会,从头开始整理,以后可以直接查看此次记录的内容。

    Mybatis的介绍

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

      JDBC->dbutils(自动封装)->MyBatis->Hibernate

      参考官网文档介绍:http://www.mybatis.org/mybatis-3/zh/getting-started.html

    准备工作

      依赖包

      从Mybatis的官网下载最新的jar,目前github上最新的是mybatis-3.4.6,并下载源码包导入project冲使用。下载mysql的驱动包:mysql-connector-java-5.1.7-bin.jar。下载log4j的jar:log4j-1.2.16.jar(目的是为了让mybatis能够输出日志,便于查看执行过程。此外,这次只使用Mybatis,因此在Java Project中进行验证,没有使用Maven进行管理包。

      数据库

    1 create database mybatis;
    2 use mybatis;
    3 CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);
    4 INSERT INTO users(NAME, age) VALUES('Tom', 12);
    5 INSERT INTO users(NAME, age) VALUES('Jack', 11);

      配置文件

      src下新建log4j配置文件log4j.properties

     1     log4j.propertiesuFF0C
     2     log4j.rootLogger=DEBUG, Console
     3     #Console
     4     log4j.appender.Console=org.apache.log4j.ConsoleAppender
     5     log4j.appender.Console.layout=org.apache.log4j.PatternLayout
     6     log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
     7     log4j.logger.java.sql.ResultSet=INFO
     8     log4j.logger.org.apache=INFO
     9     log4j.logger.java.sql.Connection=DEBUG
    10     log4j.logger.java.sql.Statement=DEBUG
    11     log4j.logger.java.sql.PreparedStatement=DEBUG    log4j.propertiesuFF0C
    12     log4j.rootLogger=DEBUG, Console
    13     #Console
    14     log4j.appender.Console=org.apache.log4j.ConsoleAppender
    15     log4j.appender.Console.layout=org.apache.log4j.PatternLayout
    16     log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
    17     log4j.logger.java.sql.ResultSet=INFO
    18     log4j.logger.org.apache=INFO
    19     log4j.logger.java.sql.Connection=DEBUG
    20     log4j.logger.java.sql.Statement=DEBUG
    21     log4j.logger.java.sql.PreparedStatement=DEBUG

      src新建mybatis的配置文件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>
      <environments default="development">
        <environment id="development">
          <transactionManager type="JDBC"/>
          <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
            <property name="username" value="root"/>
            <property name="password" value="admin"/>
          </dataSource>
        </environment>
      </environments>
     <!-- <mappers>
        <mapper resource="com/lion/test1/UserMapper.xml"/>
      </mappers>-->
    </configuration>

    验证

    1. 新建pojo User 属性 int id,String name,int age  //getter setter toString   注意:此处的属性需和数据库表字段保持一致,不然无法完成字段映射,后面讲解不一致时如何进行字段映射。
    2. 定义操作User对应users表的sql映射文件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="com.lion.test1.UserMapper">
        <select id="selectUser" parameterType="int" resultType="com.lion.pojo.User">
          select * from users where id = #{id}
        </select>
      </mapper>
    3. 在mybatis配置文件mybatis-config.xml中注册映射文件UserMapper.xml  (上面mybatis配置文件中注释掉内容,注意:注册映射文件使用的市文件的路径 / 而不是包路径 . )
      <mappers>
          <mapper resource="com/lion/test1/UserMapper.xml"/>
        </mappers>

        编写测试代码,执行映射文件中的查询

    public static void main(String[] args) throws IOException {
            String resource = "mybatis-config.xml";
            // 加载Mybatis的配置文件 同时也会加载映射文件
            InputStream inputStream = Resources.getResourceAsStream(resource);
            // 使用XML文件构建sqlSessionFacory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            // 创建能执行映射文件中sql的sqlSession
            SqlSession session = sqlSessionFactory.openSession();
            // 映射sql的标识字符串
            String stament = "com.lion.test1.UserMapper.selectUser";
            User user = session.selectOne(stament, 1);
            System.out.println(user);
        }

        Console输出:

    2018-05-16 23:48:27,714 [main] DEBUG [com.lion.test1.UserMapper.selectUser] - ==>  Preparing: select * from users where id = ? 
    2018-05-16 23:48:27,867 [main] DEBUG [com.lion.test1.UserMapper.selectUser] - ==> Parameters: 1(Integer)
    2018-05-16 23:48:27,956 [main] DEBUG [com.lion.test1.UserMapper.selectUser] - <== Total: 1
    User [id=1, name=Tom, age=12]


    解决字段名与实体类属性名不相同的冲突

      两种方式解决,一种在sql中定义查询字段别名,另一种则是在映射文件中使用resultMap进行字段映射

    方式一: 通过在sql语句中定义别名
    <select id="selectOrder" parameterType="int" resultType="_Order">
        select order_id id, order_no orderNo,order_price price from orders where order_id=#{id}
    </select>
            
    方式二: 通过<resultMap>
    <select id="selectOrderResultMap" parameterType="int" resultMap="orderResultMap">
        select * from orders where order_id=#{id}
    </select>
    
    <resultMap type="_Order" id="orderResultMap">
        <id property="id" column="order_id"/>
        <result property="orderNo" column="order_no"/>
        <result property="price" column="order_price"/>
    </resultMap>
  • 相关阅读:
    改进昨天的电梯电梯问题
    电梯调度
    结对开发四---实现环状二维数组求最大子数组的和
    结对开发五--对一千个数long型的一维数组求最大子数组的和
    结对开发四------求一维无头数组最大子数组的和
    结对开发3--电梯调度问题需求分析
    SQL基础题
    类和对象(课后题)
    再战文件(小甲鱼课后题)python超级入门
    快来集合!python超级入门笔记
  • 原文地址:https://www.cnblogs.com/lyc-smile/p/9048858.html
Copyright © 2020-2023  润新知