• java:Mybatis框架2(基于mapper接口的开发,多种查询,复合类型查询,resultMap定义,多表联查,sql片段)


    1.mybatis02:

      

     

      mybatis-config.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <!-- 加载属性文件 -->
           <properties resource="db.properties"/>
        <environments default="development">
             <environment id="development">
                 <!-- 使用jdbc中的事务 -->
                <transactionManager type="JDBC"></transactionManager>         
                <!-- 配置数据源 -->
                <dataSource type="POOLED">
                     <property name="driver" value="${driver}"/>
                     <property name="url" value="${url}"/>
                     <property name="username" value="${username}"/>
                     <property name="password" value="${password}"/>
                </dataSource>
             </environment>
        </environments>
        <!-- 引入映射文件 -->
        <mappers>
    <!--         <mapper resource="cn/zzsxt/mapper/TbUserMapper.xml"/> -->
    <!-- 注意:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下; -->
    <!--         <mapper class="cn.zzsxt.mapper.TbUserMapper"/> -->
    <!-- 注意:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下; -->
                 <package name="cn.zzsxt.mapper"/>
        </mappers>
    </configuration>  

      log4j.properties:

    #Console
    log4j.appender.Console=org.apache.log4j.ConsoleAppender
    log4j.appender.Console.layout=org.apache.log4j.PatternLayout
    log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
    log4j.logger.org.apache.ibatis=DEBUG
    #log4j.rootLogger=warn,appender1  
    #log4j.appender.appender1=org.apache.log4j.ConsoleAppender  
    #log4j.appender.appender1.layout=org.apache.log4j.SimpleLayout  

      db.properties:

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/test
    username=root
    password=root

      TbUser.java:

    package cn.zzsxt.entity;
    
    import java.io.Serializable;
    import java.util.Date;
    
    public class TbUser implements Serializable{
        private long id;
        private String username;
        private String sex;
        private Date birthday;
        private String address;
        
        public long getId() {
            return id;
        }
        public void setId(long id) {
            this.id = id;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        public Date getBirthday() {
            return birthday;
        }
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        @Override
        public String toString() {
            return "TbUser [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address="
                    + address + "]";
        }
        
    }

      TbUserMapper.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">
    <!-- 
    1、 mapper接口的全限定名要和mapper映射文件的namespace值一致。
    2、 mapper接口的方法名称要和mapper映射文件的statement的id一致。
    3、 mapper接口的方法参数类型要和mapper映射文件的statement的parameterType的值一致,而且它的参数是一个。
    4、 mapper接口的方法返回值类型要和mapper映射文件的statement的resultType的值一致。
     -->        
    <mapper namespace="cn.zzsxt.mapper.TbUserMapper">
     <!--
            1.需求根据用户名称模糊查询
            2.思路:模糊查询返回结果可能是多条纪录
            3.resultType:指定就是单条记录所映射成java对象类型
            4.${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中
            5.使用${}容易引起sql注入
            6.${value}:接受输入参数的内容,如果传入类型是简单类型,${}中只能用value
        -->
        <select id="findUserByName" parameterType="java.lang.String" resultType="cn.zzsxt.entity.TbUser">
            select * from tb_user where username like '%${value}%'
        </select>
        <select id="findUserById" parameterType="java.lang.Long" resultType="cn.zzsxt.entity.TbUser">
            select * from tb_user where id=#{id}
        </select>
        <insert id="addUser" parameterType="cn.zzsxt.entity.TbUser">
            insert into tb_user(username,sex,birthday,address) values(#{username},#{sex},#{birthday},#{address})
        </insert>
    </mapper>

      TbUserMapper.java:

    package cn.zzsxt.mapper;
    
    import java.util.List;
    import java.util.Map;
    
    import cn.zzsxt.entity.TbUser;
    import cn.zzsxt.vo.TbUserQuery;
    
    public interface TbUserMapper {
        List<TbUser> findUserByName(String username);
        TbUser findUserById(long id);
        int addUser(TbUser user);
        /**
         * 查询用户信息,要求对用户名进行模糊查找,对性别进行精确查找
         * @return
         */
        List<TbUser> findUserByNameAndSexVo(TbUserQuery userQuery);
        /**
         * 查询用户信息,要求对用户名进行模糊查找,对性别进行精确查找
         * @param map
         * @return
         */
        List<TbUser> findUserByNameAndSexMap(Map<String,Object> map);
        /**
         * 查询用户信息,要求对用户名进行模糊查找,对性别进行精确查找
         * @param user
         * @return
         */
        List<TbUser> findUserByAddressAndSex(TbUser user);
        
        /**
         * 查询用户表中总记录数
         * @return
         */
        int getCount();
        /**
         * 使用resultMap封装结果,根据用户编号查询用户信息,
         * @param id
         * @return
         */
        TbUser findUserByResultMap(long id);
        /**
         * 查询部分列
         * @param id
         * @return
         */
        TbUser findUserByResultType(long id);
        
        List<TbUser> findUserList(TbUserQuery userQuery);
    }

      TbUserMapper.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">
    <!-- 
    1、 mapper接口的全限定名要和mapper映射文件的namespace值一致。
    2、 mapper接口的方法名称要和mapper映射文件的statement的id一致。
    3、 mapper接口的方法参数类型要和mapper映射文件的statement的parameterType的值一致,而且它的参数是一个。
    4、 mapper接口的方法返回值类型要和mapper映射文件的statement的resultType的值一致。
     -->        
    <mapper namespace="cn.zzsxt.mapper.TbUserMapper">
     <!--
            1.需求根据用户名称模糊查询
            2.思路:模糊查询返回结果可能是多条纪录
            3.resultType:指定就是单条记录所映射成java对象类型
            4.${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中
            5.使用${}容易引起sql注入
            6.${value}:接受输入参数的内容,如果传入类型是简单类型,${}中只能用value
        -->
        <select id="findUserByName" parameterType="java.lang.String" resultType="cn.zzsxt.entity.TbUser">
            select * from tb_user where username like '%${value}%'
        </select>
        <select id="findUserById" parameterType="java.lang.Long" resultType="cn.zzsxt.entity.TbUser">
            select * from tb_user where id=#{id}
        </select>
        <insert id="addUser" parameterType="cn.zzsxt.entity.TbUser">
            insert into tb_user(username,sex,birthday,address) values(#{username},#{sex},#{birthday},#{address})
        </insert>
        <!-- 根据用户名和性别查询 -->
        <select id="findUserByNameAndSexVo" parameterType="cn.zzsxt.vo.TbUserQuery" resultType="cn.zzsxt.entity.TbUser">
            select * from tb_user where username like '%${user.username}%' and sex=#{user.sex}
        </select>
        
            <!-- 根据用户名和性别查询,参数为map -->
        <select id="findUserByNameAndSexMap" parameterType="java.util.HashMap" resultType="cn.zzsxt.entity.TbUser">
            select * from tb_user where username like '%${uname}%' and sex=#{sex}
        </select>
        <!-- 根据用户名和性别查询 -->
        <select id="findUserByAddressAndSex" parameterType="cn.zzsxt.entity.TbUser" resultType="cn.zzsxt.entity.TbUser">
            select * from tb_user where address like '%${address}%' and sex=#{sex}
        </select>
        <!-- 查询总记录数 -->
        <select id="getCount" resultType="java.lang.Integer">
            select count(*) from tb_user
        </select>
    
    
        <!-- 
          定义resultMap:解决字段名称与属性名称不一致的问题。
            将SELECT id id_,username username_,
            sex sex_ FROM tb_user WHERE id = 1 和 User类中的属性作一个映射关系
            type:resultMap最终映射的java对象类型,可以使用别名
            id:对resultMap的唯一标识
         -->
         
         <resultMap id="userResultMap" type="cn.zzsxt.entity.TbUser">
             <id column="id_" property="id"/>
             <result column="username_" property="username"/>
             <result column="sex_" property="sex"/>
             <result column="birthday" property="birthday"/>
             <result column="address" property="address"/>
         </resultMap>
         <select id="findUserByResultMap" parameterType="java.lang.Long" resultMap="userResultMap">
             select id id_,username username_,sex sex_,birthday,address from tb_user where id=#{id}
         </select>
        
        
         <!-- 查询部分列 -->
         <select id="findUserByResultType" parameterType="java.lang.Long" resultType="cn.zzsxt.entity.TbUser">
             select id,username,sex from tb_user where id=#{id}
         </select>
         
         
         <!-- 动态SQL -->
             <select id="findUserList" parameterType="cn.zzsxt.vo.TbUserQuery" resultType="cn.zzsxt.entity.TbUser">
                select * from tb_user
               <where>
    <!--                    <if test="user.address!=null and user.address!=''"> -->
    <!--                        and address like'%${user.address}%' -->
    <!--                    </if> -->
    <!--                    <if test="user.sex!=null and user.sex!=''"> -->
    <!--                        and sex=#{user.sex} -->
    <!--                    </if> -->
                     <!-- 引入SQL片段 -->
                     <include refid="where_address_sex"></include>
               </where>
        </select>
        
        
        <!-- SQL片段:提高sql语句的复用性 -->
        <sql id="where_address_sex">
                     <if test="user.address!=null and user.address!=''">
                           and address like'%${user.address}%'
                       </if>
                       <if test="user.sex!=null and user.sex!=''">
                           and sex=#{user.sex}
                       </if>
                       
                       
                       
                       <if test="ids!=null">
                       <!--
                                使用foreach遍历传入ids
                                collection:指定输入对象中集合属性
                                item:每次遍历生成对象
                                open:开始遍历时拼接的串
                                close:结束遍历时拼接的串
                            separator分隔符:遍历的两个对象中需要拼接的串
                            -->
                           <foreach collection="ids" item="user_id" open="and id in (" close=")" separator=",">
                               #{user_id}
                           </foreach>
                       </if>
        </sql>
    </mapper>

      TbUserQuery.java:

    package cn.zzsxt.vo;
    
    import java.util.List;
    
    import cn.zzsxt.entity.TbUser;
    
    public class TbUserQuery {
        private TbUser user;
        //用户编号
        private List<Long> ids;
        
        
        public TbUser getUser() {
            return user;
        }
    
        public void setUser(TbUser user) {
            this.user = user;
        }
    
        public List<Long> getIds() {
            return ids;
        }
    
        public void setIds(List<Long> ids) {
            this.ids = ids;
        }
        
    }

      TestTbUserMapper.java:

    package cn.zzsxt.test; 
    
    import java.io.InputStream;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    import cn.zzsxt.entity.TbUser;
    import cn.zzsxt.mapper.TbUserMapper;
    import cn.zzsxt.vo.TbUserQuery;
    
    public class TestTbUserMapper {
        @Test
        public  void testFindUserByName(){
            InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips);
            SqlSession sqlSession=sqlSessionFactory.openSession();
            //获取TbUserMapper生成的代理(通过jdk的动态代理实现的)
            TbUserMapper tbUserMapper = sqlSession.getMapper(TbUserMapper.class);
            List<TbUser> list = tbUserMapper.findUserByName("张");
            for (TbUser tbUser : list) {
                System.out.println(tbUser);
            }
            sqlSession.close();
        }
        
        
        @Test
        public  void testFindUserById(){
            InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips);
            SqlSession sqlSession=sqlSessionFactory.openSession();
            //获取TbUserMapper生成的代理(通过jdk的动态代理实现的)
            TbUserMapper tbUserMapper = sqlSession.getMapper(TbUserMapper.class);
            TbUser user = tbUserMapper.findUserById(1);
            System.out.println(user);
            sqlSession.close();
        }
        
        @Test
        public  void testAddUser(){
            InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips);
            SqlSession sqlSession=sqlSessionFactory.openSession();
            //获取TbUserMapper生成的代理(通过jdk的动态代理实现的)
            TbUserMapper tbUserMapper = sqlSession.getMapper(TbUserMapper.class);
            TbUser user = new TbUser();
            user.setUsername("王五");
            user.setSex("女");
            user.setBirthday(new Date());
            user.setAddress("郑州");
            int count = tbUserMapper.addUser(user);
            sqlSession.commit();
            System.out.println(count);
            sqlSession.close();
        }
        
        @Test
        public  void testFindUserByNameAndSexVo(){
            InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips);
            SqlSession sqlSession=sqlSessionFactory.openSession();
            //获取TbUserMapper生成的代理(通过jdk的动态代理实现的)
            TbUserMapper tbUserMapper = sqlSession.getMapper(TbUserMapper.class);
            TbUserQuery userQuery = new TbUserQuery();
            TbUser user = new TbUser();
            user.setUsername("五");
            user.setSex("男");
            userQuery.setUser(user);
            List<TbUser> list= tbUserMapper.findUserByNameAndSexVo(userQuery);
            for (TbUser tbUser : list) {
                System.out.println(tbUser);
            }
            sqlSession.close();
        }
        @Test
        public  void testFindUserByNameAndSexMap(){
            InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips);
            SqlSession sqlSession=sqlSessionFactory.openSession();
            //获取TbUserMapper生成的代理(通过jdk的动态代理实现的)
            TbUserMapper tbUserMapper = sqlSession.getMapper(TbUserMapper.class);
            Map<String,Object> map = new HashMap<String,Object>();
            map.put("uname", "五");
            map.put("sex", "男");
            List<TbUser> list= tbUserMapper.findUserByNameAndSexMap(map);
            for (TbUser tbUser : list) {
                System.out.println(tbUser);
            }
            sqlSession.close();
        }
        @Test
        public  void testFindUserByAddressAndSex(){
            InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips);
            SqlSession sqlSession=sqlSessionFactory.openSession();
            //获取TbUserMapper生成的代理(通过jdk的动态代理实现的)
            TbUserMapper tbUserMapper = sqlSession.getMapper(TbUserMapper.class);
            TbUser user = new TbUser();
            user.setAddress("安阳");
            user.setSex("男");
            List<TbUser> list= tbUserMapper.findUserByAddressAndSex(user);
            for (TbUser tbUser : list) {
                System.out.println(tbUser);
            }
            sqlSession.close();
        }
    }

      TestTbUserMapper2.java:

    package cn.zzsxt.test; 
    
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    import cn.zzsxt.entity.TbUser;
    import cn.zzsxt.mapper.TbUserMapper;
    import cn.zzsxt.vo.TbUserQuery;
    
    public class TestTbUserMapper2 {
        @Test
        public  void testGetCount(){
            InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips);
            SqlSession sqlSession=sqlSessionFactory.openSession();
            //获取TbUserMapper生成的代理(通过jdk的动态代理实现的)
            TbUserMapper tbUserMapper = sqlSession.getMapper(TbUserMapper.class);
            int count = tbUserMapper.getCount();
            System.out.println("总记录数为:"+count);
            sqlSession.close();
        }
        
        @Test
        public  void testFindUserByResultMap(){
            InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips);
            SqlSession sqlSession=sqlSessionFactory.openSession();
            //获取TbUserMapper生成的代理(通过jdk的动态代理实现的)
            TbUserMapper tbUserMapper = sqlSession.getMapper(TbUserMapper.class);
            TbUser user = tbUserMapper.findUserByResultMap(1L);
            System.out.println(user);
            sqlSession.close();
        }
        
        @Test
        public  void testFindUserByResultType(){
            InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips);
            SqlSession sqlSession=sqlSessionFactory.openSession();
            //获取TbUserMapper生成的代理(通过jdk的动态代理实现的)
            TbUserMapper tbUserMapper = sqlSession.getMapper(TbUserMapper.class);
            TbUser user = tbUserMapper.findUserByResultType(1L);
            System.out.println(user);
            sqlSession.close();
        }
        /**
         * 动态SQL
         */
        @Test
        public  void testFindUserList(){
            InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips);
            SqlSession sqlSession=sqlSessionFactory.openSession();
            //获取TbUserMapper生成的代理(通过jdk的动态代理实现的)
            TbUserMapper tbUserMapper = sqlSession.getMapper(TbUserMapper.class);
            
            TbUserQuery userQuery = new TbUserQuery();
            TbUser user = new TbUser();
            //user.setAddress("安阳");
            //user.setSex("男");
            userQuery.setUser(user);    //此处若不传值,报错!!!!!!
            //foreach测试
            List<Long> ids = new ArrayList<Long>();
            ids.add(1L);
            ids.add(2L);
            ids.add(3L);
            userQuery.setIds(ids);
            List<TbUser> list = tbUserMapper.findUserList(userQuery);
            for (TbUser tbUser : list) {
                System.out.println(tbUser);
            }
            sqlSession.close();
        }
        
    }

    2.mybatis03:

      mybatis-config.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <!-- 加载属性文件 -->
           <properties resource="db.properties"/>
        <environments default="development">
             <environment id="development">
                 <!-- 使用jdbc中的事务 -->
                <transactionManager type="JDBC"></transactionManager>         
                <!-- 配置数据源 -->
                <dataSource type="POOLED">
                     <property name="driver" value="${driver}"/>
                     <property name="url" value="${url}"/>
                     <property name="username" value="${username}"/>
                     <property name="password" value="${password}"/>
                </dataSource>
             </environment>
        </environments>
        <!-- 引入映射文件 -->
        <mappers>
    <!--         <mapper resource="cn/zzsxt/mapper/TbUserMapper.xml"/> -->
    <!-- 注意:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下; -->
    <!--         <mapper class="cn.zzsxt.mapper.TbUserMapper"/> -->
    <!-- 注意:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下; -->
                 <package name="cn.zzsxt.mapper"/>
        </mappers>
    </configuration>  

      

      db.properties:

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/mybatis
    username=root
    password=root

      log4j.properties:

    #Console
    log4j.appender.Console=org.apache.log4j.ConsoleAppender
    log4j.appender.Console.layout=org.apache.log4j.PatternLayout
    log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
    log4j.logger.org.apache.ibatis=DEBUG
    #log4j.rootLogger=warn,appender1  
    #log4j.appender.appender1=org.apache.log4j.ConsoleAppender  
    #log4j.appender.appender1.layout=org.apache.log4j.SimpleLayout  

      TbGoods.java:

    package cn.zzsxt.entity;
    
    import java.util.Date;
    
    public class TbGoods {
        private long id;
        private String name;
        private double price;
        private Date create_time;
        private String detail;
        public long getId() {
            return id;
        }
        public void setId(long id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public double getPrice() {
            return price;
        }
        public void setPrice(double price) {
            this.price = price;
        }
        public Date getCreate_time() {
            return create_time;
        }
        public void setCreate_time(Date create_time) {
            this.create_time = create_time;
        }
        public String getDetail() {
            return detail;
        }
        public void setDetail(String detail) {
            this.detail = detail;
        }
        @Override
        public String toString() {
            return "TbGoods [id=" + id + ", name=" + name + ", price=" + price + ", create_time=" + create_time
                    + ", detail=" + detail + "]";
        }
        
    }

      TbOrder.java:

    package cn.zzsxt.entity;
    
    import java.util.Date;
    import java.util.List;
    
    public class TbOrder {
        private long id;
        private long user_id;
        private String order_number;
        private Date create_time;
        private String detail;
        //订单与订单明细:一对多
        private List<TbOrderDetail> orderDetailList;
        
        public long getId() {
            return id;
        }
        public void setId(long id) {
            this.id = id;
        }
        public long getUser_id() {
            return user_id;
        }
        public void setUser_id(long user_id) {
            this.user_id = user_id;
        }
        public String getOrder_number() {
            return order_number;
        }
        public void setOrder_number(String order_number) {
            this.order_number = order_number;
        }
        public Date getCreate_time() {
            return create_time;
        }
        public void setCreate_time(Date create_time) {
            this.create_time = create_time;
        }
        public String getDetail() {
            return detail;
        }
        public void setDetail(String detail) {
            this.detail = detail;
        }
        
        public List<TbOrderDetail> getOrderDetailList() {
            return orderDetailList;
        }
        public void setOrderDetailList(List<TbOrderDetail> orderDetailList) {
            this.orderDetailList = orderDetailList;
        }
        @Override
        public String toString() {
            return "TbOrder [id=" + id + ", user_id=" + user_id + ", order_number=" + order_number + ", create_time="
                    + create_time + ", detail=" + detail + "]";
        }
        
    }

      TbOrderDetail.java:

    package cn.zzsxt.entity;
    
    public class TbOrderDetail {
        private long id;
        private long order_id;
        private long goods_id;
        private long goods_num;
        //订单明细与商品:一对一
        private TbGoods goods;
        
        public long getId() {
            return id;
        }
        public void setId(long id) {
            this.id = id;
        }
        public long getOrder_id() {
            return order_id;
        }
        public void setOrder_id(long order_id) {
            this.order_id = order_id;
        }
        public long getGoods_id() {
            return goods_id;
        }
        public void setGoods_id(long goods_id) {
            this.goods_id = goods_id;
        }
        public long getGoods_num() {
            return goods_num;
        }
        public void setGoods_num(long goods_num) {
            this.goods_num = goods_num;
        }
        
        public TbGoods getGoods() {
            return goods;
        }
        public void setGoods(TbGoods goods) {
            this.goods = goods;
        }
        @Override
        public String toString() {
            return "TbOrderDetail [id=" + id + ", order_id=" + order_id + ", goods_id=" + goods_id + ", goods_num="
                    + goods_num + "]";
        }
        
    }

      TbUser.java:

    package cn.zzsxt.entity;
    
    import java.io.Serializable;
    import java.util.Date;
    import java.util.List;
    
    public class TbUser implements Serializable{
        private long id;
        private String username;
        private String sex;
        private Date birthday;
        private String address;
        //用户与订单:一对多
        private List<TbOrder> orderList;
        
        public long getId() {
            return id;
        }
        public void setId(long id) {
            this.id = id;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        public Date getBirthday() {
            return birthday;
        }
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        
        public List<TbOrder> getOrderList() {
            return orderList;
        }
        public void setOrderList(List<TbOrder> orderList) {
            this.orderList = orderList;
        }
        @Override
        public String toString() {
            return "TbUser [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address="
                    + address + "]";
        }
        
    }

      TbOrderQuery01.java:

    package cn.zzsxt.vo;
    
    import cn.zzsxt.entity.TbOrder;
    
    public class TbOrderQuery01 extends TbOrder {
        private String username;
        private String sex;
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        @Override
        public String toString() {
            return "TbOrderQuery01 [username=" + username + ", sex=" + sex + "]"+super.toString();
        }
        
    }

      TbOrderQuery02.java:

    package cn.zzsxt.vo;
    
    import cn.zzsxt.entity.TbOrder;
    import cn.zzsxt.entity.TbUser;
    
    public class TbOrderQuery02 extends TbOrder {
        private TbUser user;
    
        public TbUser getUser() {
            return user;
        }
    
        public void setUser(TbUser user) {
            this.user = user;
        }
    
        @Override
        public String toString() {
            return "TbOrderQuery02:"+super.toString()+" [user=" + user + "]";
        }
        
    }

      TbOrderQuery03.java:

    package cn.zzsxt.vo;
    
    import java.util.List;
    
    import cn.zzsxt.entity.TbOrder;
    import cn.zzsxt.entity.TbOrderDetail;
    import cn.zzsxt.entity.TbUser;
    
    public class TbOrderQuery03 extends TbOrder {
        //订单与用户:一对一
        private TbUser user;
        //订单与订单明细:一对多
        private List<TbOrderDetail> orderDetailList;
        
        public TbUser getUser() {
            return user;
        }
        public void setUser(TbUser user) {
            this.user = user;
        }
        public List<TbOrderDetail> getOrderDetailList() {
            return orderDetailList;
        }
        public void setOrderDetailList(List<TbOrderDetail> orderDetailList) {
            this.orderDetailList = orderDetailList;
        }
        @Override
        public String toString() {
            return "TbOrderQuery03 [user=" + user + ", orderDetailList=" + orderDetailList + ", toString()="
                    + super.toString() + "]";
        }
        
    }

      TbOrderMapper.java:

    package cn.zzsxt.mapper;
    
    import java.util.List;
    
    import cn.zzsxt.entity.TbUser;
    import cn.zzsxt.vo.TbOrderQuery01;
    import cn.zzsxt.vo.TbOrderQuery02;
    import cn.zzsxt.vo.TbOrderQuery03;
    
    public interface TbOrderMapper {
        /**
         * 查询订单信息,关联用户信息
         * @return
         */
        List<TbOrderQuery01> findOrderAndUser();
        /**
         * 查询订单信息,关联用户信息,将查询结果封装成自定义的resultMap中
         * @return
         */
        List<TbOrderQuery02> findOrderAndUserResultMap();
        
        /**
         * 查询订单信息,关联用户信息和订单明细
         * @return
         */
        List<TbOrderQuery03> findOrderAndDetailAndUser();
        /**
         * 查询用户信息,关联订单信息,订单明细和商品信息
         * @return
         */
        List<TbUser> findUserAndGoods();
    }

      TbOrderMapper.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="cn.zzsxt.mapper.TbOrderMapper">
        <!-- 查询订单信息关联用户信息 一对一 -->
        <select id="findOrderAndUser" resultType="cn.zzsxt.vo.TbOrderQuery01">
            SELECT
              tb_order.id,
              tb_order.user_id,
              tb_order.order_number,
              tb_user.username,
              tb_user.sex
            FROM tb_order, tb_user
            WHERE tb_order.user_id = tb_user.id
        </select>
        <!-- 自定义resultMap -->
        <resultMap type="cn.zzsxt.vo.TbOrderQuery02" id="orderAndUserResultMap">
             <id  column="order_id" property="id"/>
             <result column="user_id" property="user_id"/>
             <result column="order_number" property="order_number"/>
             <result column="detail" property="detail"/>
             <!-- 一对一关联 -->
             <association property="user" javaType="cn.zzsxt.entity.TbUser">
                 <id column="id" property="id"/>
                 <result column="username" property="username"/>
                 <result column="sex" property="sex"/>
                 <result column="birthday" property="birthday"/>
                 <result column="address" property="address"/>
             </association>
        </resultMap>
        <select id="findOrderAndUserResultMap" resultMap="orderAndUserResultMap">
             SELECT
                tb_order.id order_id,
                tb_order.user_id,
                tb_order.order_number,
                tb_order.detail,
                tb_user.username,
                tb_user.sex,
                tb_user.birthday,
                tb_user.address
                FROM tb_order, tb_user
                WHERE tb_order.user_id = tb_user.id
        </select>
        <!-- 自定义resultMap -->
        <resultMap type="cn.zzsxt.vo.TbOrderQuery03" id="orderAndDetailAndUserResultMap">
             <id  column="order_id" property="id"/>
             <result column="user_id" property="user_id"/>
             <result column="order_number" property="order_number"/>
             <result column="create_time" property="create_time"/>
             <result column="detail" property="detail"/>
             <!-- 一对一关联 -->
             <association property="user" javaType="cn.zzsxt.entity.TbUser">
                 <id column="id" property="id"/>
                 <result column="username" property="username"/>
                 <result column="sex" property="sex"/>
                 <result column="birthday" property="birthday"/>
                 <result column="address" property="address"/>
             </association>
             <!-- 一对多关联 -->
             <collection property="orderDetailList" ofType="cn.zzsxt.entity.TbOrderDetail">
                 <id column="detail_id" property="id"/>
                 <result column="goods_id" property="goods_id"/>
                 <result column="goods_num" property="goods_num"/>
             </collection>
        </resultMap>
        <select id="findOrderAndDetailAndUser" resultMap="orderAndDetailAndUserResultMap">
            SELECT
              tb_order.id order_id,
              tb_order.user_id,
              tb_order.order_number,
              tb_order.create_time,
              tb_order.detail,
              tb_user.username,
              tb_user.sex,
              tb_user.birthday,
              tb_user.address,
              tb_order_detail.id detail_id,
              tb_order_detail.goods_id,
              tb_order_detail.goods_num
            FROM tb_order, tb_user, tb_order_detail
            WHERE tb_order.user_id = tb_user.id
                  AND tb_order.id = tb_order_detail.order_id
        </select>
        <!-- 多对多 -->
        <resultMap type="cn.zzsxt.entity.TbUser" id="userAndGoodsResultMap">
            <id column="user_id" property="id"/>
            <result column="username" property="username"/>
            <result column="sex" property="sex"/>
            <result column="birthday" property="birthday"/>
            <result column="address" property="address"/>
            <!-- 一对多 -->
            <collection property="orderList" ofType="cn.zzsxt.entity.TbOrder">
                 <id  column="order_id" property="id"/>
                 <result column="order_number" property="order_number"/>
                 <result column="create_time" property="create_time"/>
                 <result column="detail" property="detail"/>
                 <!-- 一对多 -->
                 <collection property="orderDetailList" ofType="cn.zzsxt.entity.TbOrderDetail">
                    <id column="detail_id" property="id"/>
                     <result column="goods_id" property="goods_id"/>
                     <result column="goods_num" property="goods_num"/>
                     <!-- 一对一 -->
                     <association property="goods" javaType="cn.zzsxt.entity.TbGoods">
                             <result column="name" property="name"/>
                             <result column="price" property="price"/>
                             <result column="goods_create_time" property="create_time"/>
                             <result column="goods_detail" property="detail"/>
                     </association>
                 </collection>
            </collection>
        </resultMap>
        <select id="findUserAndGoods" resultMap="userAndGoodsResultMap">
        SELECT
          tb_user.id user_id,
          tb_user.username,
          tb_user.sex,
          tb_user.birthday,
          tb_user.address,
          tb_order.id order_id,
          tb_order.order_number,
          tb_order.create_time,
          tb_order.detail,
          tb_order_detail.id detail_id,
          tb_order_detail.goods_id,
          tb_order_detail.goods_num,
          tb_goods.name,
          tb_goods.price,
          tb_goods.create_time goods_create_time,
          tb_goods.detail goods_detail
        FROM tb_order, tb_user, tb_order_detail, tb_goods
        WHERE tb_order.user_id = tb_user.id
              AND tb_order.id = tb_order_detail.order_id
              AND tb_order_detail.goods_id = tb_goods.id
        </select>
        
    </mapper>        

      TestOrderMapper.java:

    package cn.zzsxt.test;
    
    import java.io.InputStream;
    import java.util.List;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    import cn.zzsxt.entity.TbGoods;
    import cn.zzsxt.entity.TbOrder;
    import cn.zzsxt.entity.TbOrderDetail;
    import cn.zzsxt.entity.TbUser;
    import cn.zzsxt.mapper.TbOrderMapper;
    import cn.zzsxt.vo.TbOrderQuery01;
    import cn.zzsxt.vo.TbOrderQuery02;
    import cn.zzsxt.vo.TbOrderQuery03;
    
    public class TestOrderMapper {
        @Test
        public void testFindOrderAndUser(){
            InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips);
            SqlSession sqlSession = sqlSessionFactory.openSession();
            TbOrderMapper orderMapper = sqlSession.getMapper(TbOrderMapper.class);
            List<TbOrderQuery01> list = orderMapper.findOrderAndUser();
            for (TbOrderQuery01 tbOrderQuery01 : list) {
                System.out.println(tbOrderQuery01);
            }
        }
        
        @Test
        public void testFindOrderAndUserResultMap(){
            InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips);
            SqlSession sqlSession = sqlSessionFactory.openSession();
            TbOrderMapper orderMapper = sqlSession.getMapper(TbOrderMapper.class);
            List<TbOrderQuery02> list = orderMapper.findOrderAndUserResultMap();
            for (TbOrderQuery02 tbOrderQuery02 : list) {
                System.out.println(tbOrderQuery02);
            }
        }
        
        @Test
        public void testFindOrderAndDetailAndUser(){
            InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips);
            SqlSession sqlSession = sqlSessionFactory.openSession();
            TbOrderMapper orderMapper = sqlSession.getMapper(TbOrderMapper.class);
            List<TbOrderQuery03> list = orderMapper.findOrderAndDetailAndUser();
            for (TbOrderQuery03 tbOrderQuery03 : list) {
                System.out.println(tbOrderQuery03);
            }
        }
        
        @Test
        public void testFindUserAndGoods(){
            InputStream ips = this.getClass().getResourceAsStream("/mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips);
            SqlSession sqlSession = sqlSessionFactory.openSession();
            TbOrderMapper orderMapper = sqlSession.getMapper(TbOrderMapper.class);
            List<TbUser> list = orderMapper.findUserAndGoods();
            for (TbUser tbUser : list) {
                System.out.println("用户信息:"+tbUser);
                List<TbOrder> orderList = tbUser.getOrderList();//获取订单信息
                System.out.println("订单信息:");
                for (TbOrder tbOrder : orderList) {
                    System.out.println(tbOrder);
                    System.out.println("订单明细:");
                    List<TbOrderDetail> orderDetailList = tbOrder.getOrderDetailList();//获取订单明细
                    for (TbOrderDetail tbOrderDetail : orderDetailList) {
                        System.out.println(tbOrderDetail);
                        //获取商品信息
                        TbGoods tbGoods = tbOrderDetail.getGoods();
                        System.out.println(tbGoods);
                    }
                }
            }
        }
    }
  • 相关阅读:
    一些有趣的chrome 插件
    蚁剑菜刀虚拟终端执行命令返回ret=127之bypass
    渗透工具:蚁剑(AntSword)教学
    追踪系统工作原理
    Burp Suite爆破Basic认证密码
    挖洞思路
    Spire.XLS打印页面设置教程 C# VB.NET Excel直接打印
    Connection is readonly. Queries leading to data modification are not allowed 解决方法
    shell order
    白帽专访丨大家好,我是王老师,Day1安全团队的创始人
  • 原文地址:https://www.cnblogs.com/kuangzhisen/p/7460443.html
Copyright © 2020-2023  润新知