欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis新手教程之簡單入門

 更新時間:2019年02月11日 09:33:55   作者:風(fēng)沙迷了眼  
這篇文章主要給大家介紹了關(guān)于Mybatis新手教程之簡單入門的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

1、Mybatis概述  

MyBatis 是支持普通 SQL 查詢(相比較于Hibernate的封裝,Mybatis是半自動化的JDBC封裝,一個特點就是Mybatis執(zhí)行的SQL查詢語句需要自己在配置文件中寫),存儲過程和高級映射的優(yōu)秀持久層框架。MyBatis 消除了幾乎所有的 JDBC 代碼和參數(shù)的手工設(shè)置以及對結(jié)果集的檢索。MyBatis 可以使用簡單的XML 或注解用于配置和原始映射,將接口和 Java 的 POJO(Plain Old Java Objects,普通的Java 對象)映射成數(shù)據(jù)庫中的記錄。

2、Mybatis原理解析

下面以Mybatis簡單的執(zhí)行流程

  1、加載mybatis全局配置文件(數(shù)據(jù)源、mapper映射文件等),解析配置文件,MyBatis基于XML配置文件生成Configuration,和一個個MappedStatement(包括了參數(shù)映射配置、動態(tài)SQL語句、結(jié)果映射配置),其對應(yīng)著<select | update | delete | insert>標(biāo)簽項。

  2、SqlSessionFactoryBuilder通過Configuration對象生成SqlSessionFactory,用來開啟SqlSession。

  3、SqlSession對象完成和數(shù)據(jù)庫的交互:

  a、用戶程序調(diào)用mybatis接口層api(即Mapper接口中的方法)

  b、SqlSession通過調(diào)用api的Statement ID找到對應(yīng)的MappedStatement對象

  c、通過Executor(負(fù)責(zé)動態(tài)SQL的生成和查詢緩存的維護(hù))將MappedStatement對象進(jìn)行解析,sql參數(shù)轉(zhuǎn)化、動態(tài)sql拼接,生成jdbc Statement對象

  d、JDBC執(zhí)行sql。

  e、借助MappedStatement中的結(jié)果映射關(guān)系,將返回結(jié)果轉(zhuǎn)化成HashMap、JavaBean等存儲結(jié)構(gòu)并返回。

下面是Mybatis的框架原理圖

  

3、Mybatis簡單實例

(1)導(dǎo)入相關(guān)jar包以及Mybatis運行環(huán)境核心jar包和連接數(shù)據(jù)庫的包

(2)創(chuàng)建一張簡單的數(shù)據(jù)表

(3)創(chuàng)建Java對象(PO類型)

package cn.mybatis.po;

public class User {
 private int id;
 private String username;
 private String password;
 private String address;
 private String sex;

 public int getId() {
 return id;
 }

 public String getUsername() {
 return username;
 }

 public String getPassword() {
 return password;
 }

 public String getAddress() {
 return address;
 }

 public String getSex() {
 return sex;
 }

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

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

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

 public void setAddress(String address) {
 this.address = address;
 }

 public void setSex(String sex) {
 this.sex = sex;
 }

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

User實體類

(4)創(chuàng)建Mybatis核心配置文件(SqlMapConfig.xml)

在核心配置文件配置連接數(shù)據(jù)庫的相關(guān)信息,(如果是和Spring整合,則可以放在Spring配置文件中進(jìn)行對數(shù)據(jù)庫的配置)

<?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 resource="jdbc.properties"></properties>
 &lt;!&ndash;settings配置LOG4J輸出日志 &ndash;&gt;
 <settings>
 <setting name="logImpl" value="LOG4J"/>
 </settings>-->
 <!--typeAliases配置包的別名-->

