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. Android_编程开发规范

     Android编程开发规范         原文地址 http://www.jianshu.com/p/9b8aeca9b281 一.约定 Activity.onCreate(),Fragment. ...

  2. CentOS7本地安装MySQL5.7

    操作系统:3.10.0-514.el7.x86_64 安装包:mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz 1:检查是否安装了 libaio(centos7默认 ...

  3. go微服务框架go-micro深度学习(一) 整体架构介绍

    产品嘴里的一个小项目,从立项到开发上线,随着时间和需求的不断激增,会越来越复杂,变成一个大项目,如果前期项目架构没设计的不好,代码会越来越臃肿,难以维护,后期的每次产品迭代上线都会牵一发而动全身.项目 ...

  4. php: 统计在线人数

    <?php $filename='online.txt';//数据文件 $cookiename='VGOTCN_OnLineCount';//cookie名称 $onlinetime=60;// ...

  5. [转]PID控制算法原理

    PID控制算法是工业界使用极其广泛的一个负反馈算法,相信这个算法在做系统软件时也有用武之处,这里摘录了知乎上的一篇文章,后面学习更多后自己总结一篇 以下为原文: PID控制应该算是应用非常广泛的控制算 ...

  6. 并行排序ShearSort ---[MPI , c++]

    思想: (1) 对于一个nxm的数组,使用N个work进行处理. (2) 先按行对数组进行升序和降序排序[由左至右],一般奇数序列work升序,偶数序号的work进行降序 (3)再按列对数组进行升序排 ...

  7. ABC卡

    如今在银行,P2P等各种贷款业务机构,普遍使用信用评分,对客户实行打分制,以期对客户有一个优质与否的评判.但是不是所有人都知道信用评分卡还分A,B,C卡三类!所以,如果你只知道ABC是Gary的ABC ...

  8. wps直接打开CVS文件会把长串数字订单号最后4位变为0

    WPS打开CVS文件,发现里面的长串数字订单号后4位全变成0了,而且是以科学计数法来显示了 上网查了下,不能直接打开,得先在WPS(OFFICE中也一样)中新建一个空白表格,然后用菜单里的数据导入功能 ...

  9. kubernetes 学习资料

    谷歌大神详解 Kubernetes 配置管理最佳方法 https://www.kubernetes.org.cn/3031.html all in on kubernetes https://gith ...

  10. jQuery创建元素和添加子元素

    var li = $("<li class=\"TopNav arrow\" secondMenu=\"menu_" + i + "\ ...