MyBatis学习(二)MyBatis-Statement方式的增删改查
1、前期准备
项目骨架图如下所示

1、配置conf.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 通过 environments 的 default值 和 environment 的 id 来指定mybatis运行时的数据库环境 -->
<environments default="development">
<!-- 开发环境(本机)、environment可以有多套 -->
<environment id="development">
<!-- 事务提交方式
JDBC:利用JDBC处理事务(commit rollback close)
MANAGED:将事务交给其他组件托管(Spring、jobss),默认情况下会关闭连接。
-->
<transactionManager type="JDBC"/>
<!-- 数据源类型
POOLED:使用数据库连接池
UNPOOLED:传统的JDBC模式(消耗性能、不推荐)
JNDI:从tomcat中获取内置数据库连接池
-->
<dataSource type="POOLED">
<!-- 配置数据库信息 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/xiao?serverTimezone=GMT%2B8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 加载映射文件 -->
<mapper resource="com/feng/entity/studentMapper.xml"/>
</mappers>
</configuration>
2、配置studentMapper.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">
<!--namespace:该mapper.xml映射文件的唯一标识-->
<mapper namespace="com.feng.entity.studentMapper">
<!-- 通过 namespace.id来定位该sql -->
<!-- 各种标签的id;
parameterType:输入参数的类型;
resultType:查询的返回结果的类型(具体对象映射到路径)
-->
<select id="queryStudentByStuNo" parameterType="int" resultType="com.feng.entity.Student">
select * from student where stuno = #{stuNo}
</select>
<select id="queryAllStudents" resultType="com.feng.entity.Student">
select * from student
</select>
<insert id="addStudent" parameterType="com.feng.entity.Student">
insert into student(stuno,stuname,stuage,graname) values(#{stuNo},#{stuName},#{stuAge},#{graName})
</insert>
<update id="updateStudentByStuNo" parameterType="com.feng.entity.Student">
update student set stuname=#{stuName},stuage=#{stuAge},graname=#{graName} where stuno=#{stuNo}
</update>
<delete id="deleteStudentByStuNo" parameterType="int">
delete from student where stuno = #{stuNo}
</delete>
</mapper>
3、写好学生类和创建对应的表
package com.feng.entity;
public class Student {
private int stuNo;
private String stuName;
private int stuAge;
private String graName;
public int getStuNo() {
return stuNo;
}
public void setStuNo(int stuNo) {
this.stuNo = stuNo;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public int getStuAge() {
return stuAge;
}
public void setStuAge(int stuAge) {
this.stuAge = stuAge;
}
public String getGraName() {
return graName;
}
public void setGraName(String graName) {
this.graName = graName;
}
public Student(int stuNo, String stuName, int stuAge, String graName) {
this.stuNo = stuNo;
this.stuName = stuName;
this.stuAge = stuAge;
this.graName = graName;
}
public Student() {
}
@Override
public String toString() {
return '{'+"stuNo=" + stuNo +
", stuName='" + stuName + '\'' +
", stuAge=" + stuAge +
", graName='" + graName + '\'' +
'}';
}
}

2、编写测试类进行测试
package com.feng.entity;
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.IOException;
import java.io.Reader;
import java.util.List;
public class Test {
// 1、查询单个学生
public static void queryStudentByStuNo() throws IOException {
// conf.xml ----> reader
Reader reader = Resources.getResourceAsReader("com/feng/conf.xml");
// reader ---> SqlSession
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
// arg1: namespace + id 确定 sql 、 arg2: 输入参数
String statement = "com.feng.entity.studentMapper.queryStudentByStuNo";
Student student = session.selectOne(statement, 1);
System.out.println(student);
session.close();
}
// 2、查询全部学生
public static void queryAllStudents() throws IOException {
Reader reader = Resources.getResourceAsReader("com/feng/conf.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
// arg1: namespace + id 确定 sql 、 arg2: 输入参数
String statement = "com.feng.entity.studentMapper.queryAllStudents";
List<Student> students = session.selectList(statement);
System.out.println(students);
session.close();
}
// 3、增加学生
public static void addStudent() throws IOException {
Reader reader = Resources.getResourceAsReader("com/feng/conf.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
String statement = "com.feng.entity.studentMapper.addStudent";
Student student = new Student(3, "柴犬", 25, "六年级");
// statement:指定执行的sql、student:sql中需要的参数
int count = session.insert(statement, student);
session.commit(); // 提交事务
System.out.println("增加了"+count+"个学生");
session.close();
}
// 4、删除学生
public static void updateStudentByStuNo() throws IOException {
Reader reader = Resources.getResourceAsReader("com/feng/conf.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
String statement = "com.feng.entity.studentMapper.updateStudentByStuNo";
Student student = new Student();
// 修改那个人, where stuNo = 2
student.setStuNo(2);
// 修改成啥样子
student.setStuName("三哈");
student.setStuAge(25);
student.setGraName("六年级");
int count = session.update(statement, student);
session.commit(); // 提交事务
System.out.println("修改"+count+"个学生");
session.close();
}
// 4、增加学生
public static void deleteStudentByStuNo() throws IOException {
Reader reader = Resources.getResourceAsReader("com/feng/conf.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
String statement = "com.feng.entity.studentMapper.deleteStudentByStuNo";
int count = session.delete(statement, 3);
session.commit(); // 提交事务
System.out.println("删除了"+count+"个学生");
session.close();
}
public static void main(String[] args) throws IOException {
queryAllStudents();
addStudent();
// deleteStudentByStuNo();
updateStudentByStuNo();
queryAllStudents();
}
}
3、运行结果

MyBatis学习(二)MyBatis-Statement方式的增删改查的更多相关文章
- Spring Boot入门系列(十八)整合mybatis,使用注解的方式实现增删改查
之前介绍了Spring Boot 整合mybatis 使用xml配置的方式实现增删改查,还介绍了自定义mapper 实现复杂多表关联查询.虽然目前 mybatis 使用xml 配置的方式 已经极大减轻 ...
- MyBatis学习(三)MyBatis基于动态代理方式的增删改查
1.前言 上一期讲到MyBatis-Statement版本的增删改查.可以发现.这种代码写下来冗余的地方特别多.写一套没啥.如果涉及到多表多查询的时候就容易出现问题.故.官方推荐了一种方法.即MyBa ...
- 02.Mybatis的动态代理方式实现增删改查
动态代理的方式实现增删改查: 通过约定的方式定位sql语句 约定 > 配置文件 > 硬编码 约定的目标是省略掉通过硬编码的方式定位sql的代码,通过接口直接定位出sql语句,以下代码为通过 ...
- Android-Sqlite-OOP方式操作增删改查
之前写的数据库增删改查,是使用SQL语句来实现的,Google 就为Android开发人员考虑,就算不会SQL语句也能实现增删改查,所以就有了OOP面向对象的增删改查方式 其实这种OOP面向对象的增删 ...
- Mybatis的学习总结(一)——使用配置文件实现增删改查
在使用Mybatis作为持久层来进行操作数据库,有很多的操作都是一样的,基本上都是先得到session,然后调用session提供的相关方法进行操作,接着提交session,最后关闭session.那 ...
- SSM框架搭建(Spring+SpringMVC+MyBatis)与easyui集成并实现增删改查实现
一.用myEclipse初始化Web项目 新建一个web project: 二.创建包 controller //控制类 service //服务接口 service.impl //服务 ...
- Mybatis(一)实现单表的增删改查
1.1 什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并 ...
- EF6 学习笔记(二):操练 CRUD 增删改查
EF6学习笔记总目录 ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 接上篇: EF6 学习笔记(一):Code First 方式生成数据库及初始化数据库实际操作 本篇原文链接: I ...
- 3.mybatis实战教程(mybatis in action)之三:实现数据的增删改查
转自:https://blog.csdn.net/tangruyi1992/article/details/52583910 前面已经讲到用接口的方式编程.这种方式,要注意的一个地方就是.在User. ...
随机推荐
- LOJ 2555 & 洛谷 P4602 [CTSC2018]混合果汁(二分+主席树)
LOJ 题目链接 & 洛谷题目链接 题意:商店里有 \(n\) 杯果汁,第 \(i\) 杯果汁有美味度 \(d_i\),单价为 \(p_i\) 元/升.最多可以添加 \(l_i\) 升.有 \ ...
- Codeforces 772D - Varying Kibibits(高维差分+二项式定理维护 k 次方和)
Codeforces 题目传送门 & 洛谷题目传送门 首先很容易注意到一件事,那就是对于所有 \(f(S)\) 可能成为 \(x\) 的集合 \(S\),必定有 \(\forall y\in ...
- 植物GO注释
本文主要是对没有GO term库的植物进行注释. 1.选用AgriGo 进行注释,在agriGO中点击species后,查看与你目标物种相近的物种作为库 2.比如我以甜菜为例 为了找到和GO term ...
- R语言与医学统计图形【5】饼图、条件图
R语言基础绘图系统 基础图形--饼图.克利夫兰点图.条件图 6.饼图 pie(rep(1,26),col=rainbow(26), labels = LETTERS[1:26], #标签 radius ...
- js变量作为数组对象的键值方法
js变量作为数组对象的键值方法,变量键值获取数组值 js也可以像php的数组一样用下标获取数组的值,方法是: var arr = {'key':'abc'}; var key = 'key'; con ...
- 在Kubernetes上安装Percona XtraDB集群
官方文档地址:https://www.percona.com/doc/kubernetes-operator-for-pxc/kubernetes.html 一.简介 Percona XtraDB C ...
- MySQL:事务常用语句
Mysql(版本是8)的事务隔离级别 默认是RR:REPEATABLE-READ:可重复读 查看 当前隔离级别 全局隔离级别 修改 -- 当前修改 -- 设置成可重复读 SET transactio ...
- 学习java 7.19
学习内容: 接口的组成中加入了默认方法,静态方法,私有方法 接口中默认方法:public default 返回值类型 方法名(参数列表){ } public default void show() ...
- 12-gauge/bore shotgun
12-gauge/bore shotgun不是弹夹(magazine)容量为12发的霰(xian)弹枪.[LDOCE]gauge - a measurement of the width or thi ...
- 商业爬虫学习笔记day8-------json的使用
一. 简介 JSON,全称为JavaScript Object Notation(JavaScript对象标记),它通过对象和数组的组合来表示数据,是一种轻量级的数据交换格式.它基于 ECMAScri ...