1.修改StudentDao

public interface StudentDao {
/**
* 新增学生信息
*/
void addStudent(Student student); // 新增完毕之后有ID
void addStudentCacheId(Student student); // 删除学生信息
void deleteStudent(Integer id); // 修改
void updateStudent(Student student); // 查询所有
List<Student> selectAllStudents(); // 查询出来的是一个map集合
Map<String, Object> selectAllStudentsMap(); // 查询指定的
Student selectById(Integer id); // 根据姓名模糊查询
List<Student> selectByName(String name);
}

2.修改StudentMapper

<?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="student">
<!--新增学生 -->
<insert id="addStudent" parameterType="Student">
insert into
student(age,name) values(#{age},#{name})
</insert>
<insert id="addStudentCacheId" parameterType="Student">
insert into
student(age,name) values(#{age},#{name})
<selectKey resultType="int" keyProperty="id" order="AFTER">
select
@@identity
</selectKey>
</insert> <!--删除 deleteStudent -->
<delete id="deleteStudent">
<!--#{sa} sa仅仅就是一个占位符 写成什么都是可以的 -->
delete from student where id=#{sa}
</delete>
<!--修改updateStudent -->
<update id="updateStudent">
<!-- 这里面的{}必须是和实体类中的属性名一致 -->
update student set name=#{name},age=#{age},id=#{id}
where id=#{id}
</update> <!-- 查询所有 list 必须指定返回值的类型resultType是一个学生对象 不然底层没法封装 -->
<select id="selectAllStudents" resultType="Student">
select id,name,age
from student
</select>
<!-- 查询指定id学生信息 xxx还是占位符 -->
<select id="selectById" resultType="Student">
select * from student where
id=#{xxx}
</select> <!-- 模糊查询 -->
<select id="selectByName" resultType="Student">
<!-- 01.这种肯定不行 select * from student where name like '%2%' -->
<!-- 02. select * from student where name like concat('%',#{xxx},'%') -->
<!-- 03. 使用的是动态参数绑定 底层走的是preparedStatement 常用 select * from student where
name like '%' #{xxx} '%' -->
<!-- 04. 这种底层是使用了Statement 不安全 用户可以sql注入 select * from student where name
like '%${value}%' -->
</select>
</mapper>

3.修改StudentDaoImpl

public class StudentDaoImpl implements StudentDao {
SqlSession session = null; /**
* 新增学生信息
*/
public void addStudent(Student student) {
try {
// 通过工具类获取session
session = SessionUtil.getSession();
/**
* "addStudent" 要和mapper.xml文件中的id一致
* 增删改 操作 底层 执行的都是update方法
*/
session.insert("addStudent", student);
// 必须手动让session提交 底层默认就提交了事务
session.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (session != null) {
session.close(); // 关闭session
}
}
} public void addStudentCacheId(Student student) {
try {
// 通过工具类获取session
session = SessionUtil.getSession();
session.insert("addStudentCacheId", student);
// 必须手动让session提交 底层默认就提交了事务
session.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (session != null) {
session.close(); // 关闭session
}
} } // 删除
public void deleteStudent(Integer id) {
try {
// 通过工具类获取session
session = SessionUtil.getSession();
session.delete("deleteStudent", id);
// 必须手动让session提交 底层默认就提交了事务
session.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (session != null) {
session.close(); // 关闭session
}
} } // 修改学生信息
public void updateStudent(Student student) {
try {
// 通过工具类获取session
session = SessionUtil.getSession();
session.update("updateStudent", student);
// 必须手动让session提交 底层默认就提交了事务
session.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (session != null) {
session.close(); // 关闭session
}
} } // 查询返回list集合
public List<Student> selectAllStudents() {
List<Student> students = new ArrayList<Student>();
try {
// 通过工具类获取session
session = SessionUtil.getSession();
students = session.selectList("selectAllStudents");
// 查询就不需要提交事务了
} catch (Exception e) {
e.printStackTrace();
} finally {
if (session != null) {
session.close(); // 关闭session
}
}
return students;
} // 返回map集合
public Map<String, Object> selectAllStudentsMap() {
Map<String, Object> students = new HashMap<String, Object>();
try {
// 通过工具类获取session
session = SessionUtil.getSession();
// 还是之前list的方法 但是 key放什么? key必须是查询出来实体类的属性值
students = session.selectMap("selectAllStudents", "name");
// 查询就不需要提交事务了
} catch (Exception e) {
e.printStackTrace();
} finally {
if (session != null) {
session.close(); // 关闭session
}
}
return students;
} // 根据id查询指定的学生信息
public Student selectById(Integer id) {
Student students = null;
try {
// 通过工具类获取session
session = SessionUtil.getSession();
// 还是之前list的方法 但是 key放什么? key必须是查询出来实体类的属性值
students = session.selectOne("selectById", id);
// 查询就不需要提交事务了
} catch (Exception e) {
e.printStackTrace();
} finally {
if (session != null) {
session.close(); // 关闭session
}
}
return students;
} // 根据name模糊查询 返回list集合
public List<Student> selectByName(String name) {
List<Student> students = new ArrayList<Student>();
try {
// 通过工具类获取session
session = SessionUtil.getSession();
students = session.selectList("selectByName", name);
// 查询就不需要提交事务了
} catch (Exception e) {
e.printStackTrace();
} finally {
if (session != null) {
session.close(); // 关闭session
}
}
return students;
}
}

4.修改测试类

public class StudentTest {
StudentDao dao; @Before
public void before() {
dao = new StudentDaoImpl();
} @Test
public void test() {
/**
* 之前和之后 都是显示 我们赋予的id值,
* 但因为数据库中 我们设置了 主键的自增,所以我们的id相当于没有从数据库中查询到
*/ Student student = new Student("小黑333", 10);
System.out.println("方法之前==" + student);
dao.addStudent(student);
System.out.println("方法之后==" + student);
} @Test
public void addStudentCacheId() {
Student student = new Student("小黑33", 10);
// 方法之前因为没有insert语句 所以也是没有ID的
System.out.println("方法之前==" + student);
dao.addStudentCacheId(student);
// 产生了 数据库中的id
System.out.println("方法之后==" + student);
} // 删除
@Test
public void delete() {
dao.deleteStudent(17);
} // 修改
@Test
public void update() {
Student student = new Student(19, "小黑3111", 10);
student.setId(17);
dao.updateStudent(student);
} // 返回list
@Test
public void selectList() {
List<Student> allStudents = dao.selectAllStudents();
for (Student student : allStudents) {
System.out.println(student);
}
} // 返回map
@Test
public void selectMap() {
Map<String, Object> students = dao.selectAllStudentsMap();
/**
* 因为以name属性作为 了key
* map集合key不允许出现重复的数据
* 所以后一个会覆盖前一个
*/
System.out.println(students.get("小黑122"));
} // 返回指定的一个学生信息
@Test
public void selectOne() {
Student students = dao.selectById(1);
System.out.println(students);
} // 模糊查询学生信息
@Test
public void selectByName() {
List<Student> students = dao.selectByName("1");
for (Student student : students) {
System.out.println(student);
}
}
}

mybatis02--增删改查的更多相关文章

  1. Mybatis(3) 映射文件-增删改查

    映射文件: 映射文件是根据数据库模型生成的编写sql脚本xml文件, mapper标签中namespace属性值为对应模型实体类的全类名. <?xml version="1.0&quo ...

  2. Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示

    Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...

  3. ASP.NET从零开始学习EF的增删改查

           ASP.NET从零开始学习EF的增删改查           最近辞职了,但是离真正的离职还有一段时间,趁着这段空档期,总想着写些东西,想来想去,也不是很明确到底想写个啥,但是闲着也是够 ...

  4. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(9)-MVC与EasyUI结合增删改查

    系列目录 文章于2016-12-17日重写 在第八讲中,我们已经做到了怎么样分页.这一讲主要讲增删改查.第六讲的代码已经给出,里面包含了增删改,大家可以下载下来看下. 这讲主要是,制作漂亮的工具栏,虽 ...

  5. 通过Java代码实现对数据库的数据进行操作:增删改查

    在写代码之前,依然是引用mysql数据库的jar包文件:右键项目-构建路径-设置构建路径-库-添加外部JAR 在数据库中我们已经建立好一个表xs :分别有xuehao  xingming    xue ...

  6. Hibernate全套增删改查+分页

    1.创建一个web工程 2.导入jar包 3.创建Student表 4.创建实体类 package com.entity; public class Student { private Integer ...

  7. 使用 Json.Net 对Json文本进行 增删改查

    JSON 已经成为当前主流交互格式, 如何在C#中使用 Json.Net 对Json文本进行 增删改查呢?见如下代码 #region Create (从零创建) public static strin ...

  8. yii2 增删改查

    自己总结的yii2 advanced 版本的简单的增删改查,希望对大家有所帮助 1.gii生成的actionCreate()方法中 获取插入语句的id $id = $model->attribu ...

  9. Batis-iBatis基本操作(增删改查)

    Batis-iBatis基本操作(增删改查) 时间 2014-04-10 17:55:20  CSDN博客 原文  http://blog.csdn.net/mazhaojuan/article/de ...

  10. JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查)

    前言:关于Vue框架,好几个月之前就听说过,了解一项新技术之后,总是处于观望状态,一直在犹豫要不要系统学习下.正好最近有点空,就去官网了解了下,看上去还不错的一个组件,就抽空研究了下.最近园子里vue ...

随机推荐

  1. delphi button 实现下拉列表

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  2. SpringBoot无废话入门01:最简SpringBoot应用

    虽然本篇讲的是一个最简的SpringBoot应用,但是要说明的是:学习SpringBoot是有门槛的,这个门槛就是, 1:首先得有框架的基础,比如SSM: 2:MAVEN基础. 在学好上面两者的基础上 ...

  3. 正則表達式 - C语言

    http://blog.csdn.net/pipisorry/article/details/37073843 sscanf/scanf正则使用方法 %[ ] 的使用方法:%[ ]表示要读入一个字符集 ...

  4. jQuery on()方法使用

    jQuery on()方法 基本语法: 语法结构一: $(selector).on(event,function) 语法结构二: $(selector).on(events,[selector],[d ...

  5. HashTable代码解析

    HashTable继承关系如下: HashTable是一个线程安全的[键-值对]存储结构.其存储结构和HashMap相同,参考这里. 1. HashTable定义了一个类型为Entry<K,V& ...

  6. 每天一个linux命令(10):cat

    1.命令简介 cat (concatenate,连接)命令将[文件]或标准输入组合输出到标准输出,如果没有指定文件,或者文件为"-",则从标准输入读取. 2.用法 cat [选项] ...

  7. 在windows命令行批量ping局域网内IP

    参考了博客园Alfred Zhao的文章<Windows平台ping测试局域网所有在用IP> 在cmd命令行运行如下命令即可: ,,) -w .%i | find "回复&quo ...

  8. linux驱动工程面试必问知识点

    linux内核原理面试必问(由易到难) 简单型 1:linux中内核空间及用户空间的区别?用户空间与内核通信方式有哪些? 2:linux中内存划分及如何使用?虚拟地址及物理地址的概念及彼此之间的转化, ...

  9. Nodejs 使用log4js日志

    一.创建log4.js文件,保存日志到log文件,并在控制台输出,如果不控制台输出,把删除红色的代码 const log4js = require('log4js'), path = require( ...

  10. NetCore指令集和

    1.查看当前目录的版本号 C:\Users\Administrator>dotnet --version 1.0.4 2.发布程式,进入到指定目录 dotnet publish 3.运行程式 # ...