Mybatis复杂映射映射文件
文章目录
- Mybatis_resultType&&resultMap属性
- Mybatis多条件查询方式一
- Mybatis多条件查询方式二
- Mybatis多条件查询方式三
- Mybatis模糊查询方式一
- Mybatis模糊查询方式二
- ${} 与 #{}区别
- Mybatis映射文件_添加用户:获取返回主键:方式一
- Mybatis映射文件_添加用户:获取返回主键:方式二
Mybatis_resultType&&resultMap属性
resultType属性:如果实体的属性名与表中字段名一致,将查询结果自动封装到实体类中
resultMap属性:如果实体的属性名与表中字段名不一致,可以使用ResutlMap实现手动封装到实体类中
编写UserMapper接口
/*** 查询User表中所有用户的方法* */ public List<User> findAllResultMap();
编写UserMapper.xml
<!--id : 标签的唯一标识--> <!--type: 封装后实体类型--> <resultMap id="userResultMap" type="com.code.entity.User"><!--手动配置映射关系--><!--id: 用来配置主键--><id property="id" column="id"></id><!-- result: 表中普通字段的封装--><result property="username" column="username"></result><result property="birthday" column="birthday"></result><result property="sex" column="sex"></result><result property="address" column="address"></result> </resultMap><!--查询所有用户--> <!--resultMap:手动配置实体属性与表中字段的映射关系,完成手动封装--> <select id="findAllResultMap" resultMap="userResultMap">select * from user </select>
编写测试代码
/*** ResutlMap 手动封装属性测试方法* @throws IOException*/ @Test public void findAllResultMap() throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();// 当前返回的 其实是基于UserMapper所产生的代理对象:底层:JDK动态代理 实际类型:proxyUserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> allResultMap = mapper.findAllResultMap();for (User user : allResultMap) {System.out.println(user);}sqlSession.close();}
Mybatis多条件查询方式一
根据id和username查询user表
方式一:使用 #{arg0}-#{argn} 或者 #{param1}-#{paramn} 获取参数
编写 userMapper接口
/*** 多条件连接查询方式一* */ public List<User> findByIdAndUsername1(int id, String username);
编写 UserMapper.xml
<!--多条件查询:方式一--> <select id="findByIdAndUsername1" resultMap="userResultMap" ><!-- select * from user where id = #{arg0} and username = #{arg1}-->select * from user where id = #{param1} and username = #{param2} </select>
编写测试代码
/*** 多条件查询方式一*/ @Test public void findByIdAndUsername1() throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();// 当前返回的 其实是基于UserMapper所产生的代理对象:底层:JDK动态代理 实际类型:proxyUserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> users = mapper.findByIdAndUsername1(1, "子慕");for (User user : users) {System.out.println(user);}sqlSession.close(); }
Mybatis多条件查询方式二
根据id和username查询user表
方式二:使用注解,引入 @Param() 注解获取参数
编写UserMapper接口
/*** 多条件查询方式二* @param id* @param username* @return*/ public List<User> findByIdAndUsername2(@Param("id") int id, @Param("username") String username);
编写UserMapper.xml
<!--多条件查询:方式二--> <select id="findByIdAndUsername2" resultMap="userResultMap" >select * from user where id = #{id} and username = #{username} </select>
编写测试代码
/*** 多条件查询:方式二* @throws IOException*/ @Test public void findByIdAndUsername2() throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();// 当前返回的 其实是基于UserMapper所产生的代理对象:底层:JDK动态代理 实际类型:proxyUserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> users = mapper.findByIdAndUsername2(1, "子慕");for (User user : users) {System.out.println(user);}sqlSession.close(); }
Mybatis多条件查询方式三
根据id和username查询user表
方式三:使用JavaBean对象传递参数
编写 UserMapper接口
/*** 条件查询方式三* @param user* @return*/ public List<User> findByIdAndUsername3(User user);
编写 UserMapper.xml
<!--多条件查询:方式三--> <select id="findByIdAndUsername3" resultMap="userResultMap" parameterType="com.code.entity.User">select * from user where id = #{id} and username = #{username} </select>
编写测试代码
/*** 多条件查询:方式三* @throws IOException*/ @Test public void test5() throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();// 当前返回的 其实是基于UserMapper所产生的代理对象:底层:JDK动态代理 实际类型:proxyUserMapper mapper = sqlSession.getMapper(UserMapper.class);User user1 = new User();user1.setId(1);user1.setUsername("子慕");List<User> users = mapper.findByIdAndUsername3(user1);for (User user : users) {System.out.println(user);}sqlSession.close(); }
Mybatis模糊查询方式一
根据username模糊查询user表
编写UserMapper接口
/*** 模糊查询方式一* @param username* @return*/ public List<User> findByUsername(String username);
编写UserMapper.xml映射
<!--模糊查询:方式一--> <select id="findByUsername" resultMap="userResultMap" parameterType="string"><!-- #{}在mybatis中是占位符,引用参数值的时候会自动添加单引号 -->select * from user where username like #{username} </select>
测试代码
/*** 模糊查询方式一* @throws IOException*/ @Test public void test6() throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();// 当前返回的 其实是基于UserMapper所产生的代理对象:底层:JDK动态代理 实际类型:proxyUserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> users = mapper.findByUsername("%子%");for (User user : users) {System.out.println(user);}sqlSession.commit();sqlSession.close(); }
Mybatis模糊查询方式二
根据username模糊查询user表
编写UserMapper接口
/*** 模糊查询方式二* @param username* @return*/ public List<User> findByUsername2(String username);
编写 UserMapper.xml 映射
<!--模糊查询:方式二--> <select id="findByUsername2" resultMap="userResultMap" parameterType="string"><!--parameterType是基本数据类型或者String的时候,${}里面的值只能写value${}: sql原样拼接-->select * from user where username like '${value}' </select>
编写测试代码
/*** 模糊查询 方式二* @throws IOException*/ @Test public void test7() throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();// 当前返回的 其实是基于UserMapper所产生的代理对象:底层:JDK动态代理 实际类型:proxyUserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> users = mapper.findByUsername2("%子慕%");for (User user : users) {System.out.println(user);}sqlSession.close(); }
${} 与 #{}区别
- #{} :表示一个占位符号:
- 通过 #{} 可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。
- #{} 可以接收简单类型值或pojo属性值。如果parameterType传输单个简单类型值, #{} 括号中名称随便写。
- ${} :表示拼接sql串:
- 通过 ${} 可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换,会出现sql注入问题。
- ${} 可以接收简单类型值或pojo属性值
- 如果parameterType传输单个简单类型值, ${} 括号中只能是value。
Mybatis映射文件_添加用户:获取返回主键:方式一
返回主键:向数据库插入一条记录后,希望能立即拿到这条记录在数据库中的主键值。
编写userMapper.
/*** 添加用户:获取返回主键:方式一* @param user*/ public void saveUser(User user);
编写userMapper.xml配置文件
<!--添加用户:获取返回主键:方式一--> <!--useGeneratedKeys: 声明返回主键keyProperty:把返回主键的值,封装到实体中的那个属性上 --> <insert id="saveUser" parameterType="user" useGeneratedKeys="true" keyProperty="id">insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address}) </insert>
useGeneratedKeys=“true” 声明返回主键,只适用于主键自增的数据库,mysql和sqlserver支持,oracle不行。
编写测试代码
/*** 添加用户返回主键:方式一* @throws IOException*/ @Test public void test8() throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();// 当前返回的 其实是基于UserMapper所产生的代理对象:底层:JDK动态代理 实际类型:proxyUserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = new User();user.setUsername("某冰冰");user.setBirthday(new Date());user.setAddress("北京昌平");user.setSex("女");System.out.println(user);mapper.saveUser(user);System.out.println(user);sqlSession.commit();sqlSession.close();}
Mybatis映射文件_添加用户:获取返回主键:方式二
编写 userMapper
/*** 添加用户:获取返回主键:方式二* @param user*/ public void saveUser2(User user);
编写 userMapper.xml
<!--添加用户:获取返回主键:方式二--> <insert id="saveUser2" parameterType="user" ><!--selectKey : 适用范围更广,支持所有类型的数据库order="AFTER" : 设置在sql语句执行前(后),执行此语句keyColumn="id" : 指定主键对应列名keyProperty="id":把返回主键的值,封装到实体中的那个属性上resultType="int":指定主键类型--><selectKey order="AFTER" keyColumn="id" keyProperty="id" resultType="int">SELECT LAST_INSERT_ID();</selectKey>insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address}) </insert>
编写测试代码
/*** 添加用户:返回主键方式二*/ @Test public void test9() throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();// 当前返回的 其实是基于UserMapper所产生的代理对象:底层:JDK动态代理 实际类型:proxyUserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = new User();user.setUsername("汤唯");user.setBirthday(new Date());user.setAddress("北京昌平");user.setSex("女");System.out.println(user);mapper.saveUser2(user);System.out.println(user);sqlSession.commit();sqlSession.close();}
Mybatis复杂映射映射文件相关推荐
- mapper命名规范_Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件
封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...
- MyBatis 入门到精通(二) SQL语句映射XML文件
MyBatis 真正强大之处就在这些映射语句,也就是它的魔力所在.对于它的强大功能,SQL 映射文件的配置却非常简单. 如果您比较SQL 映射文件配置与JDBC 代码,您很快可以发现,使用SQL 映射 ...
- myBatis的xml映射文件中传入list集合与数组做条件
mybatis的xml映射文件中传入list集合与数组做条件 1.传list集合参数 1.1sql映射: <select id="queryDeptListByBankLevelAnd ...
- Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件
封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...
- mysql映射mapper_这下够清楚了吧!详解Mybatis的Mapper映射文件
前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( 也很枯燥),由于篇幅实在过于冗长,我预计大家想看完得花上两段上 ...
- mybats实操-前期入门写法分析,SqlSessionFactory 获取SqlSession, 系统核心配置文件 mybatis-config.xml,SQL映射XML文件,MyBatis缓存
标题 偏向这一块的配置 打个预防针 尽量别用中文路径 尤其配置文件 1.导入数据库(smbms_db.sql) 下载maven并且配置环境变量 去IDEA配置好maven 以后maven项目直接用 m ...
- MyBatis学习之映射器Mapper(接口映射器+xml映射文件)
Table of Contents 01 MyBatis映射器: 1.1 接口映射器+xml映射器 1.2 接口映射器+注解 02 接口映射器+xml映射器 方式 2.1 mybatis配置文件 引 ...
- MyBatis Review——输入输出映射
一,输入映射 mybatis的输入映射通过parameterType指定,可以为简单类型,包装类型,hashmap类型. 1,简单类型 <select id="findUserByNa ...
- MyBatis的关联映射之 一对一(嵌套查询/嵌套结果)
关联映射概述 在实际的开发中,对数据库的操作常常会涉及多张表,这在面向对象中就涉及了对象与对象之间的关联关系 针对多表之间的操作, MyBatis 提供了关联映射,通过关联映射就可以很好地处理对象与对 ...
- 第4章 MyBatis的关联映射和缓存机制
目录/Contents 第4章 MyBatis的关联映射和缓存机制 学习目标 了解数据表之间的三种关联关系 了解对象之间的三种关系 熟悉关联关系中的嵌套查询和嵌套结果 掌握一对一关联映射 掌握一对多关 ...
最新文章
- 如何查看Linq to SQL运行时,实际执行的Sql语句
- 单独部署activemq-web-console (转载)
- 被清华免试录取的围棋天才,横扫60位围棋大师的最强AI,竟然都输给了高中生!?...
- KafkaConsumer.poll : Timeout must not be negative
- 接受吧,这世界充满潜规则
- 网络篇 使用Visio来画网络拓扑图01
- 用计算机关闭无线网络连接,我的DELL笔记本电脑无线网络已关闭,怎么进行再连接?...
- 关于地图矢量下载器的使用感受
- 开平方的快速算法(C程序)
- ubuntu安装英伟达显卡GT 540M驱动
- 现场总线技术笔记——3、通用串行端口的数据通信(RS232、RS485)
- 【元宇宙系列】元宇宙的创世居民——M 世代(Mateverse)
- 麻省理工学院公开课:计算机科学及编程导论
- PHP - 使用file_get_contents下载远程文件到本地
- NepCTF2021一些web题目的总结与复现
- 利用Python将一个Excel拆分为多个Excel
- telegram 常见问题
- [USACO18JAN] Lifeguards S (线段树:扫描线面积)
- Python学习——Python海龟制图中的文字
- 选择排序小程序(c语言)