mybatis映射文件mapper.xml的具体写法

Mapper映射文件是一个xml格式文件,必须遵循相应的dtd文件规范

在学习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.qbd.mapper.StudentMappers">
    <select id="findbyid" parameterType="Integer" resultMap="StudentResult">
        select *from student where id=#{id}
    </select>

    <select id="findbygradeid" parameterType="Integer" resultMap="StudentResult">
        select *from student where gid=#{gid}
    </select>

    <resultMap type="Student" id="StudentResult">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="age" column="age"/>
        <association property="address" column="addid" select="com.qbd.mapper.AddressMappers.findbyid">
        </association>
        <association property="grade" column="gid" select="com.qbd.mapper.GradeMappers.findbyid">
        </association>
    </resultMap>
</mapper>

然后再写dao的实现在写一个类,来实现dao的接口。但是这样在实现中需要这样写:

package com.qbd.service;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;

import com.qbd.mapper.StudentMappers;
import com.qbd.model.Student;
import com.qbd.util.SqlSessionFactoryUtil;

public class StudentService {
    private static Logger logge=Logger.getLogger(StudentService.class);
    public static void main(String[] args) {
        SqlSession sqlSession=SqlSessionFactoryUtil.getSqlSession();

        StudentMappers studentMappers=(StudentMappers)sqlSession.getMapper(StudentMappers.class);
        Student student=new Student();
        student.setName("22");
        student.setAge(2);
        int s=studentMappers.add(student);
        sqlSession.commit();
        if(s>0){
            logge.info("success");
            System.out.println("success");
        }

    }
}

来读取配置文件

另一种方法就是:

直接在mapper.xml中的这一部分写成dao<mapper namespace="com.qbd.mapper.StudentMappers">如下