 <!--environments配置了數(shù)據(jù)庫連接,配置了driver、url、username、password屬性-->
 <environments default="development">
 <environment id="development">
  <transactionManager type="JDBC">
  <!--<property name="" value="" />-->
  </transactionManager>
  <dataSource type="POOLED">
  <property name="driver" value="com.mysql.jdbc.Driver" />
  <property name="url" value="jdbc:mysql:///mybatis01" />
  <property name="username" value="root" />
  <property name="password" value="123" />
  </dataSource>
 </environment>
 </environments>
 <!--配置一個SQL語句和映射的配置文件-->
 <mappers>
 <mapper resource="UserMapper.xml" />
 </mappers>
</configuration>

Mybatis核心配置文件

(5)創(chuàng)建一個Mapper.xml文件,對應(yīng)編寫所需要的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 namespace="test">
 <!--定義一個SELECT查詢-->
 <!--parameterType:指定輸入?yún)?shù)的類型-->
 <!--#{}表示占位符-->
 <!--#{id}:其中的id表示的就是接受的輸入?yún)?shù),
  參數(shù)名稱就是id,
 這里指出:如果輸入?yún)?shù)是簡單類型,#{}中的參數(shù)名可以任意設(shè)置(value或者其他名稱)-->
 <!--resultType:指定輸出類型(即指定輸出結(jié)果所映射的Java對象類型)-->
 <select id="findUserById" parameterType="int" resultType="cn.mybatis.po.User">
 SELECT * FROM t_user WHERE id = #{id}
 </select>
</mapper>

UserMapper配置文件

(7)創(chuàng)建測試程序,對剛剛編寫的select查詢進(jìn)行測試

package cn.mybatis.first;

import cn.mybatis.po.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class Test {

 public User findUserById() throws IOException {
 //得到mybatis配置文件
 String resource = "SqlMapConfig.xml";
 //得到配置文件的文件流信息
 InputStream inputStream = Resources.getResourceAsStream(resource);
 //創(chuàng)建會話工廠 傳入mybatis的配置文件信息
 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 //通過會話工廠得到SqlSession
 SqlSession sqlSession = sqlSessionFactory.openSession();
 //通過sqlSession來操作數(shù)據(jù)庫
 //第一個參數(shù)就是映射文件中statment的id:namespace +statment的id
 //第二個參數(shù)就是制定映射文件中的parameterType類型的參數(shù)
 User user = sqlSession.selectOne("test.findUserById",1);
 //System.out.println(user);

 //釋放會話資源

 try {
  sqlSession.close();
 } catch (Exception e) {
  e.printStackTrace();
 }
 return user;
 }

 public static void main(String[] args) {
 // TODO Auto-generated method stub
 Test test = new Test();

 try {
  System.out.println(test.findUserById());
 } catch (IOException e) {
  e.printStackTrace();
 }

 }
}

Test測試程序

(8)加入Log4j日志文件

### direct log messages to stdout ###

log4j.rootLogger=DEBUG, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

Log4j.properties

(9)測試結(jié)果

4.其他CRUD操作

(1)insert操作

在Mapper文件中添加響應(yīng)的SQL配置,以及使用MySQL中的LAST_INSERT_ID()函數(shù)得到增加的數(shù)據(jù)的主鍵值

