上一章:MyBatis.003 使用properties文件!
下一章:
在哪里配置插入数据?
- 在POJO对象对应的Mapper配置文件中进行配置
- 使用<insert />标签名进行构造
- 举个例子,如下代码
位置:cc/fozone/demo/mybatis/config/mapper/User.mapper.xml
<?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如何解析执行?
<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
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
package cc.fozone.demo.mybatis; ... public class App { ... // SQL会话工厂 private SqlSessionFactory factory; ... public void insertUser() { ... } }
1. 采用接口方式执行(推荐)
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方式执行
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. 编写执行函数
public class App { ... public static void main(String[] args) { App app = new App(); app.insertUser(); } ... }
2. 执行后,查询数据库users表数据是否插入,存在即成功。
上一章:MyBatis.003 使用properties文件!
下一章:
时间: 2024-10-13 11:23:26