<?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.qbd.ssm.dao.UserDao">
    <!-- 定义缓存  一般是一级缓存,如果用同一个sqlsession 那么相同查询直接会从缓存中查找
    <cache size="1024" flushInterval="60000" eviction="LRU" readOnly="false"></cache>
    -->
    <!-- 查找所有 -->
    <select id="find" parameterType="Map" resultMap="StudentResult">
        select * from user
        <where>
            <if test="uname!=null and uname!='' ">
                and uname like #{uname}
            </if>
        </where>
        <if test="start!=null and size!=null">
            limit #{start},#{size}
        </if>
    </select>

    <select id="getTotal" parameterType="Map" resultType="Long">
        select count(*) from user
        <where>
            <if test="uname!=null and uname!='' ">
                and uname like #{uname}
            </if>
        </where>
    </select>
    <!-- 按照用户名和密码查找 -->
    <select id="getUser" resultMap="StudentResult" parameterType="Map">
        select *from user where uname=#{uname} and upassword=#{upassword}
    </select>
    <!-- 删除 -->
    <delete id="delete" parameterType="Map">
        delete from user where uid=#{uid}
    </delete>
    <!-- 修改 -->
    <update id="update" parameterType="User">
        update user
        <set>
            <if test="uname!=null">
                 uname=#{uname},
            </if>
            <if test="upassword!=null">
                upassword=#{upassword},
            </if>
            <if test="upower!=null">
                upower=#{upower},
            </if>
        </set>
        where uid=#{uid}
    </update>
    <!-- 增加 -->
    <insert id="add" parameterType="User">
        insert into user values(null,#{uname},#{upassword},#{upower})
    </insert>
    <resultMap type="User" id="StudentResult">
        <id property="uid" column="uid"/>
        <result property="uname" column="uname"/>
        <result property="upassword" column="upassword"/>
    </resultMap>
</mapper>

那么就不用写dao的实现在service中就能掉用       mybatis默认会把mapper.xml映射为dao的实现

那么下面dao就能这样写:

package com.qbd.ssm.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Delete;

import com.qbd.ssm.model.User;

public interface UserDao {

    public List<User> getAll();
    public User getUser(User user);
    public int delete(User user);
    public int update(User user);
    public int add(User user);
    public List<User> find(Map<String,Object> map);
    public Long getTotal(Map<String,Object> map);
}

service这样写

package com.qbd.ssm.service;
import java.util.List;
import java.util.Map;
import com.qbd.ssm.model.User;
public interface UserService {

    public List<User> getAll();
    public User getUser(User user);
    public int delete(User user);
    public int update(User user);
    public int add(User user);
    public List<User> find(Map<String,Object> map);
    public Long getTotal(Map<String,Object> map);
}

service的实现:

package com.qbd.ssm.serviceimpl;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.qbd.ssm.dao.UserDao;
import com.qbd.ssm.model.User;
import com.qbd.ssm.service.UserService;

@Service("userService")
public class UserServiceImpl implements UserService {

    private UserDao userDao;

    public UserDao getUserDao() {
        return userDao;
    }

    @Resource
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public List<User> getAll() {
        // TODO Auto-generated method stub
        return userDao.getAll();
    }

    public User getUser(User user) {
        // TODO Auto-generated method stub
        return userDao.getUser(user);
    }

    public int delete(User user) {
        // TODO Auto-generated method stub
        return userDao.delete(user);
    }

    public int update(User user) {
        // TODO Auto-generated method stub
        return userDao.update(user);
    }

    public int add(User user) {
        // TODO Auto-generated method stub
        return userDao.add(user);
    }

    public List<User> find(Map<String, Object> map) {
        // TODO Auto-generated method stub
        return userDao.find(map);
    }

    public Long getTotal(Map<String, Object> map) {
        // TODO Auto-generated method stub
        return userDao.getTotal(map);
    }
}

在这里面userDao不能写错,spring会按照name进行注入

到此这篇关于mybatis映射文件mapper.xml的具体写法的文章就介绍到这了,更多相关mybatis映射文件mapper.xml内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • mybatis如何通过接口查找对应的mapper.xml及方法执行详解

    本文主要介绍的是关于mybatis通过接口查找对应mapper.xml及方法执行的相关内容,下面话不多说,来看看详细的介绍: 在使用mybatis的时候,有一种方式是 BookMapper bookMapper = SqlSession().getMapper(BookMapper.class) 获取接口,然后调用接口的方法.只要方法名和对应的mapper.xml中的id名字相同,就可以执行sql. 那么接口是如何与mapper.xml对应的呢? 首先看下,在getMapper()方法是如何操作

  • 详解mybatis-plus的 mapper.xml 路径配置的坑

    mybatis-plus今天遇到一个问题,就是mybatis 没有读取到mapper.xml 文件. 特此记录一下,问题如下: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.husy.mapper.SystemUserMapper.findUserByName at com.baomidou.mybatisplus.core.override.MybatisMapperMe

  • MyBatis-Plus通过插件将数据库表生成Entiry,Mapper.xml,Mapper.class的方式

    创建maven项目,修改pom.xml文件,如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mave

  • mybatis的mapper.xml中resultMap标签的使用详解

    1.前言 最近博主在做一个ssm框架的共享汽车管理系统,其中,数据库字段设计的有下划线方式,a_username,然后在写mapper.xml里面的sql语句的时候,一直出现查询语句查询的值为null的情况.或者是resultMap标签和驼峰规则不太明白的同学,可以看这里. 于是顺便梳理一下. 2.关于resultMap 2.1.什么是resultMap? 在mybatis中有一个resultMap标签,它是为了映射select查询出来结果的集合,其主要作用是将实体类中的字段与数据库表中的字段进

  • mybatis映射文件mapper.xml的具体写法

    Mapper映射文件是一个xml格式文件,必须遵循相应的dtd文件规范 在学习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&q

  • 解决Mybatis映射文件mapper.xml中的注释问题

    目录 Mybatis映射文件mapper.xml的注释问题 报错信息 解决办法 mapper.xml文件中的注释 注释方式 ‘无效的列索引’bug和解决 小结一下 Mybatis映射文件mapper.xml的注释问题 从昨天夜晚9点到今天中午,一直被项目bug所困惑,中间这段时间一直未解决这个问题,也咨询很多群里大佬,也未能解决 有的说是我代码写的有问题,如mapper文件中没有写入参数类型parameterType,也有说是我项目结构目录构建出错,按照他们的建议进行修正,也是未尽人意,启动项目

  • Mybatis映射文件规则实例详解

    目录 1.ORM概念 2.映射文件命名规则 3.Mybatis的两个一致 4.总结创建mybatis的步骤 补充:MyBatis_自定义结果映射规则 总结 在说明映射文件规则之前,先来回顾一下ORM相关概念. 1.ORM概念 ORM(Object Relationship Mapping)对象关系映射 对象:Java的实体类对象 关系:关系型数据库 映射:二者之间的对应关系 字段名和属性名要一一对应才可以,它们的名字要相同,底层调用的是反射机制 Java概念 数据库概念 属性 列,字段 类 表

  • Mybatis映射文件实例详解

     一.输入映射 parameterType 指定输入参数的Java类型,可以使用别名或者类的全限定名.它可以接收简单类型.POJO.HashMap. 1.传递简单类型 根据用户ID查询用户信息: <select id="findUserById" parameterType="int" resultType="com.itheima.mybatis.po.User"> SELECT * FROM USER WHERE id =#{id

  • MyBatis映射文件resultMap元素中使用多个association的方法

    现在有一张订单表t_stockorder,其拥有id.code.client_id.merchandise_id.merchandise_number.order_date.operator_id这些字段,其中client_id关联t_client表中code字段,merchandise_id关联t_merchandise表的code字段,operator_id关联t_employee表的code字段. 现在要通过SQL语句将订单表中t_stockorder的数据全部查询出来,SQL语句如下所示

  • mybatis 映射文件中if标签判断字符串相等的两种方式

    mybatis 映射文件中,if标签判断字符串相等,两种方式: 因为mybatis映射文件,是使用的ognl表达式,所以在判断字符串sex变量是否是字符串Y的时候, <if test="sex=='Y'.toString()"> <if test = 'sex== "Y"'> 注意: 不能使用 <if test="sex=='Y'"> and 1=1 </if> 因为mybatis会把'Y'解析为字

  • mybatis中映射文件(mapper)中的使用规则

    目录 一.增删改 1.增加 2.删除 3.更新 二.传入参数处理 1.单个参数 2.多个参数 3.参数中有Collection(List.Set) 类型或者是数组 4.参数封装成数据模型 5.parameterType 配置 参数 三.查询 1.模糊查询 2.#{}与${}的区别 3.返回属性为resultType 4.返回属性为resultMap 一.增删改 1.增加 <!-- 添加用户--> <insert id="saveUser" parameterType=

  • MyBatis映射器mapper快速入门教程

    目录 通用mapper简介 通用mapper快速入门(文档) 添加依赖 和Spring集成 XML 配置 1.使用 MapperScannerConfigurer 2.XML配置使用 Configuration 实体类映射 创建Mapper接口 通用mapper简介 通用 Mapper 是一个可以实现任意 MyBatis 通用方法的框架,项目提供了常规的增删改查操作以及Example相关的单表操作,与mybatisplus相似,对mybatis制作增强不做修改.为什么要用通用mapper?我们这

  • mybatis中的mapper.xml使用循环语句

    目录 mapper.xml使用循环语句 mapper.java,传的参数是map mapper.xml 参数,数组,list都行 mybatis xml循环语句 首先创建DAO方法 除了批量插入,使用SQL in查询多个用户时也会使用 mapper.xml使用循环语句 mapper.java,传的参数是map List<实体类> getList(Map<String,Object> paraMap); mapper.xml <!--select:对应sql的select语句,

  • MyBatis的模糊查询mapper.xml的写法讲解

    目录 MyBatis模糊查询mapper.xml的写法 1.直接传参 2.针对MySQL数据库的语句 3.适用于所有数据库的则采用MyBatis的bind元素 MyBatis在xml中模糊查询的常用的3种方式 MyBatis模糊查询mapper.xml的写法 模糊查询语句不建议使用${}的方式,还是建议采用MyBatis自带的#{}方式,#{}是预加载的方式运行的,比较安全,${}方式可以用但是有SQL注入的风险!!! 1.直接传参 在controller类中 String id = "%&qu

随机推荐