<insert id="addUser" parameterType="cn.mybatis.po.User">
 <!--
 現(xiàn)在需要得到剛剛插入的記錄中的主鍵值,只適用于自增主鍵的情況
 LAST_INSERT_ID()
 keyProperty:將查詢到的主鍵值設(shè)置到parameterType指定對象中的那個屬性
 order:指定相對于insert的順序
 resultType:指定映射結(jié)果的結(jié)果類型
 -->
 <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
  SELECT LAST_INSERT_ID()
 </selectKey>
 INSERT INTO t_user(id,username,password,address,sex) VALUES(#{id},#{username},#{password},#{address}, #{sex});
 </insert>

插入數(shù)據(jù)的日志信息,沒有使用sqlSession.commit();之前的日志情況

從上面的圖中可以看出,沒有添加commit的時候,事務(wù)進(jìn)行了回滾,所以要想添加數(shù)據(jù),需要自己手動提交(在沒有整合Spring之前)

附上insertUser的函數(shù)

public void inserUser() throws IOException {
 //得到配置文件的文件流信息
 InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 SqlSession sqlSession = sqlSessionFactory.openSession();

 User user = new User("World","1234","武漢市","男");
 sqlSession.insert("test.addUser",user);
 System.out.println(user.getId());
 sqlSession.commit();
 //釋放會話資源
 try {
  sqlSession.close();
 } catch (Exception e) {
  e.printStackTrace();
 }
 }

inserUser函數(shù)

(2)模糊查詢

首先配置Mapper文件,${}和#{}的簡單區(qū)別如下:

<!--
 模糊查詢可能會查詢多條記錄
 resultType:指定的就是查詢結(jié)果對應(yīng)的單條記錄類型
 ${}:表示將輸入的參數(shù)不加任何的修飾,直接作為字符串拼接在SQL中
 但是這樣直接拼接,容易導(dǎo)致SQL注入的隱患
 ${value}中的value表示接受的輸入?yún)?shù),注意如果輸入?yún)?shù)是簡單類型,其中的形參只能用value
 -->
 <select id="findUserByUsername" parameterType="java.lang.String" resultType="cn.mybatis.po.User">
 SELECT * FROM t_user WHERE username LIKE '%${value}%'
 </select>

使用查詢的時候碰到一個小錯誤,由于之前測試的insert方法,其中在User實體類中添加了有參構(gòu)造函數(shù),所以出現(xiàn)了下面的錯誤,分析原因就是:使用Mybatis查詢的時候需要在實體類中加入無參構(gòu)造方法(當(dāng)然如果實體類本身沒有構(gòu)造函數(shù),就會是默認(rèn)的無參構(gòu)造函數(shù))

附上findByUsername的函數(shù)實現(xiàn)

public void findUserByUsername() throws IOException {
 //得到配置文件的文件流信息
 InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 SqlSession sqlSession = sqlSessionFactory.openSession();

 List<User> userList = sqlSession.selectList("test.findUserByUsername","u");
 System.out.println(userList);
 //釋放會話資源
 try {
  sqlSession.close();
 } catch (Exception e) {
  e.printStackTrace();
 }
 }

findByUsername函數(shù)實現(xiàn)

(3)刪除操作

首先在Mapper中配置刪除的操作

 <delete id="deleteUser" parameterType="java.lang.Integer">
  DELETE FROM t_user WHERE id = #{value}
 </delete>

運行測試程序,同insert中一樣,需要手動提交事務(wù),如下面所示

最終結(jié)果:

數(shù)據(jù)表中刪除了編號為10的數(shù)據(jù)記錄

5.細(xì)節(jié)整理

(1)關(guān)于示例程序中一些相關(guān)類的理解

   a)SqlSessionFactoryBuilder

   用來創(chuàng)建SqlSessionFactory。因為SqlSessionFactory使用了單例模式,所以不需要使用單例模式來管理SqlSessionFactoryBuilder,只需要在創(chuàng)建SqlSessionFactory時 候使用一次就可以

   b)SqlSessionFactory

   會話工廠,用來創(chuàng)建SqlSession??梢允褂脝卫J絹砉芾鞸qlSessionFactory這個會話工廠,工廠創(chuàng)建之后,就一直使用一個實例。

   c)SqlSession

   面向程序員的接口,提供了操作數(shù)據(jù)庫的方法。SqlSession是線程不安全的(原因:在SqlSession實現(xiàn)類中除了接口中的操作數(shù)據(jù)庫的方法之外,還有數(shù)據(jù)域的屬性,比如說一些提交的數(shù)據(jù)等等,所以在多線程并發(fā)請求的時候,會導(dǎo)致線程不安全),所以我們可以將SqlSession使用在方法體里面,這樣每個線程都有自己的方法,就不會沖突

