参考:
在哪里配置插入数据?
-
在POJO对象对应的Mapper配置文件中进行配置
-
使用<insert />标签名进行构造
-
举个例子,如下代码
位置:cc/fozone/demo/mybatis/config/mapper/User.mapper.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?
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
=
"cc.fozone.demo.mybatis.controller.IUserController"
>
...
<
insert
id
=
"insertUser"
parameterType
=
"cc.fozone.demo.mybatis.pojo.User"
statementType
=
"PREPARED"
flushCache
=
"true"
keyProperty
=
"id"
>
<![CDATA[
insert into users (name,age,phone) values (#{name},#{age},#{phone})
]]>
</
insert
>
...
</
mapper
>
|
这些参数是什么含义?
属性 | 必选 | 含义 |
id | 是 | 全局唯一标示符,代表该操作 |
parameterType |
否 | 参数类型,可以是基本数据类,例如int、string等,也可以是某个类 |
statementType | 否 | STATEMENT,PREPARED(默认) 或 CALLABLE MyBatis选择使用Statement,PreparedStatement 或 CallableStatement。 |
flushCache | 否 | 默认:false,执行时是否清空缓存 |
keyProperty |
否 | 主要用作自动生成自增主键的字段设置,对于不支持自增的数据库,有特别用处 默认:空 注:仅对insert和update有用 |
keyColumn | 否 | 与上述相同,但主要设置keyProperty |
useGeneratedKeys | 否 | 通过JDBC驱动的getGeneratedKeys方法返回数据库自己生成的主键 默认:false 注:仅对insert和update有用 |
parameterType如何解析执行?
1
2
3
4
5
6
7
8
9
10
11
|
<
insert
id
=
"insertUser"
parameterType
=
"cc.fozone.demo.mybatis.pojo.User"
...
>
<![CDATA[
insert into users (name,age,phone) values (#{name},#{age},#{phone})
]]>
</
insert
>
|
-
执行插入语句时,需要传入类cc.fozone.demo.mybatis.pojo.User的对象;
-
解析时,将会根据#{string}的字段,通过传递的对象,调用对应的getter方法取值替换,
例如:#{name}将会User.getName()值替换,#{age}将会被User.getAge()值替换;
为IUserController接口添加插入用户的方法
位置:cc/fozone/demo/mybatis/controller/IUserController.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package
cc.fozone.demo.mybatis.controller;
import
java.util.List;
import
cc.fozone.demo.mybatis.pojo.User;
public
interface
IUserController {
...
// 添加用户信息
public
void
insertUser(User user);
}
|
如何执行插入User?
位置:cc/fozone/demo/mybatis/App.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package
cc.fozone.demo.mybatis;
...
public
class
App {
...
// SQL会话工厂
private
SqlSessionFactory factory;
...
public
void
insertUser() {
...
}
}
|
1. 采用接口方式执行(推荐)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public
void
insertUser() {
User user =
new
User();
user.setName(
"user"
);
user.setAge(
100
);
user.setPhone(
"13812341234"
);
// 打开会话
SqlSession session = factory.openSession();
// 通过getMapper获得实例化接口
// 这里为什么可以实例化,重点在于mapper配置的namespace的配置
IUserController controller = session.getMapper(IUserController.
class
);
// 插入数据
controller.insertUser(user);
// 提交执行SQL
session.commit();
// 关闭会话
session.close();
}
|
2. 采用session方式执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public
void
insertUser() {
User user =
new
User();
user.setName(
"user"
);
user.setAge(
100
);
user.setPhone(
"13812341234"
);
// 打开会话
SqlSession session = factory.openSession();
// 通过session方式插入数据
session.insert(
"insertUser"
,user);
// 提交执行SQL
session.commit();
// 关闭会话
session.close();
|
测试结果
1. 编写执行函数
1
2
3
4
5
6
7
8
|
public
class
App {
...
public
static
void
main(String[] args) {
App app =
new
App();
app.insertUser();
}
...
}
|
2. 执行后,查询数据库users表数据是否插入,存在即成功。
本文转自 sundunjam 51CTO博客,原文链接:http://blog.51cto.com/sunspot/1557107,如需转载请自行联系原作者