首页 > 其他分享 >mybatis的快速入门配置,以及其中的配置讲解

mybatis的快速入门配置,以及其中的配置讲解

时间:2022-12-19 16:56:52浏览次数:65  
标签:username 入门 配置 test User sql mybatis password id

Mybatis的快速入门配置,以及其中的配置理解

1.快速入门案例(未使用mapper代理方式)

image-20221207160927395

(1).新建数据库,以及相关的表

CREATE TABLE `tb_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) DEFAULT NULL,
  `password` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8

image-20221207155615075

实体类

package pojo;

public class User {

    Integer id;
    String username;
    String password;


    public String getUsername() {
        return username;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

(2).创建maven项目,在pom文件中导入相关依赖坐标

<?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>org.example</groupId>
    <artifactId>MybatisTest</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>

        <!-- 添加slf4j日志api -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.20</version>
        </dependency>
        <!-- 添加logback-classic依赖 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!-- 添加logback-core依赖 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
    </dependencies>


    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

</project>

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--
        CONSOLE :表示当前的日志信息是可以输出到控制台的。
    -->
    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%level] %blue(%d{HH:mm:ss.SSS}) %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n</pattern>
        </encoder>
    </appender>

    <logger name="src/main" level="DEBUG" additivity="false">
        <appender-ref ref="Console"/>
    </logger>


    <!--

      level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
     , 默认debug
      <root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
      -->
    <root level="DEBUG">
        <appender-ref ref="Console"/>
    </root>
</configuration>

(3).在资源目录创建mybatis核心配置文件,修改其中的信息,比如自己电脑中数据库的端口,密码之类(通过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="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3307/loaduser?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--加载sql的映射文件-->
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

(4).创建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="dddd">
    <select id="selectall" resultType="User">
        select * from tb_user
    </select>
</mapper>

(5).在main函数中,使用Resources(ibatis包内的).getResourceAsStream读取核心配置文件

   public static void main(String[] args) throws IOException {
        String resource = "mybatis.xml";
        InputStream str = Resources.getResourceAsStream(resource);
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(str);
        SqlSession sqlSession = build.openSession();
        List<User> k=sqlSession.selectList("dddd.selectall");
        System.out.println(k);
    }

(6)显示结果

image-20221207155409941

2.使用mapper代理的方式

(1)定义与sql映射文件同名的Mapper接口,并将Mapper接口与sql映射文件置于同一目录下.

创建mapper包,设置结构

image-20221207161826982

修改核心配置类中sql映射文件的路径

image-20221207161721610

(2)设置sql映射文件中的namespace属性为Mapper接口全限定名

image-20221207162230381

(3)在Mapper接口中定义方法,方法名即是sql映射文件中sql语句的id,并保持参数类型和返回值类型一致

创建UserMapper接口

image-20221207161902174

(4).编码.

​ 1.通过sqlsession的getmapper方法获取Mapper接口的代理对象

     UserMapper usermapper = sqlSession.getMapper(UserMapper.class);
        List<User> k=usermapper.selectall();
       System.out.println(k);

​ 2.调用对应方法完成sql的执行

image-20221207163140082

3.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>
<!--properties标签
  username 和 password 将会由 properties 元素中设置的相应值来替换。
  driver 和 url 属性将会由 datasouceconfig.properties 文件中对应的值来替换。
  这样就为配置提供了诸多灵活选择。
  如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:
        首先读取在 properties 元素体内指定的属性。
        然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
        最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。
        因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的则是 properties 元素中指定的属性。
 -->
    <properties resource="datasouceconfig.properties">
        <property name="username" value="username"/>
        <property name="password" value="password"/>
    </properties>
    <typeAliases>
        <!--
            类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。
            也可以指定一个包名
            MyBatis 会在包名下面搜索需要的 Java Bean
            每一个在包 pojo 中的 Java Bean.
                1.在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。
                比如 pojo.User 的别名为 user;
                2.若有注解,则别名为其注解值。
                @Alias("user")其别名就是user
         -->
        <package name="pojo"/>
    </typeAliases>

    <environments default="development">
<!--        MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中,-->
        <environment id="development">
<!--            默认使用的环境 ID(比如:default="development")。
                每个 environment 元素定义的环境 ID(比如:id="development")。
                事务管理器的配置(比如:type="JDBC")。
                数据源的配置(比如:type="POOLED")。
                默认环境和环境 ID 顾名思义。 环境可以随意命名,但务必保证默认的环境 ID 要匹配其中一个环境 ID。-->
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3307/loaduser?useSSL=false"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
<!--既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要来定义 SQL 映射语句了。 但首先,我们需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名等。-->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
    <!--这些配置会告诉 MyBatis 去哪里找映射文件,剩下的细节就应该是每个 SQL 映射文件了-->
</configuration>

(具体可看https://mybatis.net.cn/configuration.html)

4.实体类中属性名称与数据库中字段名不对应

当然都是在select标签属性中设置

注意:我这里表中字段名和实体类中属性名一致,以下只是模拟展示一下使用方法

第一种方法:起别名

<?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="mapper.UserMapper">
    <select id="selectall" resultType="user">
        <!--给表中字段起别名-->
        select id as id,username as username,password as password from tb_user;
    </select>
</mapper>

第二种方法:定义sql片段,其实也是起别名,不过提高了复用性

<?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="mapper.UserMapper">
    
    <sql id="user_column">
        id as id,username as username, password
    </sql>

    <select id="selectall" resultType="user">
        select
        <include refid="user_column"></include>
        from tb_user;
    </select>
</mapper>

第三种:使用resultMap做映射

  • resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作。实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份 resultMap 能够代替实现同等功能的数千行代码。ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了。
  • resultMap期望从这条语句中返回结果的类全限定名或别名。 注意,如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。 resultType 和 resultMap 之间只能同时使用一个。
  • 更多请看XML 映射器_MyBatis中文网
<?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="mapper.UserMapper">
<!--    id是唯一表识,type是映射的类型,支持别名-->
    <resultMap id="Userresult" type="User">
<!--     id标签完成主键的映射
            column 表中的列名
            property 实体类的属性名
         result完成一般字段的映射

  -->
        <id column="id" property="id" ></id>
        <result column="username" property="username"></result>
        <result column="password" property="password"></result>
    </resultMap>

    <select id="selectall" resultMap="Userresult">
        select * from tb_user;
    </select>
</mapper>

使用方法

(1)定义resultMap标签

(2)在select标签中使用resultMap属性替换resultType属性

5.参数传递

Mybatis框架中使用条件查询可能需要接收参数,有三种接收参数的方式:

1.散装参数: 如果方法中有多个参数,需使用@Param("SQL参数占位符名称")接收

2.对象参数:对象的属性名称要和参数占位符名称一致

3.Map集合参数

实例可在条件查询中多条件查询

Mybatis提供了ParamNameResolver类来进行参数封装

1.单个参数(POJO,Map集合,Collection,List,Array,其它类型)

POJO:直接使用.属性名 和 参数占位符名称一致

Map集合:直接使用,键名 和 参数占位符名称一致

Collection:封装为Map集合

​ map.put("arg0",collection集合);

​ map.put("collection",collection集合);

List:封装为Map集合

​ map.put("arg0",list集合);

​ map.put("collection",list集合);

​ map.put("list",list集合);

Array:封装为Map集合

​ map.put("arg0",数组);

​ map.put("array",数组);

2.多个参数

Mybatis将接收到的参数封装成Map集合,并设置默认的键值,可使用@Param来替换默认的键值

map.put("arg0",参数值1);
map.put("param1",参数值1);
map.put("param2",参数值2);
map.put("arg1",参数值2);

如需更加深入,可看Mybatis源码

6.查询功能

(1)查询所有

sql映射文件中相应代码

<mapper namespace="mapper.UserMapper">
<!--    id是唯一表识,type是映射的类型,支持别名-->
    <resultMap id="Userresult" type="User">
        <id column="id" property="id" ></id>
        <result column="username" property="username"></result>
        <result column="password" property="password"></result>
    </resultMap>
    <select id="selectall" resultMap="Userresult">
        select * from tb_user
    </select>
</mapper>

对应接口

public interface UserMapper {
   List<User> selectall();
}
(2)查看详情

主函数中相关代码

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User k = mapper.selectone(32);
        System.out.println(k);

sql映射文件中相关代码

<!--
    *参数占位符
    1.${}:拼接sql,会存在sql注入问题
    2.#{}:会将其替换为?,为了防止sql注入问题
    3.使用时机:
        * 参数传递时:#{}
        * 表名或者列名不固定的情况下:${},会存在sql注入问题

    *参数类型:parameterType可不写,省略
-->
    <select id="selectone" parameterType="int" resultMap="Userresult">
        select * from tb_user where id = #{id};
    </select>

UserMapper接口中相关方法

  User selectone(int id);

运行结果如下:

image-20221207212647715

(3)条件查询
1.非动态多条件查询

[1]散装参数:

需求 :根据用户输入的username与password在数据库中查找相关信息

主函数中代码

//模拟接收参数
String username="ad";
String password="7";
//对参数进行处理,毕竟是模糊查询
username="%"+username+"%";
password="%"+password+"%";
List<User> k = mapper.selectcondition(username, password);
System.out.println(k);

UserMapper接口中相关方法代码

//此处@Param()括号中对应sql映射文件中的#{}括起来的字段名
List<User> selectcondition(@Param("myname")String username,@Param("myword") String user);

Sql映射文件UserMapper.xml文件中相关代码

<select id="selectcondition" resultMap="Userresult">
    select *
    from tb_user where
       username like #{myname} and
       password like #{myword};
</select>

运行结果

image-20221207222538232

[2]对象参数

需求 :根据传入的User对象在数据库中查找相应信息

主函数中相关代码

//模拟传入对象
User test=new User();
test.setId(33);
test.setUsername("1223");
test.setPassword("1223");
//调用方法
User k = mapper.selectcondition1(test);
System.out.println(k);

UserMapper接口

   User selectcondition1(User one);

sql映射文件UserMapper.xml相关的代码

<select id="selectcondition1" resultMap="Userresult" >
    select *
    from tb_user where
        id = #{id} and
        username = #{username} and
        password = #{password};
</select>

运行结果

image-20221207223342415

[3]map集合参数

主函数中相关代码

//模拟传入map对象
Map <String,Object> map=new HashMap<>();
map.put("id",2);
map.put("username","lisi");
map.put("password","234");
//调用方法获取查询的对象
User k=mapper.selectcondition1(map);
System.out.println(k);

sql映射文件中相关代码与[2]中一样,并未修改

在UserMapper接口中新增方法

User selectcondition1(Map map);

运行结果

image-20221207224526503

2.动态多条件查询

问题:用户查询不一定全部把条件输入,可能输一两个,也可能一个都不输入,这个时候就需要使用动态sql了.

主函数

        //模拟传入对象
        User test=new User();
//        test.setId(2);
        test.setUsername("lisi");
        test.setPassword("234");
        //调用方法
        User k = mapper.selectcondition1(test);
        System.out.println(k);

接口方法

User selectcondition1(User one);

sql映射文件

<!--    *if标签: 条件判断
            *test:逻辑表达式
           产生的问题如何解决
           *恒等式
           *<where>
-->
<select id="selectcondition1" resultMap="Userresult" >
    select *
    from tb_user where 1 = 1
        <if test="id != null">
            and id = #{id}
        </if>
        <if test="username != null and username != '' ">
            and username = #{username}
        </if>
       <if test="password != null and password != '' ">
           and password = #{password};
       </if>
</select>

运行结果

image-20221208125755771

使用运行结果

<select id="selectcondition1" resultMap="Userresult" >
    select *
    from tb_user 
        <where>
        <if test="id != null">
            and id = #{id}
        </if>
        <if test="username != null and username != '' ">
            and username = #{username}
        </if>
       <if test="password != null and password != '' ">
           and password = #{password};
       </if>
        </where>
</select>

image-20221208125923000

3.单条件的动态查询

问题:下拉框有多个选择.从多个选择中选择一个.

choose、when、otherwise

有时候,我们不想使用所有的条件,而只是想从多个条件中选择一个使用。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。

主函数中代码

//模拟传入对象
User test=new User();
test.setId(1);
test.setUsername("lisi");
test.setPassword("1223");
//调用方法
User k = mapper.selectconditionbyone(test);
System.out.println(k);

UserMapper接口中相关代码

User selectconditionbyone(User one);

UserMapper.xml映射文件中相关代码

<!--    choose标签相当于java里面的switch -->
<!--    when标签相当于java中switch里面的case-->
<!--    otherwise标签相当于java中switch里面的default
        1 = 1防止用户什么都不输入报错
-->
    <select id="selectconditionbyone" resultType="pojo.User">
        select *
        from tb_user where
        <choose>
            <when test="id != null">
                id = #{id};
            </when>
            <when test="username != null and username != ''">
                username = #{username};
            </when>
            <when test="password != null and password != '' ">
                password = #{password};
            </when>
            <otherwise>
                1 = 1;
            </otherwise>
        </choose>
    </select>

7.添加修改

首先需要设置自动提交或者手动提交事务

手动提交 : sqlsession.commit();

自动提交 : sqlsessionfactory.opensession(true);

insert、delete、update操作默认返回一个int类型的整数,将增删改的接口改成int或者void即可。

1.添加
1.基础添加

主函数中相关代码

        //模拟传入对象
User test=new User();
test.setUsername("lisddi");
test.setPassword("1223dd");
//调用方法
mapper.addbase(test);
sqlSession.commit();
System.out.println(mapper.selectall());

UserMapper接口中相关代码

void  addbase(User one);

Sql映射文件中代码

<insert id="addbase">
    insert into tb_user (username,password) values (#{username},#{password});
</insert>

运行结果

image-20221209132004796

2.主键返回添加

只需在基础的添加之上设置两个标签的值,以及更改接口的返回类型即可

主函数相关代码

//模拟传入对象
User test=new User();
test.setUsername("lisdfdddi");
test.setPassword("1sdf23dd");
//调用方法
mapper.addreturn(test);
sqlSession.commit();
System.out.println(test.getId());

接口方法相关代码

void addreturn(User one);

sql映射文件

<insert id="addreturn" useGeneratedKeys="true" keyProperty="id">
    insert into tb_user (username,password) values (#{username},#{password});
</insert>

运行结果

image-20221209142121245

2.修改

问题:修改数据

1.修改全部字段

主函数相关代码

//模拟传入对象
User test=new User();
test.setId(34);
test.setUsername("lwew");
test.setPassword("1111");
//调用方法
mapper.updateall(test);
sqlSession.commit();
System.out.println(test.getId());

接口

void updateall(User one);

sql映射文件

    <update id="updateall">
        update tb_user
        set
            username = #{username},
            password = #{password}
        where
            id = #{id};
    </update>

程序运行结果

image-20221209164642249

2.修改动态字段

主函数相关代码

//模拟传入对象
User test=new User();
test.setId(34);
test.setPassword("2222");
//调用方法
mapper.updateooo(test);
sqlSession.commit();

UserMapper接口相关方法

void updateooo(User one);

sql映射文件相关代码

<update id="updateooo">
    update  tb_user
    <set>
        <if test="username != null and username != '' ">
            username = #{username},
        </if>
        <if test="password != null and password != '' ">
            password = #{password}
        </if>
    </set>
    where id = #{id};
</update>

运行结果

image-20221209173603029

8.删除功能

1.删除一个

主函数相关代码

 //模拟传入对象
        User test=new User();
//        test.setId(34);
        test.setPassword("2222");
        //调用方法
        mapper.deleteById(test);
        sqlSession.commit();

UserMapper接口相关方法

void deleteById(User one);

sql映射文件相关代码

<delete id="deleteById">
    delete
    from tb_user
    where id = #{id};
</delete>

运行结果

image-20221209174902228

2.删除多个

传入id数组,删除多个数据

主函数相关代码

//模拟传入对象
List a= new ArrayList<>();
a.add(36);
a.add(40);
//调用方法
mapper.deleteids(a);
sqlSession.commit();

UserMapper接口相关方法

//   为什么要加@Param注解?
//   mybatis会将数组参数,封装为一个Map集合.
//      默认:array = 数组
//      也可以使用@Param注解改变Map集合默认的key的名称
   void deleteids(@Param("ids") List<Integer> ids);

sql映射文件相关代码

<!--    delete from 表名 where id in (?,?,?,?)
        这里使用动态sql
        collection对应遍历数组的名字
-->
    <delete id="deleteids">
        delete
        from tb_user
        where id in 
            <foreach collection="ids" item="id" separator="," open="(" close=")">
                #{id}
            </foreach>
    </delete>

程序运行结果

image-20221209180522439

9.特殊字符处理

在sql映射文件中编写条件判断的时候使用 <,>之类的符号idea报错

特殊字符处理方法

​ 1.转义字符:

img

​ 2.CDATA区

​ 使用将需要使用的符号包裹起来,以下是实际的例子使用

<select id="selectone" parameterType="int" resultMap="Userresult">
        select * from tb_user where id  <![CDATA[
        <
        ]]> 78;
    </select>

10.注解开发

使用注解开发方式会比配置文件开发更加方便快捷,但不适合写一些比较复杂的sql语句

以下举个例子:

@Select("select *from tb_user where id = #{id}")
public User selectok(int id);
查询 @Select
添加 @Insert
修改 @Update
删除 @Delete

本篇笔记只是对自己学习Mybatis框架时的记录,一些知识点可能并不透彻,若要详细学习,还请移步MyBatis中文网或者查看Mybatis源码

谢谢观看!

标签:username,入门,配置,test,User,sql,mybatis,password,id
From: https://www.cnblogs.com/lixubing/p/16992529.html

相关文章

  • 【C++入门】(三)循环结构
    一.while循环循环版的if语句。if语句是判断一次,如果条件成立,则执行后面的语句while是每次判断,如果成立,则执行循环体中的语句,否则停止#include<iostream>using......
  • nrm安装与配置
    1、nrm介绍nrm(npmregistrymanager)是npm的镜像源管理工具,使用这个就可以快速地在 npm 源间切换2,nrm安装在命令行执行命令,npminstall-gnrm,全局安装nrm。安装......
  • 零基础入门 Java 后端开发,有哪些值得看的视频?
    目前网络上充满了大量的Java视频教程,然而内容却鱼龙混杂,为了防止小伙伴们踩坑,一枫结合自己的学习经验,向大家推荐一些不错的学习资源。作为一名非科班转码选手,可以说,我......
  • mybatis-plus整合flowable springboot启动失败了 Correct the classpath of your appl
    问题描述:​ mybatis-plus整合flowable的时候发现springboot启动失败了异常信息如下:***************************APPLICATIONFAILEDTOSTART***********************......
  • docker-compose入门以及部署SpringBoot+Vue+Redis+Mysql(前后端分离项目)以若依前后端
    场景若依前后端分离版手把手教你本地搭建环境并运行项目:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662上面在搭建起来前后端分离版的项目后。......
  • Eclipse下载安装和JDK下载安装(环境配置)及下载C++插件CDT
    一、什么是JDKJDK是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA......
  • nginx入门指南之自定义编译安装(一)
    nginx之编译安装(一)一.下载软件软件名模块地址zlibgzip模块​​http://zlib.net/zlib-1.2.11.tar.gz​​pcrerewrite模块​​https://ftp.pcre.org/pub/pcre/pcre-8.00.tar.......
  • nginx入门指南之信号量与热部署(二)
    一.Nginx进程结构Nginx有两种进程结构:单进程和多进程结构。编译安装之后默认是只有一个workerprocess进程,这个可以在nginx.conf中配置。推荐:​​worker​​​进程数应该......
  • mybatis源码分析之配置文件解析
    一、简介我们上一个篇文章已经配置好了,​​mybatis​​​配置文件和测试类。我们先分析一下​​mybatis​​​的是如何加载​​mybatis-config.xml​​文件的。Stringresou......
  • Netty应用之入门实例
    一、​​Linux​​​五大网络​​IO​​模型我们在学些​​netty​​​我们需要了解下​​linux​​​的​​IO​​​模型,我们的​​java​​​的​​IO​​模型也是在此基......