mybatis02--增删改查
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--增删改查的更多相关文章
- Mybatis(3) 映射文件-增删改查
映射文件: 映射文件是根据数据库模型生成的编写sql脚本xml文件, mapper标签中namespace属性值为对应模型实体类的全类名. <?xml version="1.0&quo ...
- Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示
Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...
- ASP.NET从零开始学习EF的增删改查
ASP.NET从零开始学习EF的增删改查 最近辞职了,但是离真正的离职还有一段时间,趁着这段空档期,总想着写些东西,想来想去,也不是很明确到底想写个啥,但是闲着也是够 ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(9)-MVC与EasyUI结合增删改查
系列目录 文章于2016-12-17日重写 在第八讲中,我们已经做到了怎么样分页.这一讲主要讲增删改查.第六讲的代码已经给出,里面包含了增删改,大家可以下载下来看下. 这讲主要是,制作漂亮的工具栏,虽 ...
- 通过Java代码实现对数据库的数据进行操作:增删改查
在写代码之前,依然是引用mysql数据库的jar包文件:右键项目-构建路径-设置构建路径-库-添加外部JAR 在数据库中我们已经建立好一个表xs :分别有xuehao xingming xue ...
- Hibernate全套增删改查+分页
1.创建一个web工程 2.导入jar包 3.创建Student表 4.创建实体类 package com.entity; public class Student { private Integer ...
- 使用 Json.Net 对Json文本进行 增删改查
JSON 已经成为当前主流交互格式, 如何在C#中使用 Json.Net 对Json文本进行 增删改查呢?见如下代码 #region Create (从零创建) public static strin ...
- yii2 增删改查
自己总结的yii2 advanced 版本的简单的增删改查,希望对大家有所帮助 1.gii生成的actionCreate()方法中 获取插入语句的id $id = $model->attribu ...
- Batis-iBatis基本操作(增删改查)
Batis-iBatis基本操作(增删改查) 时间 2014-04-10 17:55:20 CSDN博客 原文 http://blog.csdn.net/mazhaojuan/article/de ...
- JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查)
前言:关于Vue框架,好几个月之前就听说过,了解一项新技术之后,总是处于观望状态,一直在犹豫要不要系统学习下.正好最近有点空,就去官网了解了下,看上去还不错的一个组件,就抽空研究了下.最近园子里vue ...
随机推荐
- JSON序列——保存修改数据
JSON序列——保存修改数据 procedure TForm1.Button6Click(Sender: TObject); begin var delta: TynJsonDelta := TynJ ...
- Idea checkstyle插件的使用
File->Setting 选择Plugins,查询是否已经安装了checkstyle,如果没有安装,可以点击下面的“Browse repositories...”按钮 查询到checkstyl ...
- HRD Emulator in HTML5
Posted on March 21, 2012 by Moto Just like MPEG-2 video uses VBV (Video Buffer Verifier), H.264 stan ...
- [DevExpress使用随笔]之NavBarControl控件(一)【转】
https://blog.csdn.net/HXC_HUANG/article/details/78614092 NavBarControl是具有可扩展组的侧导航控件.一.在Winform窗口中拖入N ...
- jqeury-地区三级联动
html+js <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www ...
- pip install whl
$ pip install --download /tmp/offline_packages -r requirements.txt $ pip install --no-index --find-l ...
- iframe之间操作记录
1.watch.js (function ($) { $.fn.watch = function (callback) { return this.each(function () { //缓存以前的 ...
- R语言︱处理缺失数据&&异常值检验、离群点分析、异常值处理
在数据挖掘的过程中,数据预处理占到了整个过程的60% 脏数据:指一般不符合要求,以及不能直接进行相应分析的数据 脏数据包括:缺失值.异常值.不一致的值.重复数据及含有特殊符号(如#.¥.*)的数据 数 ...
- 【C++】C++中assert和ENDEGU预处理语句
assert 断言语句是C++中的一种预处理宏语句,它能在程序运行时根据否定条件中断程序. C++中的assert()函数可以实现断言功能,在使用assert函数之前应该先引入<cassert& ...
- window.print控制打印样式
我们可能会去使用window.print()方法来打印页面,但是当我们遇到需要改变打印时候的字体大小等css样式的时候你可能会懵逼. 所以搜索成了我们的必经之路,我相信在网上搜索出来的最好的答案就是使 ...