<?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.bdit.dao.UserDao"> <!--查询全部的用户所对应的角色--> <!--多对多查询时,一个用户能够对应多个角色--> <resultMap id="Map4" type="user"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="age" property="age"/> <result column="address" property="address"/> <!--指定从表中应用的实体类的属性--> <collection property="rolesList" ofType="Roles"> <id column="roleId" property="roleId"/> <result column="roleName" property="roleName"/> <result column="roleDesc" property="roleDesc"/> </collection> </resultMap> <select id="findAll" resultMap="Map4"> select u.*,r.* from user u join userroles ur on u.id=ur.uid join roles r on r.roleId=ur.rid; </select> <!--根据用户的信息查询角色实现一对多的关系--> <resultMap id="Map5" type="user"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="age" property="age"/> <result column="address" property="address"/> <!--指定从表中应用的实体类型--> <collection property="juese" ofType="Roles"> <id column="roleId" property="roleId"/> <result column="roleName" property="roleName"/> <result column="roleDesc" property="roleDesc"/> </collection> </resultMap> <select id="findByid" resultMap="Map5"> select u.*,r.* from user u left outer join roles r on u.id=r.roleId; </select> </mapper>
复杂查询java
<?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.bdit.dao.IUserDao"> <!--动态SQL<if>标签--> <select id="findByfind" parameterType="User" resultType="User"> select * from user where 1=1 <!--test属性:中写的是对象的属性名--> <if test="id!=null and id!=0"> and id=#{id} </if> <!--test属性:中写的是对象的属性名--> <if test="username!=null and username!=''"> and username like #{username} </if> </select> <!--为了改进 where 1=1 的条件拼接,咱们能够采用<where>标签来简化开发。--> <!-- 动态 SQL <where>标签--> <!-- <select id="findByfind" parameterType="User" resultType="User">--> <!-- select * from user--> <!-- <where>--> <!-- <if test="id!=null and id!=0">--> <!-- and id=#{id}--> <!-- </if>--> <!-- <!–test属性:中写的是对象的属性名–>--> <!-- <if test="username!=null and username!=''">--> <!-- and username like #{username}--> <!-- </if>--> <!-- </where>--> <!-- </select>--> <!--动态 SQL <foreach>标签--> <select id="finds" parameterType="QueryVo" resultType="User"> select * from user <where> <if test="stuId!=null and stuId.size()!=0"> <foreach collection="stuId" open="id in(" close=")" item="sid" separator=","> #{sid} </foreach> </if> </where> </select> <!--高级查询:实现一对多的信息--> <resultMap id="Map3" type="user"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="age" property="age"/> <result column="address" property="address"/> <!-- collection:表示关联查询结果集--> <!-- property 属性:在一端定义的对多端对象的集合属性--> <!-- ofType 属性:指定关联查询的结果集中的对象类即 List 中的对象类型--> <!--指定从表中应用实体类的属性--> <collection property="counts" ofType="Account"> <id column="id" property="id"/> <result column="uid" property="uid"/> <result column="money" property="money"/> </collection> </resultMap> <select id="findAll" resultMap="Map3"> select u.*,a.* from user u left outer join Account a on u.id=a.uid </select> </mapper>
简单查询apache
<?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.bdit.dao.IAccountDao"> <!-- <!–把用户的信息和帐户的信息封装在一块儿,根据帐户的信息查询用户的地址,年龄,姓名–>--> <!-- <select id="findAll" resultType="AccountUser">--> <!-- select a.*,u.username,u.age,u.address from Account a,user u where a.uid=u.id;--> <!-- </select>--> <!--方式二: 使用resultMap:根据帐户来查询用户的全部的信息--> <resultMap id="Map2" type="Account"> <id column="id" property="id"/> <result column="uid" property="uid"/> <result column="money" property="money"/> <!--指定从表中的应用实体的属性--> <association property="user" javaType="user"> <!--java类的别名--> <id column="id" property="id"/> <result column="username" property="username"/> <result column="age" property="age"/> <result column="address" property="address"/> </association> </resultMap> <select id="findAll2" resultMap="Map2"> <!--下面两条SQL语句通用--> -- select a.*,u.username,u.age,u.address from Account a,user u where a.uid=u.id; select a.*,u.* from Account a,user u where a.uid=u.id; </select> </mapper>
测试类:session
package com.bdit; import com.bdit.dao.IAccountDao; import com.bdit.dao.IUserDao; import com.bdit.model.Account; import com.bdit.model.AccountUser; import com.bdit.model.QueryVo; import com.bdit.model.User; 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.After; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; //测试类 public class mybatisTest2 { private InputStream input; private SqlSessionFactory factory; private SqlSession session; private IAccountDao iAccountDao; @Before //封装好的数据,初始化时加载 public void init()throws IOException { //1 、 读取配置文件-->SqlMapConfig核心的配置文件 input = Resources.getResourceAsStream("SqlMapConfig.xml"); //二、建立SqlSessionFactoryBuilder构建者的对象。 SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder(); // 三、使用构建者对象建立工厂对象:SqlSessionFactory factory = builder.build(input); //四、使用SqlSessionFactory对象建立SqlSession对象 //4.1 =设置事务为自动提交 session = factory.openSession(true); //五、使用SqlSession对象建立Dao接口的代理对象 iAccountDao = session.getMapper(IAccountDao.class); } @After public void destory()throws IOException { //提交事务 --上面设置为自动提交 //session.commit(); //关闭释放资源 session.close(); input.close(); } @Test //把帐户的信息和用户的信息封装在一块儿,根据帐户来查询,实现一对一的关系 public void find(){ List<AccountUser>list=iAccountDao.findAll(); for(AccountUser us:list){ System.out.println(us); } //实现一对一的查询 } @Test //方式二:使用resultMap映射文件来完成一对一的关系。 public void find2(){ List<Account>list2=iAccountDao.findAll2(); for(Account uu:list2){ System.out.println(uu); } } } package com.bdit; import com.bdit.dao.IUserDao; import com.bdit.dao.RolesDao; import com.bdit.model.QueryVo; import com.bdit.model.Roles; import com.bdit.model.User; 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.After; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; //测试类 public class mybatisTest3 { private InputStream input; private SqlSessionFactory factory; private SqlSession session; private RolesDao rolesDao; @Before //封装好的数据,初始化时加载 public void init()throws IOException { //1 、 读取配置文件-->SqlMapConfig核心的配置文件 input = Resources.getResourceAsStream("SqlMapConfig.xml"); //二、建立SqlSessionFactoryBuilder构建者的对象。 SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder(); // 三、使用构建者对象建立工厂对象:SqlSessionFactory factory = builder.build(input); //四、使用SqlSessionFactory对象建立SqlSession对象 //4.1 =设置事务为自动提交 session = factory.openSession(true); //五、使用SqlSession对象建立Dao接口的代理对象 rolesDao = session.getMapper(RolesDao.class); } @After public void destory()throws IOException { //提交事务 --上面设置为自动提交 //session.commit(); //关闭释放资源 session.close(); input.close(); } @Test //多对多的查询:实现一个角色能够赋予多个用户 public void findaLL(){ List<Roles>list=rolesDao.findAll(); for(Roles rr:list){ System.out.println(rr); } } @Test //一个角色对应多个用户:实现一对多的关系 public void find(){ List<Roles>list1=rolesDao.findByid(); for(Roles lwj:list1){ System.out.println(lwj); } } }