目录

Mybatis简介

什么是 MyBatis?

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

  • MyBatis 是一款优秀的持久层框架
  • 它支持自定义 SQL、存储过程以及高级映射。
  • MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
  • MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
  • MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github

如何获得Mybatis

  • maven仓库
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>

持久化

持久层

为什么需要Mybatis

第一个Mybatis程序

学习新东西方法:搭建环境-》导入mybatis-》编写代码-》测试

搭建环境

建库建表

CREATE DATABASE `mybatis`CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `mybatis`;
CREATE TABLE `mybatis`.`user` ( `id` INT(20) NOT NULL COMMENT '主键', `name` VARCHAR(100) NOT NULL COMMENT '用户名', `pwd` VARCHAR(100) NOT NULL COMMENT '密码', PRIMARY KEY (`id`) ) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_general_ci;
DESCRIBE `mybatis`.`user`;
INSERT INTO `mybatis`.`user` (`id`, `name`, `pwd`) VALUES ('1', 'zhangyq', '123456');
INSERT INTO `mybatis`.`user` (`id`, `name`, `pwd`) VALUES ('2', 'zhangsf', '123456');
INSERT INTO `mybatis`.`user` (`id`, `name`, `pwd`) VALUES ('3', 'zhangdl', '123456');

新建父工程

新建普通maven项目

删除src目录,作为父工程

导入maven依赖

<?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>com.qing</groupId>
<artifactId>mybatis-study</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency> </dependencies> </project>

创建第一个子模块

编写mybatis的核心配置文件

官网:https://mybatis.org/mybatis-3/zh/index.html

<?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://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
</configuration>

编写mybatis工具类,获取SqlSession

SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。

package com.qing.utils;

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 MybatisUtils { // 构建 SqlSessionFactory 的实例
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 获取 SqlSession
* @return
*/
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
}

编写代码测试

实体类

接口

package com.qing.dao;

import com.qing.pojo.User;

import java.util.List;

/**
* 接口
*/
public interface UserMapper { List<User> getUserList();
}

Mapper

<?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="com.qing.dao.UserMapper">
<!--id对应接口的方法,返回值类型对应接口返回值,参数类型对应接口方法参数,集合类型写集合泛型类型-->
<select id="getUserList" resultType="com.qing.pojo.User">
select * from mybatis.user
</select>
</mapper>

测试

package com.qing.dao;

import com.qing.pojo.User;
import com.qing.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test; import java.util.List; public class UserMapperTest { /**
* 方式一:sqlSession.getMapper(UserMapper.class)
*/
@Test
public void test() {
// 获取sqlSession
SqlSession sqlSession = MybatisUtils.getSqlSession();
// 执行SQL
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
// 关闭sqlSession
sqlSession.close();
}
}

问题一:Mapper.xml未注册

org.apache.ibatis.binding.BindingException: Type interface com.qing.dao.UserMapper is not known to the MapperRegistry.

	at org.apache.ibatis.binding.MapperRegistry.getMapper(MapperRegistry.java:47)
at org.apache.ibatis.session.Configuration.getMapper(Configuration.java:845)
at org.apache.ibatis.session.defaults.DefaultSqlSession.getMapper(DefaultSqlSession.java:288)
at com.qing.dao.UserMapperTest.test(UserMapperTest.java:20)

解决:mybatis-config.xml中注册Mapper,resource绑定Mapper,必须使用路径/

<?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://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/qing/dao/UserMapper.xml"/>
</mappers>
</configuration>

问题二:Mapper文件编译后不存在

java.lang.ExceptionInInitializerError
at com.qing.dao.UserMapperTest.test(UserMapperTest.java:18)
Caused by: org.apache.ibatis.exceptions.PersistenceException:
### Error building SqlSession.
### The error may exist in com/qing/dao/UserMapper.xml
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/qing/dao/UserMapper.xml
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)


解决:pom.xml中配置编译配置

