MyBatis存储过程、MyBatis分页、MyBatis一对多增删改查操作

一、用到的实体类如下:

Student.java

package com.company.entity;
import java.io.Serializable;
import java.util.Date;
public class Student implements Serializable{
private static final long serialVersionUID = 1L;
private int id;
private String name;
private Date birth;
private Group group;
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
@Override
public String toString() {
return "Student [birth=" + birth + ", group=" + group + ", id=" + id
+ ", name=" + name + "]";
}
}

Group.Java

package com.company.entity;
import java.util.List;
public class Group {
private int id;
private String name;
private String position;
private List<Student> students;
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
@Override
public String toString() {
return "Group [id=" + id + ", name=" + name + ", position=" + position
+ "]";
}
}

二、实体对应的表结构

student表:

create table student(
id int primary key,
name varchar(20),
birth date,
group_id int references g_group(g_id));

g_group表:

create table g_group(
g_id int primary key,
g_name varchar(20),
g_position varchar(30));

sequence:

create sequence student_id_sequence;
create sequence group_id_sequence;

三、Student和Group的映射文件如下,你可以在映射文件中找到,关于MyBatis的增删改查操作,MyBatis调用存储过程,MyBatis分页以及MyBatis对一对一、多对多的处理

xml文件中都标有注释,看的时候配合下面的具体实现看,虽然有点乱

student.xml

