本章节将介绍怎样将 JavaBean 通过 <insert> 标签保存到 user 数据表。
使用 <insert> 标签的 parameterMap 属性指定参数映射ID,而参数映射 <parameterMap> 标签用于设置 UserBean 每个属性对应的 jdbcType 类型。配置如下:
<parameterMap id="insert01_parameterMap"
type="com.hxstrive.mybatis.insert.demo2.UserBean">
<parameter jdbcType="INTEGER" property="userId" />
<parameter jdbcType="VARCHAR" property="name" />
<parameter jdbcType="VARCHAR" property="sex" />
<!-- 将 age 的 jdbcType 指定为 INTEGER,其实这些 MyBatis 会自动完成的 -->
<parameter jdbcType="INTEGER" property="age" />
</parameterMap>
<insert id="save" parameterMap="insert01_parameterMap">
INSERT INTO `user`(
`user_id`, `name`, `sex`, `age`
) VALUES (
#{userId,jdbcType=VARCHAR},
#{name,jdbcType=VARCHAR},
#{sex,jdbcType=INTEGER},
#{age,jdbcType=VARCHAR}
)
</insert>不推荐像上面这样使用 <insert> 标签,如果每个 UserBean 都需要这样进行映射很麻烦!!MyBatis 比你想象的要强大很多,JavaBean 会自动进行参数映射。
(1)MyBatis 配置文件 mybatis-cfg.xml 内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="database.properties"/>
<environments default="MySqlDatabase" >
<environment id="MySqlDatabase" >
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/hxstrive/mybatis/insert/demo2/UserMapper.xml" />
</mappers>
</configuration>(2)定义 UserBean 实体,代码如下:
package com.hxstrive.mybatis.insert.demo2;
public class UserBean {
private Integer userId;
private String name;
private String sex;
private Integer age;
// 忽略 getter 和 setter
@Override
public String toString() {
return "UserBean{" +
"userId=" + userId +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
}(3)定义 Mapper 接口文件 UserMapper,代码如下:
package com.hxstrive.mybatis.insert.demo2;
public interface UserMapper {
// 保存用户信息
int save(UserBean userBean);
}(4)编写 Mapper XML 文件,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hxstrive.mybatis.insert.demo2.UserMapper">
<!-- 映射UserBean参数 -->
<parameterMap id="insert01_parameterMap"
type="com.hxstrive.mybatis.insert.demo2.UserBean">
<parameter jdbcType="INTEGER" property="userId" />
<parameter jdbcType="VARCHAR" property="name" />
<parameter jdbcType="VARCHAR" property="sex" />
<parameter jdbcType="INTEGER" property="age" />
</parameterMap>
<insert id="save" parameterMap="insert01_parameterMap">
INSERT INTO `user`(
`user_id`, `name`, `sex`, `age`
) VALUES (
#{userId,jdbcType=VARCHAR},
#{name,jdbcType=VARCHAR},
#{sex,jdbcType=INTEGER},
#{age,jdbcType=VARCHAR}
)
</insert>
</mapper>注意:上面的 <parameterMap> 标签是可选的,即使不使用该标签进行参数映射也是可以实现插入操作。了解更多参数方面的知识请阅读“MyBatis parameterMap”
(5)客户端代码如下:
package com.hxstrive.mybatis.insert.demo2;
import com.alibaba.fastjson.JSONObject;
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 java.io.InputStream;
public class InsertDemo2 {
public static void main(String[] args) throws Exception {
String cfgName = "com/hxstrive/mybatis/insert/demo2/mybatis-cfg.xml";
InputStream input = Resources.getResourceAsStream(cfgName);
SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlFactory = factoryBuilder.build(input);
SqlSession sqlSession = sqlFactory.openSession(true);
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int id = (int)(System.currentTimeMillis() / 1000000);
UserBean user = new UserBean();
user.setUserId(id);
user.setName("Name-" + user.getUserId());
user.setSex("female");
user.setAge(25);
System.out.println("user=" + JSONObject.toJSONString(user));
int result = userMapper.save(user);
System.out.println("result=" + result);
}
}