<?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">
<parent>
<artifactId>mybatis-study</artifactId>
<groupId>com.qing</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>mybatis-01</artifactId> <!--配置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>
</project>

问题三:数据库连接SSL错误

org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet successfully received from the server was 2,729 milliseconds ago. The last packet sent successfully to the server was 2,715 milliseconds ago.
### The error may exist in com/qing/dao/UserMapper.xml
### The error may involve com.qing.dao.UserMapper.getUserList
### The error occurred while executing a query
### Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors

解决:mybatis-config.xml中useSSL=true改为useSSL=false

<?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://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/qing/dao/UserMapper.xml"/>
</mappers>
</configuration>

测试成功

CRUD

namespace中的包名要和Mapper接口的包名一致

<?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="com.qing.dao.UserMapper">
<!--id对应接口的方法,返回值类型对应接口返回值,参数类型对应接口方法参数,集合类型写集合泛型类型-->
<select id="getUserList" resultType="com.qing.pojo.User">
select * from mybatis.user
</select>
</mapper>
package com.qing.dao;

import com.qing.pojo.User;
import java.util.List; /**
* 接口
*/
public interface UserMapper { /**
* 查询全部用户
* @return
*/
List<User> getUserList();
}

select 选择,查询语句

id 对应接口中的方法名

parameterType 对应接口中方法的请求参数

resultType 对应接口中方法的返回值

集合类型写集合泛型类型

<?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="com.qing.dao.UserMapper">
<!--查询全部用户-->
<select id="getUserList" resultType="com.qing.pojo.User">
select * from mybatis.user
</select>
<!--id对应接口的方法,返回值类型对应接口返回值,参数类型对应接口方法参数,集合类型写集合泛型类型-->
<!--根据ID查询用户-->
<select id="getUserById" parameterType="int" resultType="com.qing.pojo.User">
select * from mybatis.user where id=#{id}
</select>
</mapper>
package com.qing.dao;

import com.qing.pojo.User;
import java.util.List; /**
* 接口
*/
public interface UserMapper { /**
* 查询全部用户
* @return
*/
List<User> getUserList(); /**
* 根据ID查询用户
* @param id
* @return
*/
User getUserById(int id);
}
package com.qing.dao;

import com.qing.pojo.User;
import com.qing.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test; import java.util.List; public class UserMapperTest { /**
* 查询全部用户
*/
@Test
public void getUserList() {
SqlSession sqlSession = null;
try {
// 获取sqlSession
sqlSession = MybatisUtils.getSqlSession();
// 执行SQL
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭sqlSession
sqlSession.close();
}
} /**
* 根据ID查询用户
*/
@Test
public void getUserById() {
SqlSession sqlSession = null;
try {
// 获取sqlSession
sqlSession = MybatisUtils.getSqlSession();
// 执行SQL
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserById(1);
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭sqlSession
sqlSession.close();
}
}
}

insert/update/delete 增删改必须提交事务

编写接口

package com.qing.dao;

import com.qing.pojo.User;

import java.util.List;

/**
* 接口
*/
public interface UserMapper { /**
* 查询全部用户
*
* @return
*/
List<User> getUserList(); /**
* 根据ID查询用户
*
* @param id
* @return
*/
User getUserById(int id); /**
* 新增用户
*
* @param user
* @return
*/
int insert(User user); /**
* 修改用户
* @param user
* @return
*/
int update(User user); /**
* 删除用户
* @param id
* @return
*/
int delete(int id);
}

编写Mapper

