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. Mybatis : "less than" issue in Select annotations

    I am using java7, spring 3 and mybatis Pom.xml <org.mybatis-version>3.2.8</org.mybatis-vers ...

  2. Wordpress添加分类

    网址一般不用中文,别名方便让网址更美观,如: xxx/category/new/

  3. mui 从列表进入到详情,再返回,列表页还是进入列表之前的样子,而不刷新页面

    mui 从列表进入到详情,再返回,列表页还是进入列表之前的样子,而不刷新页面

  4. Go语言之高级篇beego框架之layui框架应用

    1.layui前端框架 参考地址:https://www.layui.com

  5. Java通过SMS短信平台实现发短信功能

    在项目中使用过发短信的功能,但那个由于公司内部的限制很麻烦,今天在网上找到一个简单的,闲来无事就把它记录如下: 本程序是通过使用中国网建提供的SMS短信平台实现的(该平台目前为注册用户提供5条免费短信 ...

  6. Hadoop的启动和停止说明

    Hadoop的启动和停止说明   sbin/start-all.sh 启动所有的Hadoop守护进程.包括NameNode. Secondary NameNode.DataNode.ResourceM ...

  7. jvm实战-jvm调优

    jvm调优 jvm调优主要是内存管理方面的调优,包括各个代的大小,GC策略等. 代大小调优 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内 ...

  8. 关于Android开发中Arm、X86和Mips(草稿)

    一.架构 1.Arm架构 是一个32位精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计. 2.X86架构 是一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合 ...

  9. [转]Anatomy of a Program in Memory

    Memory management is the heart of operating systems; it is crucial for both programming and system a ...

  10. ANTLR v4 权威参考笔记(目录)

    ANTLR v4是一款强大的语法分析器生成器,可以用来读取.处理.执行和转换结构化文本或二进制文件.通过称为文法的形式化语言描述,ANTLR可以为该语言自动生成词法分析器.生成的语法分析器可以自动构建 ...