首页 > 代码库 > 【狂人小白】MyBatis.004 第一个插入!

【狂人小白】MyBatis.004 第一个插入!

上一章:MyBatis.003 使用properties文件!

下一章:

在哪里配置插入数据?

  1. 在POJO对象对应的Mapper配置文件中进行配置

  2. 使用<insert />标签名进行构造

  3. 举个例子,如下代码

位置: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>
  1. 执行插入语句时,需要传入类cc.fozone.demo.mybatis.pojo.User的对象;

  2. 解析时,将会根据#{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表数据是否插入,存在即成功。

wKiom1QgPJayzcNdAABU43N3rjo116.jpg


上一章:MyBatis.003 使用properties文件!

下一章:


本文出自 “博远至静” 博客,请务必保留此出处http://sunspot.blog.51cto.com/372554/1557107

【狂人小白】MyBatis.004 第一个插入!