From:http://wuzhengfei.iteye.com/blog/766300

说明:此文档和之前发布的Ibatis2.x实例时我学习时做的实例,测试都已通过,将实例拿出来与大家分享,共同学习。浏览实例的时候注意他们之间的异同,希望对你有所帮助。一、SqlMapConfig.xmlSqlmapconfig.xml代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<!-- 配置资源文件 -->
<properties resource="dbconfig.properties">
<property name="username" value="root"/><!-- 此处并配置的属性将替换dbconfig.properties中的属性 -->
<property name="password" value="wuzhengfei"/>
</properties>
<!-- 改变Ibatis运行时的行为 -->
<settings>
<setting name="cacheEnabled" value="true" /><!-- 是否使用全局缓存 true|false true -->
<setting name="lazyLoadingEnabled" value="true" /> <!-- 是否使用全局懒加载 true|false true -->
<setting name="multipleResultSetsEnabled" value="true" /><!-- 是否允许返回多个结果集合(需要兼容的驱动) true|false true -->
<setting name="useColumnLabel" value="true" /><!-- 使用列标签取代列名(不同驱动表现不同) true|false true -->
<setting name="useGeneratedKeys" value="false" /><!-- 允许jdbc自动生成主键 true|false false -->
<setting name="defaultExecutorType" value="SIMPLE" /><!-- 配置默认执行方式 SIMPLE|REUSE|BATCH -->
<setting name="defaultStatementTimeout" value="25000" /><!-- 数据库超时时间 Any positive -->
</settings> <typeAliases>
<typeAlias type="com.beans.User" alias="user"/>
</typeAliases> <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://localhost/ibatis?useUnicode=true&amp;characterEncoding=UTF-8" />
<property name="username" value="root"/>
<property name="password" value="wuzhengfei"/>
<property name="poolMaximumActiveConnections" value="10"/> <!-- 同一时间内最大连接数 默认10 -->
<property name="poolMaximumIdleConnections" value="5"/><!--连接最大空闲数目 -->
<property name="poolMaximumCheckoutTime" value="20000"/><!-- 连接被每个任务占用的最大时间 默认20000ms -->
<property name="poolTimeToWait" value="20000"/><!-- 连接池中无可用连接时,线程的等待时间 默认20000ms -->
<property name="poolPingQuery" value="NO"/><!-- 数据库连接状态检测语句,类似于ping的功能 默认NO PING QUERY SET -->
<property name="poolPingEnabled" value="true"/><!-- 是否允许ping检测 默认false -->
<property name="poolPingConnectionsNotUsedFor" value="0"/><!-- 对超过指定空闲时间的数据库连接进行状态监测 默认0 (必须在poolPingEnabled设置true情况下) -->
</dataSource>
</environment> <environment id="test">
<transactionManager type="JDBC" />
<dataSource type="JNDI">
<property name="driver" value=""/>
<property name="url" value=""/>
<property name="username" value=""/>
<property name="password" value=""/>
<property name="env.encoding" value="UTF8"/>
<property name="initial_context" value=""/>
<property name="data_source" value=""/><!-- JNDI数据库名称 -->
</dataSource>
</environment>
</environments> <mappers>
<mapper resource="com/beans/User.xml"/>
<!-- 使用绝对路径 -->
<!--
<mapper url="file:///.../AuthorMapper.xml"/>
-->
</mappers>
</configuration>
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd"> <configuration> <!-- 配置资源文件 --> <properties resource="dbconfig.properties"> <property name="username" value="root"/><!-- 此处并配置的属性将替换dbconfig.properties中的属性 --> <property name="password" value="wuzhengfei"/> </properties> <!-- 改变Ibatis运行时的行为 --> <settings> <setting name="cacheEnabled" value="true" /><!-- 是否使用全局缓存 true|false true --> <setting name="lazyLoadingEnabled" value="true" /> <!-- 是否使用全局懒加载 true|false true --> <setting name="multipleResultSetsEnabled" value="true" /><!-- 是否允许返回多个结果集合(需要兼容的驱动) true|false true --> <setting name="useColumnLabel" value="true" /><!-- 使用列标签取代列名(不同驱动表现不同) true|false true --> <setting name="useGeneratedKeys" value="false" /><!-- 允许jdbc自动生成主键 true|false false --> <setting name="defaultExecutorType" value="SIMPLE" /><!-- 配置默认执行方式 SIMPLE|REUSE|BATCH --> <setting name="defaultStatementTimeout" value="25000" /><!-- 数据库超时时间 Any positive --> </settings> <typeAliases> <typeAlias type="com.beans.User" alias="user"/> </typeAliases> <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://localhost/ibatis?useUnicode=true&amp;characterEncoding=UTF-8" /> <property name="username" value="root"/> <property name="password" value="wuzhengfei"/> <property name="poolMaximumActiveConnections" value="10"/> <!-- 同一时间内最大连接数 默认10 --> <property name="poolMaximumIdleConnections" value="5"/><!--连接最大空闲数目 --> <property name="poolMaximumCheckoutTime" value="20000"/><!-- 连接被每个任务占用的最大时间 默认20000ms --> <property name="poolTimeToWait" value="20000"/><!-- 连接池中无可用连接时,线程的等待时间 默认20000ms --> <property name="poolPingQuery" value="NO"/><!-- 数据库连接状态检测语句,类似于ping的功能 默认NO PING QUERY SET --> <property name="poolPingEnabled" value="true"/><!-- 是否允许ping检测 默认false --> <property name="poolPingConnectionsNotUsedFor" value="0"/><!-- 对超过指定空闲时间的数据库连接进行状态监测 默认0 (必须在poolPingEnabled设置true情况下) --> </dataSource> </environment> <environment id="test"> <transactionManager type="JDBC" /> <dataSource type="JNDI"> <property name="driver" value=""/> <property name="url" value=""/> <property name="username" value=""/> <property name="password" value=""/> <property name="env.encoding" value="UTF8"/> <property name="initial_context" value=""/> <property name="data_source" value=""/><!-- JNDI数据库名称 --> </dataSource> </environment> </environments> <mappers> <mapper resource="com/beans/User.xml"/> <!-- 使用绝对路径 --> <!-- <mapper url="file:///.../AuthorMapper.xml"/> --> </mappers></configuration> 二、实体:2.1、User.javaUser.java代码
package com.beans ;
public class User {
private long id ;
private String username ;
private String password ;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String toString(){
return "id: "+id+" username: "+username + " password: "+password ;
}
}
package com.beans ;public class User { private long id ; private String username ; private String password ; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String toString(){ return "id: "+id+" username: "+username + " password: "+password ; }}2.2、映射文件User.xmlUser.xml代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="user">
<insert id="addUser" parameterType="User">
insert into User(id, username, password) values(#{id}, #{username}, #{password})
</insert> <delete id="deleteUserById" parameterType="int" statementType="PREPARED">
delete from User where id = #{id}
</delete> <sql id="userColumn">id, username, password</sql> <select id="findAllUsers" resultType="User">
select <include refid="userColumn"/> from User
</select> <select id="findUserById" statementType="PREPARED" useCache="true" resultType="user">
select <include refid="userColumn"/> from User where id = #{id, javaType=long, jdbcType=BIGINT}
</select> <select id="findUserByName" parameterType="string" resultType="User">
select * from User as u where u.username like CONCAT('%',#{username},'%')
</select> <update id="updateUser" parameterType="User">
update User set
username = #{username},
password = #{password}
where id = #{id}
</update>
</mapper>
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <mapper namespace="user"> <insert id="addUser" parameterType="User"> insert into User(id, username, password) values(#{id}, #{username}, #{password}) </insert> <delete id="deleteUserById" parameterType="int" statementType="PREPARED"> delete from User where id = #{id} </delete> <sql id="userColumn">id, username, password</sql> <select id="findAllUsers" resultType="User"> select <include refid="userColumn"/> from User </select> <select id="findUserById" statementType="PREPARED" useCache="true" resultType="user"> select <include refid="userColumn"/> from User where id = #{id, javaType=long, jdbcType=BIGINT} </select> <select id="findUserByName" parameterType="string" resultType="User"> select * from User as u where u.username like CONCAT('%',#{username},'%') </select> <update id="updateUser" parameterType="User"> update User set username = #{username}, password = #{password} where id = #{id} </update></mapper>3、接口UserDao.javaUserdao.java代码
package com.dao; import java.util.List; import com.beans.User; public interface UserDao {
/**
* 插入User对象
* @param user
* @return 插入成功的记录数
*/
public int addUser(User user);
/**
* 根据Id删除User
* @param id
* @return 删除成功的记录数
*/
public int deleteUserById(long id);
/**
* 查出所有的User对象
* @return
*/
public List<User> findAllUsers();
/**
* 根据Id查找用户
* @param id
* @return
*/
public User findUserById(long id);
/**
* 更新用户信息
* @param user
* @return 更新的数据数目
*/
public int update(User user);
/**
* 根据用户名查找User 模糊查询
* @param username
* @return
*/
public List<User> findUserByName(String username);
}
package com.dao;import java.util.List;import com.beans.User;public interface UserDao { /** * 插入User对象 * @param user * @return 插入成功的记录数 */ public int addUser(User user); /** * 根据Id删除User * @param id * @return 删除成功的记录数 */ public int deleteUserById(long id); /** * 查出所有的User对象 * @return */ public List<User> findAllUsers(); /** * 根据Id查找用户 * @param id * @return */ public User findUserById(long id); /** * 更新用户信息 * @param user * @return 更新的数据数目 */ public int update(User user); /** * 根据用户名查找User 模糊查询 * @param username * @return */ public List<User> findUserByName(String username);}四、实现UserDaoImpl.javaUserdaoimpl.java代码
package com.dao.impl; import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List; 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 com.beans.User;
import com.dao.UserDao; public class UserDaoImpl implements UserDao {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
// Properties props = Resources.getResourceAsProperties("dbConfig.properties");
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader,"development");
//如果sqlMapCofig中没有引入dbConfig.properties文件时,可以使用这种方式引入
//sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader,props);
reader.close(); } catch (IOException e) {
e.printStackTrace();
}
} public SqlSession getSqlSession(){
return sqlSessionFactory.openSession() ;
} @Override
public int addUser(User user) {
int successNum =0 ;
SqlSession sqlSession = getSqlSession();
try {
successNum = sqlSession.insert("addUser", user);
sqlSession.commit() ;
}finally{
sqlSession.close() ;
}
return successNum ;
} @Override
public int deleteUserById(long id) {
int successNum =0 ;
SqlSession sqlSession = getSqlSession();
try {
successNum = sqlSession.delete("deleteUserById", id);
sqlSession.commit() ;
}finally{
sqlSession.close() ;
}
return successNum;
} @SuppressWarnings("unchecked")
@Override
public List<User> findAllUsers() {
List<User> users = new ArrayList<User>();
SqlSession sqlSession = getSqlSession();
try {
users = sqlSession.selectList("findAllUsers"); sqlSession.commit() ;
} finally{
sqlSession.close() ;
}
return users;
} @Override
public User findUserById(long id) {
User user = new User();
SqlSession sqlSession = getSqlSession();
try {
user = (User) sqlSession.selectOne("findUserById", id);
sqlSession.commit() ;
}finally{
sqlSession.close() ;
}
return user;
} @Override
public List<User> findUserByName(String name) {
List<User> users = new ArrayList<User>();
SqlSession sqlSession = getSqlSession();
try {
users = sqlSession.selectList("findUserByName", name);
sqlSession.commit() ;
} finally{
sqlSession.close() ;
}
return users;
} @Override
public int update(User user) {
int updateNumber = 0 ;
SqlSession sqlSession = getSqlSession();
try {
updateNumber = sqlSession.update("updateUser", user);
sqlSession.commit() ;
} finally{
sqlSession.close() ;
}
return updateNumber;
} }
package com.dao.impl;import java.io.IOException;import java.io.Reader;import java.util.ArrayList;import java.util.List;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 com.beans.User;import com.dao.UserDao;public class UserDaoImpl implements UserDao { private static SqlSessionFactory sqlSessionFactory; static { try {// Properties props = Resources.getResourceAsProperties("dbConfig.properties"); Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);// sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader,"development"); //如果sqlMapCofig中没有引入dbConfig.properties文件时,可以使用这种方式引入 //sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader,props); reader.close(); } catch (IOException e) { e.printStackTrace(); } } public SqlSession getSqlSession(){ return sqlSessionFactory.openSession() ; } @Override public int addUser(User user) { int successNum =0 ; SqlSession sqlSession = getSqlSession(); try { successNum = sqlSession.insert("addUser", user); sqlSession.commit() ; }finally{ sqlSession.close() ; } return successNum ; } @Override public int deleteUserById(long id) { int successNum =0 ; SqlSession sqlSession = getSqlSession(); try { successNum = sqlSession.delete("deleteUserById", id); sqlSession.commit() ; }finally{ sqlSession.close() ; } return successNum; } @SuppressWarnings("unchecked") @Override public List<User> findAllUsers() { List<User> users = new ArrayList<User>(); SqlSession sqlSession = getSqlSession(); try { users = sqlSession.selectList("findAllUsers"); sqlSession.commit() ; } finally{ sqlSession.close() ; } return users; } @Override public User findUserById(long id) { User user = new User(); SqlSession sqlSession = getSqlSession(); try { user = (User) sqlSession.selectOne("findUserById", id); sqlSession.commit() ; }finally{ sqlSession.close() ; } return user; } @Override public List<User> findUserByName(String name) { List<User> users = new ArrayList<User>(); SqlSession sqlSession = getSqlSession(); try { users = sqlSession.selectList("findUserByName", name); sqlSession.commit() ; } finally{ sqlSession.close() ; } return users; } @Override public int update(User user) { int updateNumber = 0 ; SqlSession sqlSession = getSqlSession(); try { updateNumber = sqlSession.update("updateUser", user); sqlSession.commit() ; } finally{ sqlSession.close() ; } return updateNumber; } }

五、测试类:UserDaoImplTester.javaUserdaoimpltester.java代码
package com.dao.impl; import java.util.List; import org.junit.Before;
import org.junit.Test; import com.beans.User;
import com.dao.UserDao; public class UserDaoImplTester {
private UserDao userDao ; @Before
public void setUp() throws Exception {
userDao = new UserDaoImpl() ;
} @Test
public void testAddUser() {
User user = new User();
user.setId(12);
user.setPassword("XXXX");
user.setUsername("XXXX");
userDao.addUser(user);
} @Test
public void testDeleteUserById() {
userDao.deleteUserById(10);
} @Test
public void testFindAllUsers() {
List<User> users = userDao.findAllUsers();
for(User user : users){
System.out.println(user);
}
} @Test
public void testFindUserById() {
User user = userDao.findUserById(1);
System.out.println(user);
} @Test
public void testFindUserByName() {
List<User> users = userDao.findUserByName("w");
for(User user : users){
System.out.println(user);
}
} @Test
public void testUpdate() {
User user = userDao.findUserById(4);
System.out.println(user); user.setUsername("海贼王");
user.setPassword("路飞");
userDao.update(user);
user = userDao.findUserById(4);
System.out.println(user); } }
package com.dao.impl;import java.util.List;import org.junit.Before;import org.junit.Test;import com.beans.User;import com.dao.UserDao;public class UserDaoImplTester { private UserDao userDao ; @Before public void setUp() throws Exception { userDao = new UserDaoImpl() ; } @Test public void testAddUser() { User user = new User(); user.setId(12); user.setPassword("XXXX"); user.setUsername("XXXX"); userDao.addUser(user); } @Test public void testDeleteUserById() { userDao.deleteUserById(10); } @Test public void testFindAllUsers() { List<User> users = userDao.findAllUsers(); for(User user : users){ System.out.println(user); } } @Test public void testFindUserById() { User user = userDao.findUserById(1); System.out.println(user); } @Test public void testFindUserByName() { List<User> users = userDao.findUserByName("w"); for(User user : users){ System.out.println(user); } } @Test public void testUpdate() { User user = userDao.findUserById(4); System.out.println(user); user.setUsername("海贼王"); user.setPassword("路飞"); userDao.update(user); user = userDao.findUserById(4); System.out.println(user); }}六、日志文件:为了方便大家查看sqlMap运行时到底使用的是什么Sql语句,此处将log4j.properties发出来,将此文件放在calsspath下后,运行时,控制台中将会打印出sql语句和出入的参数。Log4j.properties代码
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n log4j.logger.com.ibatis=debug
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%nlog4j.logger.com.ibatis=debuglog4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debuglog4j.logger.com.ibatis.common.jdbc.ScriptRunner=debuglog4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debuglog4j.logger.java.sql.Connection=debuglog4j.logger.java.sql.Statement=debuglog4j.logger.java.sql.PreparedStatement=debug,stdout七、其他:附件中是我找的的Ibatis3.x的资料,Ibatis3.x-reference-EN.pdf虽然是英文的,但是还是很好理解的,另外的是在网上看到的,也一起发出来,和大家分享。。。ibatis_3_学习笔记.pdf (248.6 KB)
下载次数: 66
Ibatis_3.x-reference-EN.pdf (1.3 MB)
下载次数: 24

转载于:https://www.cnblogs.com/yuanzhang/archive/2012/08/05/2623831.html

ibatis 3.x 实例相关推荐

  1. Spring2.5整合Ibatis入门级开发实例

    分类: SPRING IBATIS2010-11-22 20:19 1170人阅读 评论(0) 收藏 举报 ibatisspringstringpropertiesclassuser 最近一直在看sp ...

  2. Spring+Ibatis集成开发实例

    首先简历数据库demo(本文选mysql) 数据库脚本: CREATE TABLE `ibatis` (   `id` varchar(20) NOT NULL,   `name` varchar(2 ...

  3. MyBatis的架构设计以及实例分析--转

    原文地址:http://blog.csdn.net/luanlouis/article/details/40422941 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单 ...

  4. mybatis 传入id_想深入理解MyBatis架构及原理实例分析 把握这些就够了

    前言 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询 ...

  5. 《深入理解mybatis原理》 MyBatis的架构设计以及实例分析

    MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询实例, ...

  6. Spring零基础入门到精通 --- IOC基础容器

    一.IOC基础容器 1.1.传统Javaweb开发的困惑 1.1.1.传统Javaweb开发代码分析-用户模块 1.1.2.传统Javaweb开发困惑及解决方案 困惑一:层与层之间紧密耦合在了一起,接 ...

  7. Spring Bean、XML方式Bean配置、Bean实例化配置、Bean注入

    文章目录 Bean管理 一.SpringBoot Bean 初了解 1.1 了解 1.2 Bean的作用域 1.2.1 注意事项 1.3 第三方Bean 二. 基于XML方式Bean的配置 2.1 S ...

  8. 我的架构梦:(三)MyBatis源码分析

    mybatis的源码分析 一.传统方式源码分析 二.Mapper代理方式源码分析 三.MyBatis源码中涉及到的设计模式 一.传统方式源码分析 分析之前我们来回顾下传统方式的写法: /*** 传统方 ...

  9. 前端开发基础知识汇总

    一.HTML 1.前言与常用标签 浏览器 内核 备注 IE Trident IE.猎豹安全.360极速浏览器.百度浏览器 firefox Gecko 可惜这几年已经没落了,打开速度慢.升级频繁.猪一样 ...

最新文章

  1. python入门教程书籍-初学者最好的Python书籍
  2. linux命令使用全集
  3. Flink从入门到精通100篇(一)-如何在Mac 上搭建 Flink环境并做简单测试
  4. 使用Angular CLI创建一个Hello World级别的Angular应用
  5. MATLAB处理txt文档数据——以处理pscad输出数据为例
  6. 白话浅谈——组播那点事
  7. 运算放大器(运放)选型、参数分析以及应用OPA2350
  8. node.js打包失败_与专家讨论Node.js-全部失败
  9. lzg_ad:如何自定义Shell组件
  10. 区块链项目是如何盈利的
  11. 世界顶级音效公司_世界顶级游戏开发公司
  12. 7.Python3标准库--文件系统
  13. 通俗易懂的csrf漏洞(token为什么能放cookie)
  14. 外置光驱DVD-RW错误解决
  15. 盛世昊通:广州车展那些出彩的车,你心动了吗?
  16. maya拆完uv,画好贴图后导入,模型上贴图显示混乱
  17. onenote的笔记本在windows10保存的路径
  18. RabbitMQ的第一次亲密接触
  19. 代理IP的背后原理简单介绍与python写一个获取代理IP的爬虫
  20. socket服务端同时监听多个端口号

热门文章

  1. vs code快捷键修改为idea快捷键
  2. 【代码源 Div1#103】子串的最大差 Codeforces - 817D,力扣2104,1900分
  3. 【2021牛客暑期多校训练营6】H Hopping Rabbit(扫描线)
  4. 【NOIP2017】【Luogu3954】成绩(模拟)
  5. UVa 1585 - Score
  6. 第六章节 多态 (多态的概述)
  7. 第五章节 类的继承(访问修饰符)
  8. JavaScript文档对象模型document对象获取自定义属性值和设置移除自定义属性(5)
  9. linux arm 虚拟机,ARM平台上实现Linux内核虚拟机技术研究
  10. Bellman_Ford边上权值为任意值的单源最短路径问题(+路径打印)边集合与邻接表两种实现