<?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="com.qing.dao.UserMapper">
<!--查询全部用户-->
<select id="getUserList" resultType="com.qing.pojo.User">
select * from mybatis.user
</select>
<!--id对应接口的方法,返回值类型对应接口返回值,参数类型对应接口方法参数,集合类型写集合泛型类型-->
<!--根据ID查询用户-->
<select id="getUserById" parameterType="int" resultType="com.qing.pojo.User">
select * from mybatis.user where id=#{id}
</select>
<!--新增用户-->
<insert id="insert" parameterType="com.qing.pojo.User">
insert into mybatis.user(id,name,pwd) values(#{id},#{name},#{pwd})
</insert>
<!--修改用户-->
<update id="update" parameterType="com.qing.pojo.User">
update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id}
</update>
<!--删除用户-->
<delete id="delete" parameterType="int">
delete from mybatis.user where id=#{id}
</delete>
</mapper>

测试

package com.qing.dao;

import com.qing.pojo.User;
import com.qing.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test; import java.util.List; public class UserMapperTest { /**
* 查询全部用户
*/
@Test
public void getUserList() {
SqlSession sqlSession = null;
try {
// 获取sqlSession
sqlSession = MybatisUtils.getSqlSession();
// 执行SQL
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭sqlSession
sqlSession.close();
}
} /**
* 根据ID查询用户
*/
@Test
public void getUserById() {
SqlSession sqlSession = null;
try {
// 获取sqlSession
sqlSession = MybatisUtils.getSqlSession();
// 执行SQL
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserById(1);
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭sqlSession
sqlSession.close();
}
} /**
* 新增用户
*/
@Test
public void insert() {
SqlSession sqlSession = null;
try {
// 获取sqlSession
sqlSession = MybatisUtils.getSqlSession();
// 执行SQL
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User(4, "张仲景", "123456");
int rows = mapper.insert(user);
System.out.println(rows);
// 提交事务
sqlSession.commit();
System.out.println("提交事务");
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭sqlSession
sqlSession.close();
}
} /**
* 修改用户
*/
@Test
public void update() {
SqlSession sqlSession = null;
try {
// 获取sqlSession
sqlSession = MybatisUtils.getSqlSession();
// 执行SQL
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User(4, "张仲景二号", "123456");
int rows = mapper.update(user);
System.out.println(rows);
// 提交事务
sqlSession.commit();
System.out.println("提交事务");
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭sqlSession
sqlSession.close();
}
} /**
* 删除用户
*/
@Test
public void delete() {
SqlSession sqlSession = null;
try {
// 获取sqlSession
sqlSession = MybatisUtils.getSqlSession();
// 执行SQL
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int rows = mapper.delete(4);
System.out.println(rows);
// 提交事务
sqlSession.commit();
System.out.println("提交事务");
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭sqlSession
sqlSession.close();
}
}
}

Map的应用

Map传递参数,用key获取即可

对象传递参数,用属性获取即可

只有一个基本类型参数,可以直接获取,可不写parameterType

编写接口

package com.qing.dao;

import com.qing.pojo.User;

import java.util.List;
import java.util.Map; /**
* 接口
*/
public interface UserMapper { /**
* 通过Map新增用户
* @param map
* @return
*/
int insertByMap(Map<String,Object> map); /**
* 通过Map查询用户
* @param map
* @return
*/
List<User> getByMap(Map<String,Object> map);
}

编写Mapper

