<?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); } } }