Live2D

Mybatis学习笔记(idea)

Mybatis(ieda)

  1. Maven仓库:
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.3</version>
</dependency>
  1. 数据库:
CREATE TABLE `user`(
`id`  INT(20) NOT NULL PRIMARY KEY,
`name`  VARCHAR(30) DEFAULT  NULL,
`pwd` VARCHAR(30) DEFAULT NULL
)ENGINE=INNODB CHARSET=utf8;

INSERT INTO `user`(`id`,`name`,`pwd`) VALUES
(1,'lix','123456'),
(2,'admin','123456'),
(3,'root','123456')
  1. 导入依赖
<!--导入依赖 -->
    <dependencies>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.21</version>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
  1. 编写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>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>
  1. 获得sqlsessionfactory
private static SqlSessionFactory sqlSessionFactory;

    static{
        try {
            //获得sqlsessionFactory
            String resource = "org/mybatis/example/mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
  1. Mapper.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="org.mybatis.example.BlogMapper">
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>
  1. 报错:

    Could not find resource org/mybatis/example/mybatis-config.xml
    
  • 解决:纯配置文件路径错误,检查路径即可

  • 报错:

    org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource
    
    • 解决:在pom.xml中加入以下配置

      <build>
              <resources>
                  <resource>
                      <directory>src/main/resources</directory>
                      <includes>
                          <include>**/*.properties</include>
                          <include>**/*.xml</include>
                      </includes>
                      <filtering>true</filtering>
                  </resource>
                  <resource>
                      <directory>src/main/resources</directory>
                      <includes>
                          <include>**/*.properties</include>
                          <include>**/*.xml</include>
                      </includes>
                      <filtering>true</filtering>
                  </resource>
              </resources>
          </build>
      
      1. log4j配置文件
#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
log4j.rootLogger=DEBUG,console,file

#控制台输出的相关设置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold = Debug
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = [%c]-%m%n

#文件输出的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File = ./log/lix.log
log4j.appender.file.MaxFileSize = 10mb
log4j.appender.file.Threshold = DEBUG
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = [%p][%d{yy-mm-dd}][%c]%m%n

#日志输出级别
log4j.logger.org.mybatis = DEBUG
log4j.logger.java.sql = DEBUG
log4j.logger.java.sql.Statement = DEBUG
log4j.logger.java.sql.ResultSet = DEBUG
log4j.logger.java.sql.PreparedStatement = DEBUG


二.注解CRUD

package com.lix.dao;

import com.lix.pojo.User;
import org.apache.ibatis.annotations.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * program mybatis-01
 * @author lix
 */
public interface UserMapper {
    /**
     * getUsers
     * @return
     */
    @Select("select * from user")
    List<User> getUsers();

    /**
     *
     * getUserById
     * @param id
     * @param name
     * @return
     * 方法存在多个参数,
     */
    @Select("select * from user where id=#{id}")
    User getUserById(@Param("id") int id, @Param("name") String name);
    /**
     * addUser
     * @param map
     * @return
     */
    @Insert("insert into user(id,name,pwd) values(#{id},#{name},#{pwd})")
    int addUser(Map<String,Object> map);

    /**
     * updateUser
     * @param map
     * @return
     */
    @Update("update user set name = #{name},pwd=#{pwd} where id = #{id}")
    int updateUser(Map<String,Object> map);

    /**
     * deleteUse
     * @param id
     * @return
     */
    @Delete("delete from user where id = #{id}")
    int deleteUse(@Param("id") int id);


}

【注意:我们必须要把核心配置类(UserMapper.java)绑定到核心配置文件中(mybatis-config.xml)】

  1. 关于@Param()注解

    • 基本类型的参数或者String类型,需要加
    • 引用类型不需要加
    • 如果只有一个基本类型的话,可以忽略,建议加
    • 我们在SQL中引用的就是我们这里的的@Param()中设定的属性名
  2. {} 可以很大程度的防止sql注入 ${}

  3. Lombok

    • Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
      Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.

      • Project Lombok是一个java库,它可以自动插入到你的编辑器和构建工具中,为您的java注入新的活力。

        不要再编写其他getter或equals方法,有了一个注释,类就有了功能齐全的构建器、自动化日志变量等等。

    • package com.lix.dao;
      
      import lombok.AllArgsConstructor;
      import lombok.Data;
      import lombok.NoArgsConstructor;
      
      /**
       * program mybatis-02
       * @author lix
       * description 加在类上所有属性都加,加在属性上,只有属性加
       */
      @Data
      @AllArgsConstructor
      @NoArgsConstructor
      public class User {
          private int id;
          private String name;
          private String pwd;
      
      }
      
  4. 多对一,一对多处理

    4.1 多对一

    4.2 一对多

  • 多个学生,对应一个老师
  • 学生:关联--多个学生关联一个老师(多对一)
  • 老师:集合--一个老师有很多学生(一对多)

4.1、按照查询嵌套处理

<select id="getStudent" resultMap="StudentTeacher">
    select * from student
</select>
<resultMap id="StudentTeacher" type="Student">
    <result column="id" property="id"/>
    <result column="name" property="name"/>
    <!--复杂属性单独处理
                对象:association
                集合:collection
            -->
    <association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>
    <collection property=""/>
</resultMap>
<select id="getTeacher" resultType="Teacher">
    select * from teacher where id = #{tid};
</select>

4.2、按照结果嵌套处理

<select id="getStudent2" resultMap="StudentTeacher2">
    select s.id sid,s.name sname,t.name tname
    from student s,teacher t
    where s.id = t.id
</select>
<resultMap id="StudentTeacher2" type="Student">
    <result column="sid" property="id"/>
    <result column="sname" property="name"/>
    <!--复杂属性单独处理
            对象:association
            集合:collection
        -->
    <association property="teacher" javaType="Teacher">
        <result column="tname" property="name"/>
    </association>
    <collection property=""/>
</resultMap>

三.动态SQL

<select id="iii" resultType="sss">
        select * from mybatis.user
        <where>
            <if test="title != null">
                title =1
            </if>
        </where>
        <set></set>
    </select>

四.缓存

【先走二级缓存-----》再看一级缓存-------》最后在数据库中查找

posted @ 2020-10-22 11:32  六爻呈乾  阅读(129)  评论(1)    收藏  举报