<?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="com.qing.dao.UserMapper">
<!--通过Map新增用户-->
<insert id="insertByMap" parameterType="map">
insert into mybatis.user(id,name,pwd) values(#{userId},#{userName},#{password})
</insert>
<!--通过Map查询用户-->
<select id="getByMap" parameterType="map" resultType="com.qing.pojo.User">
select * from mybatis.user where id=#{userId} and name=#{userName}
</select>
</mapper>

测试

package com.qing.dao;

import com.qing.pojo.User;
import com.qing.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test; import java.util.HashMap;
import java.util.List;
import java.util.Map; public class UserMapperTest { /**
* 通过Map新增用户
*/
@Test
public void insertByMap() {
SqlSession sqlSession = null;
try {
// 获取sqlSession
sqlSession = MybatisUtils.getSqlSession();
// 执行SQL
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String,Object> map = new HashMap<String, Object>();
map.put("userId",4);
map.put("userName","张仲景");
map.put("password","123456");
int rows = mapper.insertByMap(map);
System.out.println(rows);
// 提交事务
sqlSession.commit();
System.out.println("提交事务");
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭sqlSession
sqlSession.close();
}
} /**
* 通过Map查询用户
*/
@Test
public void getByMap() {
SqlSession sqlSession = null;
try {
// 获取sqlSession
sqlSession = MybatisUtils.getSqlSession();
// 执行SQL
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String,Object> map = new HashMap<String, Object>();
map.put("userId",4);
map.put("userName","张仲景");
List<User> userList = mapper.getByMap(map);
for (User user : userList) {
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭sqlSession
sqlSession.close();
}
}
}

010_Mybatis简介的更多相关文章

  1. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  2. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  3. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  4. REST简介

    一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...

  5. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

  6. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  7. HTTPS简介

    一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...

  8. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  9. Cesium简介以及离线部署运行

    Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...

随机推荐

  1. im-chooser重新选择输入法框架在终端执行im-chooser命令

    CentOS 7安装图像桌面.Ibus拼音输入法一.图形桌面安装1.安装额外包yum源(extra package for Enterprise Linux) yum install epel-rel ...

  2. 11.16-18 lsci、ipcs、ipcrm:清除ipc相关信息

    lspci:显示所有PCI设备 lspci命令用来显示系统中的所有PCI总线设备或是连接到该总线上的所有设备. lspci命令的参数选项及说明 -v     显示详细信息 -vv    显示更详细的信 ...

  3. LT4020替代方案

    国产  替代LT4020的方案 南芯 展讯的方案 https://item.taobao.com/item.htm?spm=a230r.1.14.21.6f27bf96rrAtci&id=56 ...

  4. Centos7 docker容器启动后添加端口映射

    docker容器启动后添加端口映射的两种方法: 一.通过修改防火墙策略添加端口映射 docker容器已创建好,但是想在容器内配置tomcat监控,需要新的端口去访问,但是映射时没有映射多余端口,此时, ...

  5. 10.2-3 ifup&ifdown:激活与禁用网络接口

    ifup:激活网络接口     ifup 和 ifdown 命令用于激活指定的网络接口.ifup命令其实是一个Shel脚本,有Shel基础的读者可以使用which命令来找到这个脚本并读一读.命令可读取 ...

  6. Python数模笔记-PuLP库(2)线性规划进阶

    1.基于字典的创建规划问题 上篇中介绍了使用 LpVariable 对逐一定义每个决策变量,设定名称.类型和上下界,类似地对约束条件也需要逐一设置模型参数.在大规模的规划问题中,这样逐个定义变量和设置 ...

  7. openresty 学习笔记番外篇:python访问RabbitMQ消息队列

    openresty 学习笔记番外篇:python访问RabbitMQ消息队列 python使用pika扩展库操作RabbitMQ的流程梳理. 客户端连接到消息队列服务器,打开一个channel. 客户 ...

  8. MySQL 基础、安装、配置

    1. MySQL 基础 1.1 什么是数据库? 1.2 数据库的类型 1.3 关系型数据库的优点 1.4 MySQL 简介 1.5 MySQL 数据类型 1.6 Mysql 存储引擎 1.7 MySQ ...

  9. 聊聊 apt sources.list 文件格式

    前言 之前玩 ubuntu 需要切换国内源地址时,都是网上复制别人提供好的,也不知道是什么意思,拿来就用. 这次花点时间来看一下 apt sources.list 的格式,以及其表示的含义. 格式 s ...

  10. GPU自动调度卷积层

    GPU自动调度卷积层 本文对GPU使用自动调度程序. 与依靠手动模板定义搜索空间的基于模板的autotvm不同,自动调度程序不需要任何模板.用户只需要编写计算声明,无需任何调度命令或模板.自动调度程序 ...