前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java_web 学习1 Maven安装和使用2 mybatis的配置文件的详解mybatis缓冲mybatis注解延迟加载${} 与 #{} 区别【笔试题】

Java_web 学习1 Maven安装和使用2 mybatis的配置文件的详解mybatis缓冲mybatis注解延迟加载${} 与 #{} 区别【笔试题】

作者头像
用户2337871
发布2020-10-26 17:31:09
4150
发布2020-10-26 17:31:09
举报
文章被收录于专栏:git

1 Maven安装和使用

  • 1.1 下载 Maven官网下载地址 :http://maven.apache.org/download.cgi
  • 1.2 安装 Maven使用java语言开发的,解压即可运行 注意:maven依赖 JAVA_HOME
  • 1.3 目录
    • bin:存放了 maven 的命令
    • boot:存放了一些 maven 本身的引导程 序,如类加载器等
    • conf:存放了 maven 的一些配置文件,如 setting.xml 文件
    • lib:存放了 maven 本身运行所需的一些 jar 包
  • 1.4 环境变量
    • MAVEN_HOME: maven安装目录
    • path: %MAVEN_HOME%\bin
  • 1.5 配置完毕了
    • mvn --version
    • mvn help:system
    • mvn idea:idea
  • 2 Maven仓库的分类
      1. 本地仓库 项目通过jar坐标,先从本地仓库找对应jar包,如果找不到会从远程仓库(互联网)去下载 jar 包,保存在本地仓库(在程序员的电脑上),第二次不需要从远程仓库去下载。
      1. 远程仓库
      • 2.1 中央仓库 由专业团队(maven团队)统一维护。 中央仓库的地址:http://repo1.maven.org/maven2/
      • 2.2 私服 架设在公司局域网内,提供给内部的人员使用。
      • 2.3 第三方仓库 中央仓库只有一个国内使用非常慢,我们可以更换为:阿里云镜
    1. Maven仓库国内镜像配置
代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  
<!--jar包地址-->
<!-- <localRepository>I:/Java/apache-maven-3.6.3/respository</localRepository> -->

<pluginGroups></pluginGroups>
 
<proxies></proxies>

<servers></servers>

<!--配置阿里云地址-->
<mirrors>
  <mirror>
    <id>nexus-aliyun</id>
	<mirrorOf>*</mirrorOf>
	<name>Nexus aliyun</name>
	<url>http://maven.aliyun.com/nexus/content/groups/public</url>
  </mirror>
</mirrors>

 <!-- jdk版本-->
<profiles>
    <profile>
        <id>jdk‐1.8</id>
        <activation>
            <activeByDefault>true</activeByDefault>
            <jdk>1.8</jdk>
        </activation>
        <properties>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
        </properties>
    </profile>
</profiles>
</settings>
代码语言:javascript
复制
* 4. Maven常用命令和插件
    * clean----maven工程的清理命令,执行clean会删除target目录及内容。
    * compile----maven工程的编译命令,作用是将 src/main/java 下的文件编译为class文件输出到target目录下。
    * test----maven工程的测试命令,作用是执行 src/test/java 下单元测试类,并编译为class文件。
    * package----maven工程的打包命令,对于java工程执行package打成jar包,对于web工程打成war包。
    * install----maven工程的安装命令,执行install将mave工程打成jar包或war包,并发布到本地仓库。
代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>maven_hello</groupId>
    <artifactId>maven_hello</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--
        packaging决定打包类型:war:war包
                              jar:jar包(默认)
    -->
    <packaging>war</packaging>

    <!--引入单元测试junit的jar包-->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>

    </dependencies>

    <!--指定jdk的版本-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2 mybatis的配置文件的详解

代码语言:javascript
复制
<?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>

    <!--加载properties文件-->
    <properties resource="jdbc.properties"></properties>

    <settings>
        <!--开启全局延迟加载功能-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--所有方法都会延迟加载-->
        <setting name="lazyLoadTriggerMethods" value="toString()"/>
        <!--
       因为cacheEnabled的取值默认就为true,所以这一步可以省略不配置。
       为true代表开启二级缓存;为false代表不开启二级缓存。
   -->
        <setting name="cacheEnabled" value="true"/>
    </settings>

    <!--设置别名-->
    <typeAliases>
        <!--方式一:给单个实体起别名-->
       <!-- <typeAlias type="com.lagou.domain.User" alias="user"></typeAlias>-->
        <!--方式二:批量起别名 别名就是类名,且不区分大小写-->
        <package name="com.lagou.domain"/>

    </typeAliases>
    <!--environments: 运行环境-->
    <environments default="development">
        <environment id="development">
                <!--当前的事务事务管理器是JDBC-->
            <transactionManager type="JDBC"></transactionManager>
                <!--数据源信息 POOLED:使用mybatis的连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入映射配置文件-->
    <mappers>
       <!--<mapper resource="com/lagou/mapper/UserMapper.xml"></mapper>-->
        <!--使用该方式:接口和映射文件需要同包同名-->
       <!-- <mapper class="com.lagou.mapper.UserMapper"></mapper>-->
        <!--批量加载映射-->
        <package name="com.lagou.mapper"/>
    </mappers>
</configuration>

mybatis缓冲

代码语言:javascript
复制
* 1. mybatis的缓存,都不需要我们手动存储和获取数据。mybatis自动维护的。
* 2. mybatis开启了二级缓存后,那么查询顺序:二级缓存--》一级缓存--》数据库
* 3. 注意:mybatis的二级缓存会存在脏读问题,需要使用第三方的缓存技术解决问题。
代码语言:javascript
复制
<mapper namespace="com.lagou.dao.UserMapper">
    <!--当前映射文件开启二级缓存-->
    <cache></cache>
    <!--
    <select>标签中设置useCache=”true”代表当前这个  statement要使用二级缓存。
    如果不使用二级缓存可以设置为false
    注意:
    针对每次查询都需要最新的数据sql,要设置成   useCache="false",禁用二级缓存。
    -->
    <select id="findById" parameterType="int"   resultType="user" useCache="true"
    >
    SELECT * FROM `user` where id = #{id}
    </select>
</mapper>

mybatis注解延迟加载

  • 不管是一对一还是一对多 ,在注解配置中都有fetchType的属性
    • fetchType = FetchType.LAZY 表示懒加载
    • fetchType = FetchType.EAGER 表示立即加载
    • fetchType = FetchType.DEFAULT 表示使用全局配置
  • 注解开发和xml配置优劣分析
    • 1.注解开发和xml配置相比,从开发效率来说,注解编写更简单,效率更高。
    • 2.从可维护性来说,注解如果要修改,必须修改源码,会导致维护成本增加。xml维护性更强

${} 与 #{} 区别【笔试题】

#{} :表示一个占位符号

代码语言:javascript
复制
* 通过 #{} 可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。
* #{} 可以接收简单类型值或pojo属性值。
  • 如果parameterType传输单个简单类型值, #{} 括号中名称随便写。

${} :表示拼接sql串

  • 通过 ${} 可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换,会出现sql注入 问题。
  • ${} 可以接收简单类型值或pojo属性值。
  • 如果parameterType传输单个简单类型值, ${} 括号中只能是value。
    • 补充:TextSqlNode.java 源码可以证明
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 Maven安装和使用
  • 2 mybatis的配置文件的详解
  • mybatis缓冲
  • mybatis注解延迟加载
  • ${} 与 #{} 区别【笔试题】
    • #{} :表示一个占位符号
      • ${} :表示拼接sql串
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档