<?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.company.dao.IStudentDAO">
<!-- mybatis缓存 -->
<cache eviction="LRU" flushInterval="600000" size="1024" readOnly="false" />
<!-- sql标签用来定义一些可以被重用的sql语句或字段或片段等 -->
<sql id="studentColumns">select id,name,birth from student</sql>
<!-- 此处获得多对一的关系 ,但就单条记录而言却是一对一的关系,所以一对一的写法跟此相同-->
<resultMap type="Student" id="getStudentAndGroup" >
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="birth" property="birth"/>
<association property="group" column="group_id" javaType="Group">
<id column="g_id" property="id"/>
<result column="g_name" property="name"/>
<result column="g_position" property="position"/>
</association>
</resultMap>
<select id="many2one" resultMap="getStudentAndGroup" parameterType="int" >
select s.id,s.name,s.birth,s.group_id,g.g_id,g.g_name,g.g_position
from student s
left join g_group g on s.group_id = g.g_id
where s.id = #{id}
</select>
<!-- 意图是获得一个学生,并且获得该学生所属的组,跟上面的意思差不多 ,用association的select属性-->
<!-- 于上面的相比个人感觉上面的效率要高些,因为上面只有一条sql语句 -->
<resultMap type="Student" id="getStudentAndGroupUseSelectMap">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="birth" property="birth"/>
<association property="group" column="group_id" javaType="Group" select="selectGroup" />
</resultMap>
<select id="getStudentAndGroupUseSelect" resultMap="getStudentAndGroupUseSelectMap" parameterType="int">
select *
from student
where id = #{id}
</select>
<select id="selectGroup" resultType="Group" parameterType="int" flushCache="false" useCache="true"><!-- 此处实用缓存 -->
select g_id as id, g_name as name, g_position as position
from g_group
where g_id = #{id}
</select>
<!-- 动态sql语句 的测试dynamic sql-->
<select id="getStudentBySomeCondition" parameterType="Student" resultType="Student">
select *
from student
<where>
<if test="id != null">
id>2
</if>
<if test="name != null">
and name like '%g%'
</if>
</where>
</select>
<!-- MyBatis调用存储过程 -->
<resultMap type="Student" id="studentMap">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="birth" property="birth"/>
</resultMap>
<select id="getAllUser" statementType="CALLABLE" >
{call get_all_student(#{students ,mode=OUT, jdbcType=CURSOR, javaType=ResultSet, resultMap=studentMap} )}
</select>
<!-- MyBatis向student表中插入一条数据 -->
<insert id="add" parameterType="Student" keyColumn="id">
<selectKey keyProperty="id" order="BEFORE" resultType="int">
select stu_id_sequence.nextval from dual
</selectKey>
insert into student(id,name,birth) values(#{id},#{name},#{birth})
</insert>
<!-- 根据id获得学生的信息 -->
<select id="getById" parameterType="int" resultType="Student">
<include refid="studentColumns"/> where id=#{id}
</select>
<!-- 此处的实现方法是一个分页的原型,请查看IStudentDAOImpl.java中的调用方法 -->
<select id="getAllStudent" resultMap="studentMap">
<include refid="studentColumns"/> order by id<!--此处是引用了上面预定义好的sql语句-->
</select>
</mapper> 

以上所述是小编给大家介绍的MyBatis存储过程、MyBatis分页、MyBatis一对多增删改查操作,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • 简述Mybatis增删改查实例代码

    编写一个简单的mybatis进行插入数据的实例 1 数据库建表 其中建表dob=Date of Birth 的意思 create table students (stud_id number primary key, name varchar2(20), email varchar2(20), dob date ); Oracle数据库中出现表已创建,则表示创建成功,如果出现名称已被使用,则可在建表之前进行删除操作:drop table students;或者进行级联删除drop table s

  • mybatis实现增删改查_动力节点Java学院整理

    所需要用到的其他工具或技术: 项目管理工具 : Maven 测试运行工具 : Junit 数据库 : Derby Maven Dependencies: <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.7</version> </dependen

  • Mybatis开发环境搭建实现数据的增删改查功能

    config.xml的配置 <?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> <!-- 拿到数据库

  • mybatis教程之增删改查_动力节点Java学院整理

    select 一个select 元素非常简单.例如: <!-- 查询学生,根据id --> <select id="getStudent" parameterType="String" resultMap="studentResultMap"> SELECT ST.STUDENT_ID, ST.STUDENT_NAME, ST.STUDENT_SEX, ST.STUDENT_BIRTHDAY, ST.CLASS_ID FR

  • MyBatis存储过程、MyBatis分页、MyBatis一对多增删改查操作

    一.用到的实体类如下: Student.java package com.company.entity; import java.io.Serializable; import java.util.Date; public class Student implements Serializable{ private static final long serialVersionUID = 1L; private int id; private String name; private Date

  • Spring boot + mybatis + Vue.js + ElementUI 实现数据的增删改查实例代码(二)

    在上篇文章给大家介绍了Spring boot + mybatis + Vue.js + ElementUI 实现数据的增删改查实例代码(一),接下来我们添加分页相关的依赖,时间紧张,直接上代码了,贴上我的pom文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=

  • Spring boot + mybatis + Vue.js + ElementUI 实现数据的增删改查实例代码(一)

    环境搭建 spring boot的简介 以往我们开发时用到spring总是避免不了繁琐的配置,例如我们要配置一个数据库连接,可能需要以下几步: 1.编写jdbc.properties配置文件: 2.创建spring的配置文件,加入spring配置文件前缀.配置数据库连接信息以及sqlsessionFactory等等: 3.还要在web.xml文件中加入spring的监听. springboot的出现大大简化了项目的搭建过程(spring配置以及maven配置),让我们专注于应用功能的开发,而不是

  • mybatis generator 配置 反向生成Entity简单增删改查(推荐)

    mybatis generator 配置 反向生成Entity简单增删改查实例代码如下所示: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd

  • mybatis通过if语句实现增删改查操作

    有时候为了简化我们的代码. 1 举个例子 Student类: @Data public class Student { private Integer id; private Integer age; private Integer sno; } 有时候我们想通过age这个属性获取Student对象 有时候我们也想通过sno这个属性获取Student对象 难道我们在DAO层写两个接口? 比如这样子? Student getStudentByAge(Int age); Student getStu

  • Mybatis入门指南之实现对数据库增删改查

    目录 前言 MyBatis 简介 优点 缺点 搭建第一个Mybatis程序 新建项目. 引入pom.xml依赖. 新建数据库数据表. 新建Student实体类. 配置Mybatis的配置文件. 创建StudentMapper.xml文件. 在config.xml中加入mapper. 调用Mybitis原生接口进行操作 增 删 改 查 总结 前言 我们关于Spring和Spring MVC的学习也有一段时间了,都还没有进行过数据库的操作,而在实际项目中数据库是必不可少的部分,所以我们接下来将来学习

  • mybatis3使用@Select等注解实现增删改查操作

    1.需要的jar包 2.目录树 3.具体代码 一.需要的jar包 第一个:mybatis的jar包 第二个:mysql数据的驱动 二.目录树 三.具体代码 使用框架,配置文件先行! conf.xml:(配置 登录数据库,映射文件) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN

  • 使用IDEA对Oracle数据库进行简单增删改查操作

    1.1 Java中的数据存储技术 在Java中,数据库存取技术可分为如下几类: 1.JDBC直接访问数据库 2.JDO(Java Data Object)是Java对象持久化的新的规范,也是一个用于存取某种数据仓库中的对象的标准化API. 3.第三方O/R 比如Hibernate,Mybatis等 JDBC是java访问数据库的基石,JDO.Hibernate.MyBatis,JDO,Hibernate.MyBatyis等只是更好的封装的JDBC. 最近用idea连接Oracle数据库 并且实现

  • Java语言实现对MySql数据库中数据的增删改查操作的代码

    简单说操作的步骤: 1.连接数据库 2.将SQL语句发送到数据库 3.执行SQL语句 这里举个例子: 在一个数据库中有个students表,表中有学号(Id),姓名(Name),性别(Sex),地址(Address),电话(Phone),专业(Dept). 这里把这个表写成一个学生信息类(Info_student) (请先确保看了例子说明,不然代码有的地方可能看不明白) 要实现操纵我们首先得连接数据库,因为每个操作都要进行连接操作,所以我们直接把连接的操作封装在一个类中,需要连接的时候直接调用可

随机推荐