(2)Mybatis中mapper映射文件

  如同解釋Mybatis執(zhí)行原理的時候一樣,Mapper映射文件中配置的Sql語句,實際上在執(zhí)行的時候都被封裝稱為一個個MapperStatment對象,即Mapper映射文件是按照statment來管理不同的Sql。在編寫程序的時候,我們在使用SqlSession其中的操作數(shù)據(jù)庫的方法(selectOne,selectList等等)的時候,傳入的參數(shù)除了實參(id,模糊查詢的字符串等等)之外,還需要傳入的就是相應(yīng)的Sql位置,而Sql是被Statment管理,所以就是傳入namespace+statmentId

(3)占位符

   #{id}:其中的id表示的就是接受的輸入?yún)?shù),參數(shù)名稱就是id,這里指出:如果輸入?yún)?shù)是簡單類型,#{}中的參數(shù)名可以任意設(shè)置(value或者其他名稱)

   ${value}:表示將輸入的參數(shù)不加任何的修飾,直接作為字符串拼接在SQL中但是這樣直接拼接,容易導(dǎo)致SQL注入的隱患${value}中的value表示接受的輸入?yún)?shù),注意如果輸入?yún)?shù)是簡單類型,其中的形參只能用value

(4)別名定義

     ①單個別名的定義

<typeAliases>
 <!--針對單個別名的定義-->
 <typeAlias type="cn.mybatis.po.User" alias="user"></typeAlias>
 </typeAliases>

      定義別名后的使用

 <select id="findUserByIdTest" parameterType="int" resultType="user">
  SELECT * FROM t_user WHERE id = #{id}
 </select>

     ②批量別名的定義

 <typeAliases>
  <!--批量別名定義:Mybatis在定義別名的時候會自動掃描包中的po類,自動的將別名定義為類名(首字母大寫或者小寫都可以)-->
  <package name="cn.mybatis.po"></package>
 </typeAliases>

(5)在SqlMapConfig.xml中加載Mapper映射文件的時候,除了通過resource的方式,還可以使用mapper接口加載的方式來實現(xiàn)

 ?、偈紫认茸⒁庖稽c:

     在配置mybatis-config.xml時,其中的節(jié)點是有順序的,配置順序依次為:

properties/settings/typeAliases/typeHandlers/objectFactory/objectWrapperFactory/plugins/environments/databaseIdProvider/mappers

     ②使用mapper加載的方式,要將mapper接口和mapper配置文件放在同一目錄下面,并且文件名稱一致,而且要遵循mapper代理的方式進(jìn)行開發(fā)

 <mappers>
  <mapper class="cn.mybatis.mapper.UserMapper"></mapper>
 </mappers>

6.Mybatis開發(fā)dao方法簡介

 ?。?)使用dao接口+實現(xiàn)類的方式

   a)首先編寫接口,如同一般編寫模式方式進(jìn)行編寫

package cn.mybatis.dao;

import cn.mybatis.po.User;

/**
 * 原始Dao方式開發(fā):dao接口+dao實現(xiàn)類的方式
 */
public interface UserDao {

 //根據(jù)id查詢信息
 public User findUserById(int id) throws Exception;
 //添加信息
 public void insertUser(User user) throws Exception;
 //刪除信息
 public void deleteUser(int id) throws Exception;
}

dao接口

   b)然后編寫接口實現(xiàn)

package cn.mybatis.dao.daoImpl;

import cn.mybatis.dao.UserDao;
import cn.mybatis.po.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;

public class UserDaoImpl implements UserDao {

 //使用構(gòu)造方法注入SqlSessionFactory
 private SqlSessionFactory sqlSessionFactory;

