zoukankan      html  css  js  c++  java
  • MyBatis 学习笔记

    一、MyBatis Hello World

    1. 添加 jar 包:mybatis-x.x.x.jar(如 mybatis-3.4.4.jar)。

    2. 建数据表:

    CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);
    INSERT INTO users(NAME, age) VALUES('Tom', 12);
    INSERT INTO users(NAME, age) VALUES('Jack', 11);

    3. 定义表所对应的实体类。

    public class User {
      private int id;
      private String name;
      private int age;
      //get,set方法
    }

    4. 添加 Mybatis 的配置文件 conf.xml。

    建议使用类路径下的资源文件进行配置。但是也可以使用任意的输入流(InputStream)实例,包括字符串形式的文件路径或者 file:// 的 URL 形式的文件路径来配置。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,可使从 classpath 或其他位置加载资源文件更加容易(参考第7步中的代码)。

    <?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="root" />
          </dataSource>
        </environment>
      </environments>
    </configuration>

    5. 定义操作 users 表的 sql 映射文件 userMapper.xml。

    MyBatis 的 SQL 映射文件应该与其所映射的实体类在同一个包下。例如 userMapper.xml 应该在类 User 所在的包中。

    <?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.ldj.mybatis_test.test1.userMapper"> 
      <select id="getUser" parameterType="int" resultType="com.ldj.mybatis_test.test1.User">
        select * from users where id=#{id}
      </select>
    </mapper>

    MyBatis 是针对 SQL 构建的,真正强大在于它的映射语句。SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):

        cache – 给定命名空间的缓存配置。

        cache-ref – 其他命名空间缓存配置的引用。

        resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。

        parameterMap – 已废弃!老式风格的参数映射。内联参数是首选,这个元素可能在将来被移除。

        sql – 可被其他语句引用的可重用语句块。

        insert – 映射插入语句。

        update – 映射更新语句。

        delete – 映射删除语句。

        select – 映射查询语句。

    6. 在 conf.xml 文件中注册 userMapper.xml 文件。

    <mappers>
        <mapper resource="com/ldj/mybatis_test/test1/userMapper.xml"/>
    </mappers>

    7. 编写测试代码:执行定义的 select 语句。

    public class Test {
      public static void main(String[] args) throws IOException {
        String resource = "conf.xml"; 
        //加载mybatis的配置文件(它也加载关联的映射文件)
        Reader reader = Resources.getResourceAsReader(resource); 
        //构建sqlSession的工厂
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //创建能执行映射文件中sql的sqlSession
        SqlSession session = sessionFactory.openSession();
        //映射sql的标识字符串
        String statement = "com.ldj.mybatis.bean.userMapper"+".selectUser";
        //执行查询返回一个唯一user对象的sql
        User user = session.selectOne(statement, 1);
        System.out.println(user);
      }
    }

    二、MyBatis 的 CRUD

    2.1 XML 的实现方式

    (1)定义sql映射xml文件:

    <insert id="insertUser" parameterType="com.ldj.mybatis_test.test2.bean.User">
      insert into users(name, age) values(#{name}, #{age});
    </insert><delete id="deleteUser" parameterType="int">
      delete from users where id=#{id}
    </delete>
    
    <update id="updateUser" parameterType="com.ldj.mybatis_test.test2.bean.User">
      update users set name=#{name},age=#{age} where id=#{id}
    </update>
    
    <select id="selectUser" parameterType="int" resultType="com.ldj.mybatis_test.test2.bean.User">
      select * from users where id=#{id}
    </select>
    
    <select id="selectAllUsers" resultType="com.ldj.mybatis_test.test2.bean.User">
      select * from users
    </select>

     (2)在config.xml中注册这个映射文件:

    <mapper resource="com/ldj/mybatis_test/test2/bean/userMapper.xml"/>

    (3)在 DAO 中调用:

    public User getUserById(int id) {
      SqlSession session = sessionFactory.openSession();
      User user = session.selectOne(URI+".selectUser", id);
      return user;
    }

    2.2 注解的实现方式
    (1)定义sql映射的接口

    public interface UserMapper {
      @Insert("insert into users(name, age) values(#{name}, #{age})")
      public int insertUser(User user);
    ​​
      @Delete("delete from users where id=#{id}")
      public int deleteUserById(int id);
    
      @Update("update users set name=#{name},age=#{age} where id=#{id}")
      public int updateUser(User user);
    ​​
      @Select("select * from users where id=#{id}")
      public User getUserById(int id);
    ​​
      @Select("select * from users")
      public List<User> getAllUser();
    }

    (2)在config中注册这个映射接口

    <mapper class="com.ldj.mybatis_test.test2.crud.ano.UserMapper"/>

    (3)在dao类中调用

    public User getUserById(int id) {
      SqlSession session = sessionFactory.openSession();
      UserMapper mapper = session.getMapper(UserMapper.class);
      User user = mapper.getUserById(id);
      return user;
    }

     三、几个可以优化的地方

    4.1. 连接数据库的配置单独放在一个properties文件中

    ## db.properties
    
    <properties resource="db.properties"/>
    <property name="driver" value="${driver}" />
    <property name="url" value="${url}" />
    <property name="username" value="${username}" />
    <property name="password" value="${password}" />

    4.2. 为实体类定义别名,简化sql映射xml文件中的引用

    <typeAliases>
      <typeAlias type="com.atguigu.ibatis.bean.User" alias="_User"/>
    </typeAliases>

    4.3. 可以在src下加入log4j的配置文件,打印日志信息

    1. 添加jar:log4j-1.2.16.jar。

    2.1. log4j.properties(方式一)

    log4j.properties,
    log4j.rootLogger=DEBUG, Console
    #Console
    log4j.appender.Console=org.apache.log4j.ConsoleAppender
    log4j.appender.Console.layout=org.apache.log4j.PatternLayout
    log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
    log4j.logger.java.sql.ResultSet=INFO
    log4j.logger.org.apache=INFO
    log4j.logger.java.sql.Connection=DEBUG
    log4j.logger.java.sql.Statement=DEBUG
    log4j.logger.java.sql.PreparedStatement=DEBUG

    2.2. log4j.xml(方式二)

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
      <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m  (%F:%L) 
    " />
        </layout>
      </appender>
      <logger name="java.sql">
        <level value="debug" />
      </logger>
      <logger name="org.apache.ibatis">
        <level value="debug" />
      </logger>
      <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
      </root>
    </log4j:configuration>
  • 相关阅读:
    多态
    扩展方法
    git 新账户链接新仓库地址
    获取数据类型
    解构赋值
    var let const 无关键字定义变量
    http
    onmouseover、onmouseout、onmouseenter、onmouseleave
    setInterval、setTimeout、requestAnimationFrame
    vue的prop父子组件传值
  • 原文地址:https://www.cnblogs.com/itfky/p/13727082.html
Copyright © 2011-2022 走看看