首页 > 代码库 > MyBatis的一系列问题的处理(遍历Map集合和智能标签和属性和字段不一样的解决办法)
MyBatis的一系列问题的处理(遍历Map集合和智能标签和属性和字段不一样的解决办法)
一、字段名与属性名(数据库的名字)不一样怎么办?
方案一:在小配置中配置一个resultMapper
<!--方案一:resultMapper 字段名与属性名不一致 -->
<resultMap type="Student" id="StudentMapper"> <result column="stuname2" property="stuname"/> </resultMap> <!-- 查询所有 --> <select id="findAll" resultMap="StudentMapper"> select * from student </select>
方案二:在小配置中的查询语句用as
<!-- 方案二:as别名的方式 --> <select id="findAll" resultType="Student"> select stuname2 as stuname from student </select>
二、Mapper动态代理剔除实现类
第一步改动的地方是小配置的<mapper namespace="cn.happy.dao.IStudentDAO">写到接口
<?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="cn.happy.dao.IStudentDAO"> <!-- 方案二:as别名的方式 --> <select id="findAll" resultType="Student"> select stuname2 as stuname from student </select> </mapper>
第二步是在测试类调用接口的时候用getMapper获取一个接口实现类
public class MyTest { IStudentDAO dao; @Before public void initData() throws IOException{ SqlSession session = MybatisUtil.getSession(); //动态踢出实现类 //首先要改StudentDAO.xml改成<mapper namespace="cn.happy.dao.IStudentDAO"> dao=session.getMapper(IStudentDAO.class); } /** * selectALl学生 * @throws IOException */ @Test public void findAll() throws IOException{ List<Student> list = dao.findAll(); for (Student student : list) { System.out.println(student.getStuname()); /*System.out.println(student.getStuage());*/ } } }
三、用Map集合取值和使用索引号
(一)用map集合获取值
1在接口IStudentDAO定制一个方法
//多条件查询封装成map public List<Student> findStudentMore(Map<String, Object> map);
2在小配置中id=“findStudentMore”要和接口的方法法名要一样
<!-- 多条件查询--> <select id="findStudentMore" resultType="Student"> <!-- mysql数据库 --> <!-- select * from student where stuname like ‘%‘ #{stuname} ‘%‘ and stuage>#{stuage} --> <!-- orcl数据库 --> select * from student where stuname like ‘%‘||#{stuname}||‘%‘ and stuage>#{stuage} </select>
3在测试类中
/** * 多条件查询 * @throws IOException */ @Test public void findStudentMore(){ Map<String, Object> maplist=new HashMap<String, Object>(); maplist.put("stuname", "123"); maplist.put("stuage", 11); List<Student> list = dao.findStudentMore(maplist); for (Student student : list) { System.out.println(student.getStuname()); } }
(二)使用索引
1在接口IStudentDAO定制一个方法
//多条件查询引号 public List<Student> findStudentByCondition(String name,int age);
2在小配置中id=“findStudentMore”要和接口的方法法名要一样
<select id="findStudentByCondition" resultType="Student"> <!-- mysql数据库 select * from student where stuname like ‘%‘ #{0} ‘%‘ and stuage>#{1} orcl数据库 --> select * from student where stuname like ‘%‘||#{0}||‘%‘ and stuage>#{1} </select>
3在测试类中
@Test public void findStudentByCondition() throws IOException{ String name="人"; int age=12; List<Student> list = dao.findStudentByCondition(name,age); for (Student student : list) { System.out.println(student.getStuname()); } }
小总结:
四、智能标签
他们共同用到的是如下
1定义一个方法在接口中
public List<Student> findStudentByif(Student stu);
2测试类
public class MyTest { IStudentDAO dao; @Before public void initData() throws IOException{ SqlSession session = MybatisUtil.getSession(); //动态踢出实现类 //首先要改StudentDAO.xml改成<mapper namespace="cn.happy.dao.IStudentDAO"> dao=session.getMapper(IStudentDAO.class); } /** * 多条件查询 * @throws IOException */ @Test public void findStudentByCondition() throws IOException{ String name="人"; int age=12; Student stu=new Student(); stu.setStuage(age); stu.setStuname(name); List<Student> list = dao.findStudentByif(stu); for (Student student : list) { System.out.println(student.getStuname()); } }
3在小配置中的配置
if标签
<!-- 多条件查询 --> <select id="findStudentif" resultType="Student"> select * from student where 1=1 <if test="stuname!=null"> and stuname like ‘%‘||#{stuname}||‘%‘ </if> <if test="stuage!=null"> and stuage>#{stuage} </if> </select>
where标签 注意如果有<where>标签就不需要where 1=1
<!-- 多条件查询 --> <select id="findStudentBychoose" resultType="Student"> select * from student <!-- where 1=1如果有where标签就不需要 --> <where> <if test="stuname!=null"> and stuname like ‘%‘||#{stuname}||‘%‘ </if> <if test="stuage!=null"> and stuage>#{stuage} </if> </where> </select>
choose标签
<!--多条件查询where 1=1 如果有where标签就不需要--> <select id="findStudentByif" resultType="Student"> select * from student <where> <choose> <when test="stuname!=null"> and stuname like ‘%‘||#{stuname}||‘%‘ </when> <otherwise> </otherwise> </choose> </where> </select>
MyBatis的一系列问题的处理(遍历Map集合和智能标签和属性和字段不一样的解决办法)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。