 public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
  this.sqlSessionFactory = sqlSessionFactory;
 }

 @Override
 @Test
 public User findUserById(int id) throws Exception {
  SqlSession sqlSession = sqlSessionFactory.openSession();

  User user = sqlSession.selectOne("test.findUserById",id);

  sqlSession.close();
  return user;
 }

 @Override
 public void insertUser(User user) throws Exception {
  SqlSession sqlSession = sqlSessionFactory.openSession();
//  User user1 = new User("test1","123","洪山區(qū)","男");
  sqlSession.insert("test.findUserById",user);
  sqlSession.commit();
  sqlSession.close();
 }

 @Override
 public void deleteUser(int id) throws Exception {
  SqlSession sqlSession = sqlSessionFactory.openSession();

  sqlSession.delete("test.findUserById",id);
  sqlSession.commit();
  sqlSession.close();
 }
}

dao接口實現(xiàn)類

   c)Mapper配置文件和SqlConfig配置文件不變

   d)使用Junit進(jìn)行測試

package cn.mybatis.testdao;

import cn.mybatis.dao.UserDao;
import cn.mybatis.dao.daoImpl.UserDaoImpl;
import cn.mybatis.po.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.InputStream;

public class UserDaoImplTest {

 private SqlSessionFactory sqlSessionFactory;

 @Before
 public void setUp() throws Exception {
  InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
  sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 }

 @Test
 public void testFindUserById() throws Exception{
  //創(chuàng)建UserDao的對象
  UserDao userDao = new UserDaoImpl(sqlSessionFactory);

  //調(diào)用UserDao的方法
  User user = userDao.findUserById(1);

  System.out.println(user );
 }
}

Junit測試

   e)測試結(jié)果

   f)原始dao方法的問題

   ?、賒ao接口實現(xiàn)中存在大量的模板方法(即很多重復(fù)性的代碼 )

   ?、谡{(diào)用SqlSession方法的時候?qū)tatmentid硬編碼了

   ?、蹢l用SqlSession方法的時候傳入的參數(shù),由于使用泛型,所以在編譯階段不會報錯(即使傳入?yún)?shù)錯誤)

 ?。?)使用Mapper代理的方法(即只需要Mapper接口)

 ?。╝)使用mapper方式的規(guī)范

    ①在使用mapper代理的方式中,namespace的值應(yīng)該是mapper接口的路徑

   ?、谠趍apper.java接口文件中的接口方法名稱和mapper.xml中的statment的id一致

   ?、墼趍apper.java接口文件中的接口方法的輸入?yún)?shù)和mapper.xml中的statment的parameterType一致

   ?、茉趍apper.java接口文件中的接口方法的返回值類型和mapper.xml中的statment的resultType一致

 ?。╞)查詢、刪除操作實例

   ?、倬帉憁apper.xml配置文件,其中包含select和delete的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代理的方式中,namespace的值應(yīng)該是mapper接口的路徑-->
<mapper namespace="cn.mybatis.mapper.UserMapper">
 <select id="findUserById" parameterType="int" resultType="cn.mybatis.po.User">
  SELECT * FROM t_user WHERE id = #{id}
 </select>

 <delete id="deleteUser" parameterType="java.lang.Integer">
  DELETE FROM t_user WHERE id = #{value}
 </delete>
</mapper>

mapper.xml配置文件

   ?、诰帉憁apper接口,按照mapper代理的方式開發(fā)規(guī)范來編寫mapper的接口

package cn.mybatis.testmapper;

import cn.mybatis.mapper.UserMapper;
import cn.mybatis.po.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.InputStream;


public class UserMapperTest {

 private SqlSessionFactory sqlSessionFactory;

 @Before
 public void setUp() throws Exception {
  InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
  sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 }

 @Test
 public void testFindUserById() throws Exception{

  SqlSession sqlSession = sqlSessionFactory.openSession();
  //得到UserMapper的代理對象
  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

  User user = userMapper.findUserById(9);

  System.out.println(user);
 }

 @Test
 public void testDeleteUser() throws Exception {
  SqlSession sqlSession = sqlSessionFactory.openSession();
  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

  userMapper.deleteUser(9);
  sqlSession.commit();
 }

 @After
 public void tearDown() throws Exception {
 }
}

mapper接口

   ?、跩unit測試

package cn.mybatis.testmapper;

