用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.结果