【狂人小白】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表数据是否插入,存在即成功。

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

下一章:

时间: 2024-10-13 11:23:26

【狂人小白】MyBatis.004 第一个插入!的相关文章

MyBatis在Oracle中插入数据并返回主键的问题解决

引言:  在MyBatis中,希望在Oracle中插入数据之时,同时返回主键值,而非插入的条数... 环境:MyBatis 3.2 , Oracle, Spring 3.2   SQL Snippet in XML Configuration: <insert id="insertSelective" parameterType="com.jxxx.p2pp.model.UUserInfo"> <selectKey resultType="

mybatis的第一个程序

mybatis的第一个程序 前期准备: 新建一个java工程,或一个java web工程,导入工程所需的包,如下图所示, 整体工程如下图, 新建数据库,在数据库表中添加信息,表的结构如下所示, 数据库名,mybatis,表名user,也可以直接使用语句,如下, create database mybatis; use mybatis; CREATE TABLE user(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), age INT);

Java小白入门系列 第一篇 写在前面

2018年8月30日  22:00:17 郑州  多云 Sue Java小白入门系列 第一篇  写在前面 写在前面: 首先声明一下,本人也是正在学Java,并不是多么专业人士,只是最近受老师的启发,所以准备写个关于java新手入门系列的博客,包括搭建Java开发环境.Java入门知识,也会分享一些好用的软件及破解器之类的,一方面是巩固所学的知识,另一方面是给有兴趣的小白做练手.入门之用,本系列博客完全开放,所有资源不收任何费用,欢迎大家转发留言,入门之用,不喜勿喷,恶人绕道! Java是不是很难

【狂人小白】MyBatis.002 第一个查询!

参考 请注意后面文章中的注释 MyBatis官方入门:http://mybatis.github.io/mybatis-3/zh/getting-started.html 源代码下载:(正在审核中) 代码结构 1. config:配置文件目录 2. pojo:Bean类包 3. controller:数据接口 4. sql:数据库源文件 数据库创建 CREATE DATABASE  IF NOT EXISTS `mybatis`; USE `mybatis`; DROP TABLE IF EXI

mybatis入门-第一个程序

今天,我们就一起来完成mybatis的第一个小demo,使用mybatis对我们的数据库进行一个小小的操作. 需求 根据用户id查询用户的信息. 环境搭建 java环境:jdk1.7版本 开发工具:eclipse mysql:5.1 mybatais的jar包,可以从https://github.com/mybatis/mybatis-3/releases下载,3.2.7版本的.解压完成后是这样的: log4j的日志包 mysql的驱动包 创建一个工程,导入相应的包,然后在config目录下创建

Mybatis学习第一天

Mybatis第一天 2      MyBatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github. MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创建statement.手动设置参数.

关于Mybatis三种批量插入方式对比

第一种:普通for循环插入 @Test public void testInsertBatch2() throws Exception { long start = System.currentTimeMillis(); User user; SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(false); UserDao mapper = sqlSession.getMapper(User

mybatis连接mysql数据库插入中文乱码

对于mysql数据库的乱码问题,有两中情况: 1. mysql数据库编码问题(建库时设定). 2. 连接mysql数据库的url编码设置问题. 对于第一个问题,目前个人发现只能通过重新建库解决,建库的时候,选择UTF-8字符集.我试过修改现有数据库字符集为UFT -8,但是根本不起作用,插入的中文仍然乱码(中文显示成:???).重建库时选择字符集为UTF-8之后,中文正常显示了. 对于第二个问题,是这样 的情况:我建库时设置了数据库默认字符集为UTF-8,通过mysql workbench直接插

Mybatis框架 第一天

1 课程计划 1. mybatis的介绍 2. mybatis的框架原理(重点) 3. 入门程序 订单商品案例(用户表) 4. Mybatis开发dao的方式(重点) a) 原始dao开发方式(开发dao接口和dao实现类,由ibatis遗留下来的风格) b) Mapper代理的开发方式(推荐,开发mapper接口(相当于dao接口)) 5. 全局配置文件 6. 映射文件(重点) a) 输入映射 b) 输出映射 c) 动态sql 7. mybatis和hibernate的区别及应用场景 2 my