Mybatis学习笔记

BUG

正确:

	<select id="getStudent" resultType="com.mystudy.pojo.Student">
        select * from mybatis.student
    </select>

resultType这里要使用全类名
如果在配置里使用了别名,如下,那么resultType后可以直接跟类名

	<typeAliases>
        <package name="com.mystudy.pojo"/>
    </typeAliases>

maven中资源过滤配置

  • maven中写的配置文件无法导出或者失效时,解决方案:
  • 在build中配置resources,防止导出失败
 <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

Map和模糊查询扩展

Map

  1. 当实体类或数据库中的表,字段或者参数过多时,考虑使用Map传参
  • Map传递参数,直接在sql中取出key即可, parameterType="map"
  • 对象传递参数,直接在sql中取出对象属性, parameterType="Object"
  • 只有一个类型参数的情况下,可以直接在sql中取到
  • 多个参数用Map,或者注解
 	/**
     * addUser2
     * @param map
     * @return
     */
    int addUser2(Map<String,Object> map);
  @Test
    public void addUser2(){
        SqlSession sqlSession = MyBatils.getSqlSession();
        UserDaoMapper mapper = sqlSession.getMapper(UserDaoMapper.class);
        Map<String,Object> map = new HashMap<>();
        map.put("u",5);
        map.put("n","mane2");
        map.put("p","password");
        int addUser2 = mapper.addUser2(map);
        if(addUser2 > 0){
            System.out.println("successful add");
        }
        sqlSession.commit();
        sqlSession.close();
    }
 <insert id="addUser2" parameterType="map">
        insert into mybatis.user(id, name, pwd) values (#{u},#{n},#{p})
 </insert>

模糊查询

  • java代码执行的时候,传递通配符 % %
  • 在sql拼接中使用通配符
    在这里插入图片描述

配置解析

核心配置文件

  • configuration(配置)
  • properties(属性)
  • settings(设置)
  • typeAliases(类型别名)
  • typeHandlers(类型处理器)
  • objectFactory(对象工厂)
  • plugins(插件)
  • environments(环境配置)
  • environment(环境变量)
  • transactionManager(事务管理器)
  • dataSource(数据源)
  • databaseIdProvider(数据库厂商标识)
  • mappers(映射器)

环境配置

  1. MyBatis 可以配置成适应多种环境
  2. 不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境
  3. MyBatis默认事务管理器是JDBC,连接池:POOLED
事务管理器
  • JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
  • MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。

属性properties

  • 通过properties属性实现引用配置文件
  • 属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。
  1. 编写一个db.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username=root
password=123456
  1. 引入核心配置文件
    配置文件属性必须按照以下顺序写
The content of element type "configuration" must match "(properties?,settings?,typeAliases?,
typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,
databaseIdProvider?,mappers?)".
<?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">
<!--core congfig file-->
<configuration>
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <typeAliases>
        <typeAlias type="com.mystudy.pojo.User" alias="User"/>
    </typeAliases>
    <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="\com\mystudy\dao\userMapper.xml"/>
    </mappers>
</configuration>
 	<properties resource="db.properties">
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </properties>

如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:

  • 首先读取在 properties 元素体内指定的属性。
  • 然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
  • 最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。
  • 因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的则是 properties 元素中指定的属性。

类型别名(typeAliases)

  • 类型别名是为java类型设置一个短的名字
  • 存在意义是减少类完全限定的冗余
<!--给实体类起别名-->
	<typeAliases>
        <typeAlias type="com.mystudy.pojo.User" alias="User"/>
    </typeAliases>

也可以指定一个包名,Mybatis会在包名下搜索需要的javabean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名

<!--给实体类起别名-->
	<typeAliases>
        <typeAlias package="com.mystudy.pojo"/>
    </typeAliases>
  • 实体类较少时 用第一种方式
  • 实体类多,建议使用第二种
  • 第一种可以diy别名,第二种不可以,非要改客户以使用注解
@Alias("user")
public class User{}

映射器

MapperRegistry:注册绑定Mapper文件
方式一:推荐

	<mappers>
        <mapper resource="\com\mystudy\dao\userMapper.xml"/>
    </mappers>

方式二: 使用class文件绑定注册

	<mappers>
        <mapper class="com.mystudy.dao.userMapper"/>
    </mappers>

方式二注意点:

  • 接口和他的Mapper配置文件必须同名
  • 接口和他的Mapper配置文件必须在同一个包下
    方式三:使用扫描包进行注入绑定
	<mappers>
        <mapper package="com.mystudy.dao"/>
    </mappers>

注意:

  • 接口和他的Mapper配置文件必须同名
  • 接口和他的Mapper配置文件必须在同一个包下

生命周期和作用域

在这里插入图片描述
在这里插入图片描述
每个mappper对应一个业务

ResultMap结果集映射

resultMap – 描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。
ResultMap 的设计思想是,对简单的语句做 到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了
在这里插入图片描述

日志工厂

  • SLF4J
  • LOG4J (掌握)
  • LOG4J2
  • JDK_LOGGING
  • COMMONS_LOGGING
  • STDOUT_LOGGING (掌握)
  • NO_LOGGING
    STDOUT_LOGGING 标准日志输出
    在mybatis核心配置文件中,配置日志
	<settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

Log4j

在这里插入图片描述
2. log4j.properties

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.console.layout.ConversionPattern=%5p [%t] - %m%n

#文件输出的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/rzk.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

3.配置
在这里插入图片描述
在这里插入图片描述

分页

在这里插入图片描述
在这里插入图片描述

使用注解开发

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CRUD

在这里插入图片描述
在这里插入图片描述

Lombok

在这里插入图片描述
在这里插入图片描述

多对一处理

在这里插入图片描述

动态SQL

根据不同条件生成不同语句,本质还是SQL,利用SQL执行一定逻辑的代码
动态SQL就是拼接SQL语句,保证SQL的正确性,按照SQL格式排列组合

SQL片段

在这里插入图片描述

foreach

在这里插入图片描述
在这里插入图片描述

缓存

一级缓存

二级缓存

缓存原理

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值