4.Mybatis添加记录

用POJO添加记录

1.修改mybatis-mapper

<?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="af.test">

  <insert id="insertStudent" parameterType="my.Student">
    insert into student(id,name,sex, cellphone)
      values(#{id}, #{name}, #{sex}, #{cellphone} )
  </insert >
        
</mapper>

2.添加POJO类

3. 添加记录

调用 SqlSession.insert()方法,添加一条记录

session.insert  ( statement,  pojo) ;

 session.commit() ;

package my;

import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class Test
{
	public static void main(String[] args) throws Exception
	{
		// 创建 SqlSessionFactory
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

		// 使用简化的try-with-resources语法,等效于try..finally语句
		try (SqlSession session = sqlSessionFactory.openSession())
		{
			Student s=new Student();
			s.setId(2020001);
			s.setName("周杰伦");
			s.setSex(true);
			s.setCellphone("123456789");
			
			session.insert("af.test.insertStudent", s);
			session.commit();// 因为默认开启了事务,所以要commit()一下
		}
		System.out.println("Exit");
	}

}

4.结果

注意:

1.不需要对输入的值进行转义,因为它内部使用的是 PreparedStatement

2.在insert之后记得 commit() 因为它默认开启了事务,所以只有commit()后才会真正修改数据库

使用Map方式添加记录

在 MyBatis里,可以使用POJO,也可以使用Map 添加记录。

  • parameterType 指定为 hashmap
  • insert() 时传入一个 Map 对象

1.修改mybatis-mapper

<?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="af.test">

  <insert id="insertStudent2" parameterType="hashmap">
    insert into student(id,name,sex, cellphone)
      values(#{id}, #{name}, #{sex}, #{cellphone} )
  </insert >
        
</mapper>

2.测试

package my;

import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class Test
{
	public static void main(String[] args) throws Exception
	{
		// 创建 SqlSessionFactory
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

		// 使用简化的try-with-resources语法,等效于try..finally语句
		try (SqlSession session = sqlSessionFactory.openSession())
		{
			Map<String,Object> para=new HashMap<>();
			para.put("id", 2020001);
			para.put("name", "周杰伦");
			para.put("sex", true);
			para.put("cellphone", "123456789");
			
			session.insert("af.test.insertStudent2", para);
			session.commit();// 因为默认开启了事务,所以要commit()一下
		}
		System.out.println("Exit");
	}

}

存在自增主键的插入

当插入一条记录时,自增的主键ID可以取回。

1.使用sql脚本添加一个含自增主键的表

/*
SQLyog Ultimate v11.24 (32 bit)
MySQL - 5.6.39 : Database - af_example
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`af_example` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `af_example`;

/*Table structure for table `topic` */

DROP TABLE IF EXISTS `topic`;

CREATE TABLE `topic` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `title` varchar(100) DEFAULT NULL COMMENT '标题',
  `content` text COMMENT '内容',
  `numView` int(11) DEFAULT NULL COMMENT '阅读量',
  `timeCreated` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*Data for the table `topic` */

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

表的结构如下:

 2.添加POJO类

package my;

import java.util.Date;

public class Topic
{
	public Long id;
	public String title;
	public String content;
	public Integer numView;
	public Date timeCreated;
	public Long getId()
	{
		return id;
	}
	public void setId(Long id)
	{
		this.id = id;
	}
	public String getTitle()
	{
		return title;
	}
	public void setTitle(String title)
	{
		this.title = title;
	}
	public String getContent()
	{
		return content;
	}
	public void setContent(String content)
	{
		this.content = content;
	}
	public Integer getNumView()
	{
		return numView;
	}
	public void setNumView(Integer numView)
	{
		this.numView = numView;
	}
	public Date getTimeCreated()
	{
		return timeCreated;
	}
	public void setTimeCreated(Date timeCreated)
	{
		this.timeCreated = timeCreated;
	}
}

3.修改mybatis-mapper.xml  添加 Mapper :指定自增主键的相关参数     useGeneratedKeys="true"         keyProperty="id"

<?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="af.test">

  <insert id="insertTopic" parameterType="my.Topic"
  		useGeneratedKeys="true"  
  		keyProperty="id" >	
    insert into topic(id, title, content, numView, timeCreated)
      values( #{id}, #{title}, #{content}, #{numView}, #{timeCreated} )
  </insert>
        
</mapper>

3.测试

在insert() 后,会取回自增的ID值

package my;

import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class Test
{
	public static void main(String[] args) throws Exception
	{
		// 创建 SqlSessionFactory
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

		// 使用简化的try-with-resources语法,等效于try..finally语句
		try (SqlSession session = sqlSessionFactory.openSession())
		{
			Topic row = new Topic();
			row.setTitle("江山定");
			row.setContent("风雨遮前路,冰火伴我行。一度波澜惊,而今江山定。");
			row.setNumView(1230230);
			row.setTimeCreated(null);
			
			session.insert("af.test.insertTopic", row);
			System.out.println("新记录的ID: " + row.getId());
			
			session.commit(); // 因为默认开启了事务,所以要commit()一下
		}
		System.out.println("Exit");
	}

}

4.结果

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值