mybatis03--xml映射文件

select

使用非常简单:

1
2
3
<select id="selectPerson" parameterType="int" resultType="hashmap">
SELECT * FROM PERSON WHERE ID = #{id}
</select>

下面讲一下其中常用的属性:

  • id 唯一标识符
  • parameterType 传入的参数类型,该属性是可选的,mybatis会自动推断
  • resultType 返回值类型,不能与resultMap同时使用
  • resultMap 外部 resultMap 的命名引用
    关于resultTyperesultMap特别说明一下,官方给出的说明特别简短,具体两者有什么不同到时候在实际使用中再说

insert, update 和 delete

与select差不多这里把几个不同的属性说一下:

  • useGeneratedKeys (仅对 insert 和 update 有用)默认值为false,当为true时会从数据库中取出自动增长的主键值,并将值返回
  • keyProperty (仅对 insert 和 update 有用)MyBatis 会通过 getGeneratedKeys 的返回值或者通过 insert 语句的 selectKey 子元素设置它的键值

例:

1
2
3
4
5
6
7
8
9
10
11
12
<?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">
<select id="selectUser" resultType="com.yhzl.bean.User">
select * from User where id = #{id}
</select>
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into User (username, password) values (#{username}, #{password})
</insert>
</mapper>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.yhzl.test;

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

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.yhzl.bean.User;

/**
* @author chsm
* @date 2018年4月4日上午8:33:13
* @version 1.0
*/
public class Test {

public static void main(String[] args) throws IOException {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sessionFactory.openSession();
User user2 = new User();
user2.setUsername("abcdefg");
user2.setPassword("abcdefg");
int i = session.insert("org.mybatis.example.BlogMapper.insertUser", user2);
session.commit();
session.close();
//当设置useGeneratedKeys="true" keyProperty="id"时User有id值,若不设置则没有id值
System.out.println(user2);
}

}

sql

这个元素可以被用来定义可重用的 SQL 代码段,可以包含在其他语句中。它可以被静态地(在加载参数) 参数化. 不同的属性值通过包含的实例变化. 比如:

1
<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>

这个 SQL 片段可以被包含在其他语句中,例如:

1
2
3
4
5
6
7
<select id="selectUsers" resultType="map">
select
<include refid="userColumns"><property name="alias" value="t1"/></include>,
<include refid="userColumns"><property name="alias" value="t2"/></include>
from some_table t1
cross join some_table t2
</select>

SQL中也可以使用include,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<sql id="sometable">
${prefix}Table
</sql>

<sql id="someinclude">
from
<include refid="${include_target}"/>
</sql>

<select id="select" resultType="map">
select
field1, field2, field3
<include refid="someinclude">
<property name="prefix" value="Some"/>
<property name="include_target" value="sometable"/>
</include>
</select>

后面章节

对于后面章节推荐大家前往官网观看
附上链接:http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#Parameters