MySQL 整型长度的含义

缘起

初学时搞错”整型长度”的含义, 误以为”整型”后面的数字代表的是”允许存储的最大宽度”, 比如, 误以为 int(1) 不能存储 10.

结论

“浮点型”的长度是用来限制数字存储范围的. 比如 float(3,2) 只能够写入 0.00~999.99.

“整型”的长度并不会限制存储的数字范围. 比如, intint(3) 的存储范围都是 -2147483648 ~ 2147483647, int unsignedint(3) unsigned 的存储范围都是0 ~ 4294967295.

“整型”的长度实际上可以理解为”显示长度”, 如果该字段开启 “Zerofill/补零”就能很明显地知道它的作用.

比如, a b c d 分别表示 int(1) int(2) int(3) int(3) zerofill, 那么实际存入数据库的数据是这样的:

1
2
3
4
5
| v  | a  |  b  |  c |  d |
+-----+-----+-----+-----+-----+
| 1 | 1 | 1 | 1 | 001 |
| 10 | 10 | 10 | 10 | 010 |
| 100 | 100 | 100 | 100 | 100 |

PS. 如果开启 “Zerofill/补零”, 则自动会默认为 “Unsigned/非负数”。


MyBatis——基于XML的入门配置五步
  • 第一步: 配置Maven环境,打包方式设置为jar,加载MyBatis,MySQL依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<packaging>jar</packaging>
<dependencies>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>

<!-- MySQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>

</dependencies>
  • 第二步:新建,编辑mybatis-config.xml文件(放入resources文件夹)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?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.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
<property name="username" value="xxxx"/>
<property name="password" value="xxxx"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="CarMapper.xml"/>
</mappers>
</configuration>
  • 第三步:新建,配置xxxMapper.xml文件
1
2
3
4
5
6
7
8
9
10
<?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="org.mybatis.example.BlogMapper">
<insert id="">
insert into t_car(id,car_num,brand,guide_price,produce_time,car_type)
values (null,1003,"面包车",13.00,"2020-10-13","飞行汽车")
</insert>
</mapper>
  • 第四步:在xxxMapper中编写sql代码(在3中已完成)

  • 第五步:把xxxMapper.txt文件路径放入mybatis-config.txt中(在2中已完成)

1
2
3
<mappers>
<mapper resource="CarMapper.xml"/>
</mappers>

注意⚠
在mybatis-config.xml中有一行为

1
<transactionManager type="JDBC"/>

type类型可以写成两种,一种是JDBC另一种是MANAGED(不区分大小写)

  1. JDBC:交给JDBC处理事务(默认false,表示开启事务,需要手动提交)
  2. MANAGED:有用到spring框架时设置为此,表交给框架处理事务,如果没有用到框架设置为此类型,则没有人处理事务,会自动提交

SqlSessionFactory.openSession()默认开启事务


JDBC-JDBC 编程六步

JDBC 常用接口和类

  • DriverManager
      负责管理 JDBC 驱动的服务类,程序中主要的功能是获取连接数据库的 Connection 对象。
  • Connection
      代表一个数据库连接对象,要访问数据库,首先需要获得数据库连接。
    同时,Connection 接口提供了获取执行 SQL 语句的 Statement 和 PreparedStatement 对象,以及控制事物(Transaction)的方法。
  • Statement
      用于执行 SQL 语句的接口,同时支持执行 DDL(Data Definition Language),DCL(Data Control Language),DML(Data Manipulation Language)语句。
    我们常用的 CRUD 操作是 DML 语句。
  • PreparedStatement
      Statement 的子接口,代表一个预编译的 Statement 对象。
        所谓预编译,就是事先将 SQL 传入到 PreparedStatement 对象中,不必每一次在执行的时候加载 SQL 语句,所以在性能上会有所提高。
        常用来执行带参数的 SQL 语句。
  • ResultSet
      SQL 语句执行后的结果集对象。
        当 Statement 或者其子接口,执行的是一个查询的 DML 语句,其返回就会是一个 ResultSet 对象。
        ResultSet 中包含访问查询结果的方法。

JDBC 编程步骤

通过以上介绍的 JDBC API,可以大致得知 JDBC 的编程步骤:

  1. 加载数据库驱动。
  2. 通过 DriverManager 获取数据库连接 Connection。
  3. 通过 Connection 对象创建 Statement 对象(Statement,PreparedStatement,CallableStatement)。
  4. 外部传入 SQL 语句,使用 Statement 执行 SQL。
  5. 如果 SQL 是一个查询语句,操作结果集 ResultSet。
  6. 回收数据库资源(实现 Closeable/AutoCloseable 的 Connection,Statement 和 ResultSet)。