UserMapper.java

package cn.itcast.mybatis.mapper;import java.util.List;import cn.itcast.mybatis.po.User;
import cn.itcast.mybatis.po.UserQueryVo;public interface UserMapper {//根据用户id查询用户信息public User findUserById(int id) throws Exception;//根据用户名称  查询用户信息public List<User> findUserByName(String username) throws Exception;//自定义查询条件查询用户信息public List<User> findUserList(UserQueryVo userQueryVo) throws Exception;//查询用户,使用resultMap进行映射public List<User> findUserListResultMap(UserQueryVo userQueryVo)throws Exception;//查询用户,返回记录个数public int findUserCount(UserQueryVo userQueryVo) throws Exception;//插入用户public void insertUser(User user)throws Exception;//删除用户public void deleteUser(int id) throws Exception;//修改用户public void updateUser(User user) throws Exception;}

UserMapper.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指定为mapper接口的全限定名-->
<mapper namespace="cn.itcast.mybatis.mapper.UserMapper">
<!-- 在mapper.xml文件中配置很多的sql语句,执行每个sql语句时,封装为MappedStatement对象
mapper.xml以statement为单位管理sql语句--><!-- 将用户查询条件定义为sql片段建议对单表的查询条件单独抽取sql片段,提高公用性注意:不要将where标签放在sql片段(公用性差)--><sql id="query_user_where"><!-- 如果 userQueryVo中传入查询条件,再进行sql拼接--><!-- test中userCustom.username表示从userQueryVo读取属性值--><if test="userCustom!=null"><if test="userCustom.username!=null and userCustom.username!=''">and username like '%${userCustom.username}%'</if><if test="userCustom.sex!=null and userCustom.sex!=''">and sex = #{userCustom.sex}</if><!-- 根据id集合查询用户信息 --><!-- 最终拼接的效果:SELECT id ,username ,birthday  FROM USER WHERE username LIKE '%小明%'       AND id IN (开始          16,22,25循环             )结束collection:集合的属性,userQueryVo的ids属性open:开始循环拼接的串close:结束循环拼接的串item:每次循环取到的对象separator:每两次循环中间拼接的串--><foreach collection="ids" open=" AND id IN ( " close=")" item="id" separator=",">#{id}    <!-- 16,循环 --></foreach><!-- 如果拼接 SELECT id ,username ,birthday  FROM USER WHERE username LIKE '%小明%' AND (开始                id = 16 OR id = 22 OR id = 25循环             )结束 <foreach collection="ids" open=" AND ( " close=")" item="id" separator="OR">id = #{id}   <!--  id = 16 ,循环 --></foreach>--><!-- 还有很的查询条件 --></if></sql><!-- 定义resultMap,列名和属性名映射配置id:mapper.xml中的唯一标识 type:最终要映射的pojo类型--><resultMap id="userListResultMap" type="user" ><!-- 列名id_,username_,birthday_id:要映射结果集(查询的结果select id id_,username username_,birthday birthday_)的唯 一标识 ,称为主键column:结果集(查询的结果)的列名property:type指定的哪个属性中--><id column="id_" property="id"/><!-- result就是普通列的映射配置 --><result column="username_" property="username"/><result column="birthday_" property="birthday"/></resultMap><!-- 根据id查询用户信息 --><!-- id:唯一标识 一个statement#{}:表示 一个占位符,如果#{}中传入简单类型的参数,#{}中的名称随意parameterType:输入 参数的类型,通过#{}接收parameterType输入 的参数resultType:输出结果 类型,不管返回是多条还是单条,指定单条记录映射的pojo类型--><select id="findUserById" parameterType="int" resultType="user">SELECT * FROM USER WHERE id= #{id}</select><!-- 根据用户名称查询用户信息,可能返回多条${}:表示sql的拼接,通过${}接收参数,将参数的内容不加任何修饰拼接在sql中。--><select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User">select * from user where username like '%${value}%'</select><!-- 自定义查询条件查询用户的信息parameterType:指定包装类型%${userCustom.username}%:userCustom是userQueryVo中的属性,通过OGNL获取属性的值--><select id="findUserList" parameterType="userQueryVo" resultType="user">select id,username,birthday from user<!-- where标签相当 于where关键字,可以自动去除第一个and --><where><!-- 引用sql片段,如果sql片段和引用处不在同一个mapper必须前边加namespace --><include refid="query_user_where"></include><!-- 下边还有很其它的条件 --><!-- <include refid="其它的sql片段"></include> --></where></select><!-- 使用resultMap作结果映射resultMap:如果引用resultMap的位置和resultMap的定义在同一个mapper.xml,直接使用resultMap的id,如果不在同一个mapper.xml要在resultMap的id前边加namespace--><select id="findUserListResultMap" parameterType="userQueryVo" resultMap="userListResultMap">select id id_,username username_,birthday birthday_ from user where username like '%${userCustom.username}%'</select><!-- 输出简单类型功能:自定义查询条件,返回查询记录个数,通常用于实现 查询分页--><select id="findUserCount" parameterType="userQueryVo" resultType="int">select count(*) from user <!-- where标签相当 于where关键字,可以自动去除第一个and --><where><!-- 引用sql片段,如果sql片段和引用处不在同一个mapper必须前边加namespace --><include refid="query_user_where"></include><!-- 下边还有很其它的条件 --><!-- <include refid="其它的sql片段"></include> --></where></select><!-- 添加用户parameterType:输入 参数的类型,User对象 包括 username,birthday,sex,address#{}接收pojo数据,可以使用OGNL解析出pojo的属性值#{username}表示从parameterType中获取pojo的属性值selectKey:用于进行主键返回,定义了获取主键值的sqlorder:设置selectKey中sql执行的顺序,相对于insert语句来说keyProperty:将主键值设置到哪个属性resultType:select LAST_INSERT_ID()的结果 类型--><insert id="insertUser" parameterType="cn.itcast.mybatis.po.User"><selectKey keyProperty="id" order="AFTER" resultType="int">select LAST_INSERT_ID()</selectKey>INSERT INTO USER(username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address})</insert><!-- mysql的uuid生成主键 --><!-- <insert id="insertUser" parameterType="cn.itcast.mybatis.po.User"><selectKey keyProperty="id" order="BEFORE" resultType="string">select uuid()</selectKey>INSERT INTO USER(id,username,birthday,sex,address) VALUES(#{id},#{username},#{birthday},#{sex},#{address})</insert> --><!-- oracle在执行insert之前执行select 序列.nextval() from dual取出序列最大值,将值设置到user对象 的id属性--><!-- <insert id="insertUser" parameterType="cn.itcast.mybatis.po.User"><selectKey keyProperty="id" order="BEFORE" resultType="int">select 序列.nextval() from dual</selectKey>INSERT INTO USER(id,username,birthday,sex,address) VALUES(#{id},#{username},#{birthday},#{sex},#{address})</insert> --><!-- 用户删除  --><delete id="deleteUser" parameterType="int">delete from user where id=#{id}</delete><!-- 用户更新 要求:传入的user对象中包括 id属性值--><update id="updateUser" parameterType="cn.itcast.mybatis.po.User">update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}</update></mapper>

测试代码:

package cn.itcast.mybatis.mapper;import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;import cn.itcast.mybatis.po.User;
import cn.itcast.mybatis.po.UserCustom;
import cn.itcast.mybatis.po.UserQueryVo;public class UserMapperTest {// 会话工厂private SqlSessionFactory sqlSessionFactory;// 创建工厂@Beforepublic void init() throws IOException {// 配置文件(SqlMapConfig.xml)String resource = "SqlMapConfig.xml";// 加载配置文件到输入 流InputStream inputStream = Resources.getResourceAsStream(resource);// 创建会话工厂sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);}@Testpublic void testFindUserById() throws Exception {SqlSession sqlSession = sqlSessionFactory.openSession();// 创建代理对象,接口实现类UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user = userMapper.findUserById(1);System.out.println(user);}@Testpublic void testFindUserByUsername() throws Exception {SqlSession sqlSession = sqlSessionFactory.openSession();// 创建代理对象,接口实现类UserMapper userMapper = sqlSession.getMapper(UserMapper.class);List<User> list = userMapper.findUserByName("小明");System.out.println(list);}@Testpublic void testInsertUser() throws Exception {SqlSession sqlSession = sqlSessionFactory.openSession();// 创建代理对象,接口实现类UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 插入对象User user = new User();user.setUsername("李奎");userMapper.insertUser(user);sqlSession.commit();sqlSession.close();}// 通过包装类型查询用户信息@Testpublic void testFindUserList() throws Exception {SqlSession sqlSession = sqlSessionFactory.openSession();// 创建代理对象,接口实现类UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 构造查询条件UserQueryVo userQueryVo = new UserQueryVo();UserCustom userCustom = new UserCustom();userCustom.setUsername("小明");userCustom.setSex("1");userQueryVo.setUserCustom(userCustom);//id集合List<Integer> ids  = new ArrayList<Integer>();ids.add(16);ids.add(22);userQueryVo.setIds(ids);List<User> list = userMapper.findUserList(userQueryVo);sqlSession.close();System.out.println(list);}// 使用resultMap进行结果映射 @Testpublic void testFindUserListResultMap() throws Exception {SqlSession sqlSession = sqlSessionFactory.openSession();// 创建代理对象,接口实现类UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 构造查询条件UserQueryVo userQueryVo = new UserQueryVo();UserCustom userCustom = new UserCustom();userCustom.setUsername("小明");userQueryVo.setUserCustom(userCustom);List<User> list = userMapper.findUserListResultMap(userQueryVo);sqlSession.close();System.out.println(list);}// 返回查询记录总数@Testpublic void testFindUserCount() throws Exception {SqlSession sqlSession = sqlSessionFactory.openSession();// 创建代理对象,接口实现类UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 构造查询条件UserQueryVo userQueryVo = new UserQueryVo();UserCustom userCustom = new UserCustom();userCustom.setUsername("小明");userQueryVo.setUserCustom(userCustom);int count = userMapper.findUserCount(userQueryVo);sqlSession.close();System.out.println(count);}}

UserQueryVo.java

package cn.itcast.mybatis.po;import java.util.List;/**
包装类型,将来在使用时从页面传到controller、service、mapper </p>*/
public class UserQueryVo {//用户信息private User user;//自定义user的扩展对象private UserCustom userCustom;//用户id集合private List<Integer> ids;public User getUser() {return user;}public void setUser(User user) {this.user = user;}public UserCustom getUserCustom() {return userCustom;}public void setUserCustom(UserCustom userCustom) {this.userCustom = userCustom;}public List<Integer> getIds() {return ids;}public void setIds(List<Integer> ids) {this.ids = ids;}}

转载于:https://www.cnblogs.com/yaowen/p/4869990.html

mybatis15 mapper方式 代码相关推荐

  1. SpringAOP 注解方式代码示例

    SpringAOP 注解方式代码示例 package com.zf.aspect;import org.aspectj.lang.JoinPoint; import org.aspectj.lang. ...

  2. mybatis教程--原始方式和mapper方式开发dao详解

    mybatis开发dao的两种方式 一.原始的dao开发方式 所谓的原始的dao的开发方式,其实就是和hibernate的开发方式类似的,需要dao的接口和dao的实现类,这个就是原始的开发方式,而m ...

  3. 【硅谷课堂】腾讯云点播WEB上传方式代码(第二种方式)

    下载依赖 npm i vod-js-sdk-v6 前端 /vod/course/Video/Form.vue <template><!-- 添加和修改课时表单 --><e ...

  4. 【Groovy】map 集合 ( 根据 Key 获取 map 集合中对应的值 | map.Key 方式 | map.‘Key’ 方式 | map[‘Key’] 方式 | 代码示例 )

    文章目录 一.根据 Key 获取 map 集合中对应的值 1.通过 map.Key 方式获取 map 集合中的值 Value 2.通过 map.'Key' 方式获取 map 集合中的值 Value 3 ...

  5. Beetlsql自定义生成entity,mapper,md代码

    三个模板文件 mapper.btl package ${package}; import org.beetl.sql.core.annotatoin.*; import org.beetl.sql.c ...

  6. md文件生成Java代码_Beetlsql自定义生成entity,mapper,md代码

    packagecom.github.tungss.auth;import org.beetl.sql.core.*;import org.beetl.sql.core.db.*;import org. ...

  7. java源代码实例倒计时_Java倒计时三种实现方式代码实例

    写完js倒计时,突然想用java实现倒计时,写了三种实现方式 一:设置时长的倒计时: 二:设置时间戳的倒计时: 三:使用java.util.Timer类实现的时间戳倒计时 代码如下: package ...

  8. Spring Boot 中使用MyBatis Mapper方式(xml)

    1 移动原有的**Mapper.xml格式的文件到Resource静态资源文件 2 在Application.java 中添加Mapper扫描  @MapperScan("com.dao&q ...

  9. c语言实现自动打开文件夹,c语言打开文件(c语言文件打开方式代码)

    1.2 文件的输入输出函数 键盘.显示器.打印机.磁盘驱动器等逻辑设备, 其输入输出都可以通过文件管理的方法来完成.而在编程时使用最多的要算 是磁盘文件, 因此. { printf("File ope ...

最新文章

  1. html调用百度地图语音播报,实现百度地图导航演示的语音播放功能
  2. MATLAB 数据分析方法(第2版)1.3 MATLAB基本语法
  3. OpenCV3.4.1+vs2017安装及配置
  4. 最常用的两种C++序列化方案的使用心得(protobuf和boost serialization)
  5. 移动端页面0.5px border的实现
  6. javascript和python的关系_JavaScript是否越来越像Python?
  7. 7. 从数据库获取数据- 从零开始学Laravel
  8. 2021-08-01
  9. 利用JS实现QQ空间自动点赞
  10. 2011-2017年中国各地政府BIM相关标准政策汇总
  11. 淘宝运营之:什么是浏览量(PV)什么是流量、访客数(UV)
  12. 全球各个国家名的英文
  13. android mic切换_android手机的Mic对声音的感知 .
  14. centos8安装之centos8.3 制作U盘启动 避坑指南
  15. HTTP协议与Get和Post的区别
  16. 浙江省2013计算机教师招聘试题,2013年浙江省教师招聘考试真题(教育基础知识)省统考中学...
  17. 图形图像文件格式分类
  18. 美颜sdk磨皮算法代码解析
  19. Cannot load excludes configuration file /WEB-INF/decorators.xml as specified in sitemesh.xml or
  20. angular2+中使用mock模拟后台

热门文章

  1. idea打印sql的插件_[Mybatis]-[基础支持层]-插件-自定义简易SQL打印插件
  2. python规模_python语言计算生态规模有多大?
  3. qt 雷达扫描障碍物_自动驾驶系统入门(五) - 激光雷达
  4. python目标检测答案_你好,这里有一份2019年目标检测指南
  5. 电路板上的插头怎么拔下来_中国连城 | 接插件在电路板上的作用及它的种类介绍...
  6. 地理信息系统论坛_高端论坛西南交通大学朱庆教授:应急测绘智能服务关键技术及重大应用...
  7. 联想服务器开机显示系统恢复选项,联想电脑win10系统开机时按哪个键进入一键还原模式...
  8. php经典面试题时间,php 经典面试题及答案
  9. thinkphp日志泄漏漏洞_ThinkPHP框架任意代码执行漏洞的利用及其修复方法
  10. Java 中removelinked_Java LinkedHashSet remove()用法及代码示例