import cn.mybatis.mapper.UserMapper;
import cn.mybatis.po.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.InputStream;


public class UserMapperTest {

 private SqlSessionFactory sqlSessionFactory;

 @Before
 public void setUp() throws Exception {
  InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
  sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 }

 @Test
 public void testFindUserById() throws Exception{

  SqlSession sqlSession = sqlSessionFactory.openSession();
  //得到UserMapper的代理對象
  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

  User user = userMapper.findUserById(8);

  System.out.println(user);
 }

 @Test
 public void testDeleteUser() throws Exception {
  SqlSession sqlSession = sqlSessionFactory.openSession();
  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

  userMapper.deleteUser(8);
 }

 @After
 public void tearDown() throws Exception {
 }
}

Junit測試

    ④查詢結(jié)果展示

   ?、輨h除結(jié)果展示

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • RabbitMQ基礎(chǔ)概念之信道channel詳解

    RabbitMQ基礎(chǔ)概念之信道channel詳解

    這篇文章主要介紹了RabbitMQ基礎(chǔ)概念之信道channel詳解,信道是生產(chǎn)消費者與rabbit通信的渠道,生產(chǎn)者publish或者消費者消費一個隊列都是需要通過信道來通信的,需要的朋友可以參考下
    2023-08-08
  • 服務(wù)器CPU高居不下,JAVA線程占用排查方式

    服務(wù)器CPU高居不下,JAVA線程占用排查方式

    這篇文章主要介紹了服務(wù)器CPU高居不下,JAVA線程占用排查方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java之MultipartFile和File類型互轉(zhuǎn)方式

    Java之MultipartFile和File類型互轉(zhuǎn)方式

    這篇文章主要介紹了Java之MultipartFile和File類型互轉(zhuǎn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • IntelliJ IDEA之高效代碼插件RainBow Brackets詳解

    IntelliJ IDEA之高效代碼插件RainBow Brackets詳解

    這篇文章主要介紹了IntelliJ IDEA之高效代碼插件RainBow Brackets詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • MybatisPlus調(diào)用原生SQL的三種方法實例詳解

    MybatisPlus調(diào)用原生SQL的三種方法實例詳解

    這篇文章主要介紹了MybatisPlus調(diào)用原生SQL的三種方法,在有些情況下需要用到MybatisPlus查詢原生SQL,MybatisPlus其實帶有運行原生SQL的方法,我這里列舉三種,需要的朋友可以參考下
    2022-09-09
  • 詳解Mybatis中的PooledDataSource

    詳解Mybatis中的PooledDataSource

    這篇文章主要介紹了詳解Mybatis中的PooledDataSource,PooledDataSource使用了數(shù)據(jù)庫連接池可以實現(xiàn)數(shù)據(jù)庫連接池的重復(fù)利用,還能控制連接數(shù)據(jù)庫的連接上限
    2022-06-06
  • SpringBoot日志配置簡單介紹

    SpringBoot日志配置簡單介紹

    這篇文章主要介紹了SpringBoot日志配置,需要的朋友可以參考下
    2017-09-09
  • JavaSE中Lambda表達(dá)式的使用與變量捕獲

    JavaSE中Lambda表達(dá)式的使用與變量捕獲

    這篇文章主要介紹了JavaSE中Lambda表達(dá)式的使用與變量捕獲,Lambda表達(dá)式允許你通過表達(dá)式來代替功能接口, 就和方法一樣,它提供了一個正常的參數(shù)列表和一個使用這些參數(shù)的主體,下面我們來詳細(xì)看看,需要的朋友可以參考下
    2023-10-10
  • Java常量池詳解

    Java常量池詳解

    下面小編就為大家?guī)硪黄獪\談java常量池。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-09-09
  • mybatis,foreach,找不到參數(shù)報錯問題及解決

    mybatis,foreach,找不到參數(shù)報錯問題及解決

    這篇文章主要介紹了mybatis,foreach,找不到參數(shù)報錯問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03

最新評論