一、Mybatis增删改查案例

  上一节《Mybatis入门和简单Demo》讲了如何Mybatis的由来,工作流程和一个简单的插入案例,本节主要继上一讲完整的展示Mybatis的CRUD操作(重复的动作如环境搭建,引入依赖,mybatis.xml的配置,通用加载工具类的编写等参照上一节。

  (1)编写需要CRUD操作的实体类Student

package com.jyk.mybatis.crud;

public class Student {

    private String id;
private String name;
private String age;
private String sex; public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
} public Student(String id, String name, String age, String sex) {
super();
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
} public Student() {
super();
}
}

  (2)配置用于编写SQL语句的StudentMapper文件(路径com/jyk/mybatis/crud/StudentMapper.xml),并将mapper文件路径以及实体类别名加入到mybatis总配置文件中

<?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="com.jyk.mybatis.crud.Student"> <!-- 当实体属性名与表字段名不一样时,以下代码必须书写
当实体属性名与表字段名一样时,以下代码可选 -->
<resultMap type="crudstudent" id="studentMap">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<result property="sex" column="sex"/>
</resultMap> <!-- 添加操作 -->
<insert id="add" parameterType="crudstudent">
insert into student(id,name,age,sex) values(#{id},#{name},#{age},#{sex})
</insert> <!--
根据id查询操作:
如果参数不是一个实体,只是一个普通参数,例如int,double,string
这里的#{中间的变量名可以随便写},不过建议用方法的形式参数
-->
<select id="findById" parameterType="int" resultType="crudstudent">
select id,name,age,sex from student where id = #{id}
</select> <!-- 查询所有操作 -->
<select id="findall" resultType="crudstudent">
select id,name,age,sex from student
</select> <!-- 更新操作 -->
<update id="update" parameterType="crudstudent">
update student set name=#{name},age=#{age},sex=#{sex} where id=#{id}
</update> <!-- 删除操作 -->
<delete id="delete" parameterType="crudstudent">
delete from student where id=#{id}
</delete> <!--
增删改查注意事项 :insert/update/delete标签只是一个模板,在做操作时,其实是以sql语句为核心的
即当做增/删/改时,insert/update/delete标签可通用,但是提倡做什么操作就使用什么标签
但做查询时只能使用select标签
--> <!-- mybatis会将查询出来的表记录和resultMap值对应的映射结果互相匹配 -->
<select id="findById" parameterType="int" resultMap="studentMap">
select id,name,age,sex from student where id = #{id}
</select>
</mapper>
<?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> <!-- 加载类路径下的属性文件 -->
<properties resource="db.properties">
</properties> <!-- 设置类型别名 -->
<typeAliases>
<typeAlias type="com.jyk.mybatis.crud.Student" alias="crudstudent"/>
<!-- <typeAlias type="com.jyk.mybatis.page.Student" alias="pagestudent"/>
<typeAlias type="com.jyk.mybatis.dynamic.Student" alias="dynamicstudent"/> -->
</typeAliases> <!-- 设置一个默认的连接环境信息 -->
<environments default="mysql_env">
<!-- 连接环境信息,取一个唯一的编号 -->
<environment id="mysql_env">
<!-- mybatis使用的jdbc事务管理方式 -->
<transactionManager type="jdbc">
</transactionManager> <!-- mybatis使用连接池方式来获取链接 -->
<dataSource type="pooled">
<!-- 配置与数据库交互的四个属性 -->
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments> <mappers>
<mapper resource="com/jyk/mybatis/crud/StudentMapper.xml"/>
<!-- <mapper resource="com/jyk/mybatis/page/StudentMapper.xml"/>
<mapper resource="com/jyk/mybatis/dynamic/StudentMapper.xml"/> -->
</mappers> </configuration>

  (3)编写DAO,通过Java代码控制Mybatis进行增删改查,MyBatisUtil的编写参照上一节

package com.jyk.mybatis.crud;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.jyk.mybatis.util.MyBatisUtil;

public class StudentDao {

    /*
* 增加的方法1
*/
public void add(Student stu)
{
SqlSession sqlSession = null;
try{
sqlSession = MyBatisUtil.getSqlSession();
int i = sqlSession.insert(Student.class.getName()+".add", stu);
System.out.println("本次操作影响了"+i+"行数据");
//事务提交
sqlSession.commit();
}catch(Exception e){
e.printStackTrace();
//事务回滚
sqlSession.rollback();
throw e;
}finally{
MyBatisUtil.closeSqlSession();
}
} /*
* 根据ID查找
*/
public Student findById(int id)
{
SqlSession sqlSession = null;
try{
sqlSession = MyBatisUtil.getSqlSession();
Student stu = sqlSession.selectOne(Student.class.getName()+".findById", id);
return stu;
}catch(Exception e){
e.printStackTrace();
throw e;
}finally{
MyBatisUtil.closeSqlSession();
}
} /*
* 查询所有学生
*/
public List<Student> findall()
{
SqlSession sqlSession = null;
try{
sqlSession = MyBatisUtil.getSqlSession();
return sqlSession.selectList(Student.class.getName()+".findall");
}catch(Exception e){
e.printStackTrace();
throw e;
}finally{
MyBatisUtil.closeSqlSession();
}
} /*
* 更新学生信息
*/
public void update(Student stu)
{
SqlSession sqlSession = null;
try{
sqlSession = MyBatisUtil.getSqlSession();
sqlSession.update(Student.class.getName()+".update", stu);
sqlSession.commit();
}catch(Exception e){
e.printStackTrace();
throw e;
}finally{
MyBatisUtil.closeSqlSession();
}
} /*
* 删除操作
*/
public void delete(Student stu)
{
SqlSession sqlSession = null;
try{
sqlSession = MyBatisUtil.getSqlSession();
sqlSession.update(Student.class.getName()+".delete", stu);
sqlSession.commit();
}catch(Exception e){
e.printStackTrace();
throw e;
}finally{
MyBatisUtil.closeSqlSession();
}
}
}

  上面增删改查操作案例需要关心的几个地方:

  (1)mapper文件的名称需要唯一,所以一般以操作的实体类全路径为名称空间

  (2)当实体属性名与表字段名不一样时,resultMap必须书写,当实体属性名与表字段名一样时,resultMap可选,resultMap的type代表参数的类型,可供parameterType,resultType直接名称引用,id作为唯一标识,可被resultMap使用

  (3)如果参数不是一个实体,只是一个普通参数,例如int,double,string,这里的#{中间的变量名可以随便写},不过建议用方法的形式参数

<select id="findById" parameterType="int" resultType="crudstudent">
select id,name,age,sex from student where id = #{id}
</select>

  (4)增删改查注意事项 :insert/update/delete标签只是一个模板,在做操作时,其实是以sql语句为核心的,即当做增/删/改时,insert/update/delete标签可通用,但是提倡做什么操作就使用什么标签,但做查询时只能使用select标签

  (5)parameterType:指入参类型,可引用resultMap的type属性

      resultType:指出参类型,可引用resultMap的id属性

      resultMap:mybatis会将查询出来的表记录和resultMap值对应的映射结果互相匹配

Mybatis的CRUD案例的更多相关文章

  1. 基于mybatis的CRUD

    u  基于Mybatis的CRUD u  掌握MyBatis的结果类型-resultMap和resultType u  掌握MyBatis的参数类型 u  掌握#和$两种语法 1      基于myb ...

  2. MyBatis:CRUD功能

    在前面已经自动生成了mapper和pojo,接下来我们实现mybatis的CRUD功能,先新建service.controller层的方法. 这里的sid是一个开源的id生成类,写完后,我们还需要在启 ...

  3. 【MyBatis】MyBatis实现CRUD操作

    1.实现基本CRUD功能 使用MyBatis对数据完整的操作,也就是CRUD功能的实现.根据之前的内容,要想实现CRUD,只需要进行映射文件的配置. 范例:修改EmpMapper.xml文件,实现CR ...

  4. SpringBoot 整合 Mybatis 进行CRUD测试开发

    今天来和大家分享下 Spring Boot 整合 MyBatis 的 CRUD 测试方法开发.因为 MyBaits 有两种开发形式,一种基于注解,一种基于 xml . SpringBoot配置文件也有 ...

  5. 05 Mybatis的CRUD操作和Mybatis连接池

    1.CRUD的含义 CRUD是指在做计算处理时的增加(Create).读取(Retrieve)(重新得到数据).更新(Update)和删除(Delete)几个单词的首字母简写.主要被用在描述软件系统中 ...

  6. 03 Mybatis:05.使用Mybatis完成CRUD

    mybatis框架:共四天 明确:我们在实际开发中,都是越简便越好,所以都是采用不写dao实现类的方式.不管使用XML还是注解配置. 第二天:mybatis基本使用 mybatis的单表crud操作 ...

  7. mybatis(CRUD)

    3.mybatis(CRUD) 有了mybatis,我们要对数据库进行增删改查只需要操作接口和mapper.xml文件,然后进行测试就可以了. 实例代码如下: 接口 public interface ...

  8. Mybatis配置、逆向工程自动生成代码(CRUD案例)

    目的: mybatis简介 搭建mybatis环境 基于SSM逆向工程的使用 Mybatis增删改查案例 mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及 ...

  9. 框架应用:Mybatis (一) - 入门案例

    ORM框架 在实际开发中,工程中本质的任务是从数据库中获取数据,然后对数据进行操作,又或者写入数据.开发时语言是大多是面向对象的工程语言,这个时候就必须进行工程语言和数据库连接语言的转换,也就是所谓的 ...

随机推荐

  1. 如何将ppt转换为高清图片?

    PPT2010版本直接提供了“另存为”图片的功能,但另存为后的图片清晰度不够,这是因为office提供的默认点每英寸点数 (dpi)为96dpi,也就是说图片的尺寸为960x720像素,通过注册表可以 ...

  2. win快捷键技巧

    只按Win键,这个所有人都知道,打开和关闭开始菜单. Win+E:打开我的电脑 Win+F:搜索文件 Win+D:显示桌面 Win+M:最小化所有窗口 Win + Pause:显示系统属性对话框 Wi ...

  3. electron-利用node开发桌面应用

    简介 web前端语言的发展有目共睹, 从原来的pc web, 到后来的mobile SAP, 再到 nodejs,全站工程师应运而生. js快速而且稳健的发展让人不得不重视, 相应的前端开发人员的地位 ...

  4. webBrowser 模拟登录

    webBrowser1.Document.GetElementById("txtUsername").InnerText = "sdsy";//fill nam ...

  5. ubuntu下vim配置(刷题和比赛两套)

    1. 平时刷题练习使用 "mswin.vim 插件提供windows下的编辑快捷键功能 source $VIMRUNTIME/mswin.vim behave mswin set nu se ...

  6. 改变PS1的颜色

    我们能够通过配置PS1变量使提示符成为彩色.在PS1中配置字符序列颜色的格式为:       \[\e[F;Bm\]       基本上是夹在 "\e["(转义开方括号)和 &qu ...

  7. React的setState如何实现同步处理数据

    React里面的使用setState来进行状态的更新,为了性能的提升,此时的过程是异步操作的,那我们如果在一个进程里面想同步操作改变了状态的值怎么办呢,这里需要使用回调函数了: this.setSta ...

  8. ubuntu下code::blocks编译运行一个简单的gtk+2.0项目

    在具体的操作之前,首先需要安装一些必要的软件.ubuntu下默认安装了gcc,不过缺少必要的Header file,可以在命令行中输入下面的指令安装build-essential套件:sudo apt ...

  9. getOwnPropertyNames() & keys()

    1.getOwnPropertyNames方法可以获得对象的所有属性名,并储存于一个数组当中. keys方法只能获取可遍历的属性名并储存于数组. 2.在完成notepad模块模拟的过程中使用了getO ...

  10. TDD中的单元测试写多少才够?

    测试驱动开发(TDD)已经是耳熟能详的名词,既然是测试驱动,那么测试用例代码就要写在开发代码的前面.但是如何写测试用例?写多少测试用例才够?我想大家在实际的操作过程都会产生这样的疑问. 3月15日,我 ...