mirror of
https://github.com/Estom/notes.git
synced 2026-02-03 10:33:35 +08:00
mybatis
This commit is contained in:
34
Java/Lombok/Lombok.md
Normal file
34
Java/Lombok/Lombok.md
Normal file
@@ -0,0 +1,34 @@
|
||||
## 1 简介
|
||||
|
||||
## 2 引入
|
||||
|
||||
### maven项目依赖
|
||||
|
||||
```
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.16.8</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
## 3 常用注解
|
||||
|
||||
@Data 注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
|
||||
@Setter :注解在属性上;为属性提供 setting 方法
|
||||
@Setter :注解在属性上;为属性提供 getting 方法
|
||||
|
||||
@ToString注解,为使用该注解的类生成一个toString方法,默认的toString格式为:ClassName(fieldName= fieleValue ,fieldName1=fieleValue)。
|
||||
@Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
|
||||
|
||||
@NoArgsConstructor :注解在类上;为类提供一个无参的构造方法
|
||||
@AllArgsConstructor :注解在类上;为类提供一个全参的构造方法
|
||||
@RequiredArgsConstructor : 生成一个包含 "特定参数" 的构造器,特定参数指的是那些有加上 final 修饰词的变量们
|
||||
|
||||
@EqualsAndHashCode:自动生成 equals(Object other) 和 hashcode() 方法,包括所有非静态变量和非 transient 的变量。如果某些变量不想要加进判断,可以透过 exclude 排除,也可以使用 of 指定某些字段
|
||||
@Cleanup : 可以关闭流
|
||||
@Builder : 被注解的类加个构造者模式
|
||||
@Synchronized : 加个同步锁
|
||||
@SneakyThrows : 等同于try/catch 捕获异常
|
||||
@NonNull : 如果给参数加个这个注解 参数为null会抛出空指针异常
|
||||
@Value : 注解和@Data类似,区别在于它会把所有成员变量默认定义为private final修饰,并且不会生成set方法。
|
||||
21
Java/MyBatis/1简介.md
Normal file
21
Java/MyBatis/1简介.md
Normal file
@@ -0,0 +1,21 @@
|
||||
## 1 简介
|
||||
|
||||
MyBatis持久层框架,支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO为数据库中的记录。
|
||||
|
||||
## 2 maven依赖
|
||||
|
||||
```
|
||||
<dependency>
|
||||
<groupId>org.mybatis</groupId>
|
||||
<artifactId>mybatis</artifactId>
|
||||
<version>x.x.x</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
## 3 功能架构
|
||||
|
||||
我们把Mybatis的功能架构分为三层:
|
||||
|
||||
* API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
|
||||
* 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
|
||||
* 基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。
|
||||
0
Java/MyBatis/2XML配置.md
Normal file
0
Java/MyBatis/2XML配置.md
Normal file
150
Java/MyBatis/3XML映射.md
Normal file
150
Java/MyBatis/3XML映射.md
Normal file
@@ -0,0 +1,150 @@
|
||||
SQL 映射文件只有很少的几个顶级元素(按照应被定义的顺序列出):
|
||||
|
||||
cache – 该命名空间的缓存配置。
|
||||
cache-ref – 引用其它命名空间的缓存配置。
|
||||
resultMap – 描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。
|
||||
parameterMap – 老式风格的参数映射。此元素已被废弃,并可能在将来被移除!请使用行内参数映射。文档中不会介绍此元素。
|
||||
sql – 可被其它语句引用的可重用语句块。
|
||||
insert – 映射插入语句。
|
||||
update – 映射更新语句。
|
||||
delete – 映射删除语句。
|
||||
select – 映射查询语句。
|
||||
|
||||
## 1 Select映射
|
||||
|
||||
### 举例
|
||||
```
|
||||
<select id="selectPerson" parameterType="int" resultType="hashmap">
|
||||
SELECT * FROM PERSON WHERE ID = #{id}
|
||||
</select>
|
||||
```
|
||||
### Select属性列表
|
||||
```
|
||||
<select
|
||||
id="selectPerson"
|
||||
parameterType="int"
|
||||
parameterMap="deprecated"
|
||||
resultType="hashmap"
|
||||
resultMap="personResultMap"
|
||||
flushCache="false"
|
||||
useCache="true"
|
||||
timeout="10"
|
||||
fetchSize="256"
|
||||
statementType="PREPARED"
|
||||
resultSetType="FORWARD_ONLY">
|
||||
```
|
||||
|
||||
属性 描述
|
||||
id 在命名空间中唯一的标识符,可以被用来引用这条语句。
|
||||
parameterType 将会传入这条语句的参数的类全限定名或别名。这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler)推断出具体传入语句的参数,默认值为未设置(unset)。
|
||||
parameterMap 用于引用外部 parameterMap 的属性,目前已被废弃。请使用行内参数映射和 parameterType 属性。
|
||||
resultType 期望从这条语句中返回结果的类全限定名或别名。 注意,如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。 resultType 和 resultMap 之间只能同时使用一个。
|
||||
resultMap 对外部 resultMap 的命名引用。结果映射是 MyBatis 最强大的特性,如果你对其理解透彻,许多复杂的映射问题都能迎刃而解。 resultType 和 resultMap 之间只能同时使用一个。
|
||||
flushCache 将其设置为 true 后,只要语句被调用,都会导致本地缓存和二级缓存被清空,默认值:false。
|
||||
useCache 将其设置为 true 后,将会导致本条语句的结果被二级缓存缓存起来,默认值:对 select 元素为 true。
|
||||
timeout 这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。默认值为未设置(unset)(依赖数据库驱动)。
|
||||
fetchSize 这是一个给驱动的建议值,尝试让驱动程序每次批量返回的结果行数等于这个设置值。 默认值为未设置(unset)(依赖驱动)。
|
||||
statementType 可选 STATEMENT,PREPARED 或 CALLABLE。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,默认值:PREPARED。
|
||||
resultSetType FORWARD_ONLY,SCROLL_SENSITIVE, SCROLL_INSENSITIVE 或 DEFAULT(等价于 unset) 中的一个,默认值为 unset (依赖数据库驱动)。
|
||||
databaseId 如果配置了数据库厂商标识(databaseIdProvider),MyBatis 会加载所有不带 databaseId 或匹配当前 databaseId 的语句;如果带和不带的语句都有,则不带的会被忽略。
|
||||
resultOrdered 这个设置仅针对嵌套结果 select 语句:如果为 true,将会假设包含了嵌套结果集或是分组,当返回一个主结果行时,就不会产生对前面结果集的引用。 这就使得在获取嵌套结果集的时候不至于内存不够用。默认值:false。
|
||||
resultSets 这个设置仅适用于多结果集的情况。它将列出语句执行后返回的结果集并赋予每个结果集一个名称,多个名称之间以逗号分隔。
|
||||
|
||||
|
||||
## 2 insert update delete
|
||||
|
||||
### 属性列表
|
||||
|
||||
```
|
||||
|
||||
<insert
|
||||
id="insertAuthor"
|
||||
parameterType="domain.blog.Author"
|
||||
flushCache="true"
|
||||
statementType="PREPARED"
|
||||
keyProperty=""
|
||||
keyColumn=""
|
||||
useGeneratedKeys=""
|
||||
timeout="20">
|
||||
|
||||
<update
|
||||
id="updateAuthor"
|
||||
parameterType="domain.blog.Author"
|
||||
flushCache="true"
|
||||
statementType="PREPARED"
|
||||
timeout="20">
|
||||
|
||||
<delete
|
||||
id="deleteAuthor"
|
||||
parameterType="domain.blog.Author"
|
||||
flushCache="true"
|
||||
statementType="PREPARED"
|
||||
timeout="20">
|
||||
```
|
||||
|
||||
属性 描述
|
||||
id 在命名空间中唯一的标识符,可以被用来引用这条语句。
|
||||
parameterType 将会传入这条语句的参数的类全限定名或别名。这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler)推断出具体传入语句的参数,默认值为未设置(unset)。
|
||||
parameterMap 用于引用外部 parameterMap 的属性,目前已被废弃。请使用行内参数映射和 parameterType 属性。
|
||||
flushCache 将其设置为 true 后,只要语句被调用,都会导致本地缓存和二级缓存被清空,默认值:(对 insert、update 和 delete 语句)true。
|
||||
timeout 这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。默认值为未设置(unset)(依赖数据库驱动)。
|
||||
statementType 可选 STATEMENT,PREPARED 或 CALLABLE。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,默认值:PREPARED。
|
||||
useGeneratedKeys (仅适用于 insert 和 update)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段),默认值:false。
|
||||
keyProperty (仅适用于 insert 和 update)指定能够唯一识别对象的属性,MyBatis 会使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey 子元素设置它的值,默认值:未设置(unset)。如果生成列不止一个,可以用逗号分隔多个属性名称。
|
||||
keyColumn (仅适用于 insert 和 update)设置生成键值在表中的列名,在某些数据库(像 PostgreSQL)中,当主键列不是表中的第一列的时候,是必须设置的。如果生成列不止一个,可以用逗号分隔多个属性名称。
|
||||
databaseId 如果配置了数据库厂商标识(databaseIdProvider),MyBatis 会加载所有不带 databaseId 或匹配当前 databaseId 的语句;如果带和不带的语句都有,则不带的会被忽略。
|
||||
|
||||
### 语句实例
|
||||
|
||||
```
|
||||
<insert id="insertAuthor">
|
||||
insert into Author (id,username,password,email,bio)
|
||||
values (#{id},#{username},#{password},#{email},#{bio})
|
||||
</insert>
|
||||
|
||||
<update id="updateAuthor">
|
||||
update Author set
|
||||
username = #{username},
|
||||
password = #{password},
|
||||
email = #{email},
|
||||
bio = #{bio}
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
||||
<delete id="deleteAuthor">
|
||||
delete from Author where id = #{id}
|
||||
</delete>
|
||||
```
|
||||
|
||||
### 多行插入
|
||||
|
||||
如果你的数据库还支持多行插入, 你也可以传入一个 Author 数组或集合,并返回自动生成的主键。
|
||||
|
||||
```
|
||||
<insert id="insertAuthor" useGeneratedKeys="true"
|
||||
keyProperty="id">
|
||||
insert into Author (username, password, email, bio) values
|
||||
<foreach item="item" collection="list" separator=",">
|
||||
(#{item.username}, #{item.password}, #{item.email}, #{item.bio})
|
||||
</foreach>
|
||||
</insert>
|
||||
```
|
||||
|
||||
## 3 selectKey
|
||||
|
||||
### 属性列表
|
||||
```
|
||||
<selectKey
|
||||
keyProperty="id"
|
||||
resultType="int"
|
||||
order="BEFORE"
|
||||
statementType="PREPARED">
|
||||
```
|
||||
selectKey 元素的属性
|
||||
属性 描述
|
||||
keyProperty selectKey 语句结果应该被设置到的目标属性。如果生成列不止一个,可以用逗号分隔多个属性名称。
|
||||
keyColumn 返回结果集中生成列属性的列名。如果生成列不止一个,可以用逗号分隔多个属性名称。
|
||||
resultType 结果的类型。通常 MyBatis 可以推断出来,但是为了更加准确,写上也不会有什么问题。MyBatis 允许将任何简单类型用作主键的类型,包括字符串。如果生成列不止一个,则可以使用包含期望属性的 Object 或 Map。
|
||||
order 可以设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它首先会生成主键,设置 keyProperty 再执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 中的语句 - 这和 Oracle 数据库的行为相似,在插入语句内部可能有嵌入索引调用。
|
||||
statementType 和前面一样,MyBatis 支持 STATEMENT,PREPARED 和 CALLABLE 类型的映射语句,分别代表 Statement, PreparedStatement 和 CallableStatement 类型。
|
||||
|
||||
0
Java/MyBatis/4动态SQL.md
Normal file
0
Java/MyBatis/4动态SQL.md
Normal file
0
Java/MyBatis/5Java API.md
Normal file
0
Java/MyBatis/5Java API.md
Normal file
0
Java/MyBatis/6SQL语句构建器.md
Normal file
0
Java/MyBatis/6SQL语句构建器.md
Normal file
0
Java/MyBatis/7日志.md
Normal file
0
Java/MyBatis/7日志.md
Normal file
3
Java/说明.md
Normal file
3
Java/说明.md
Normal file
@@ -0,0 +1,3 @@
|
||||
java 中有太多的工具了。需要在这里进行整理说明。
|
||||
|
||||
大型的java框架,如Spring,则另起炉灶,小的Spring工具就在这里介绍了。
|
||||
Reference in New Issue
Block a user