第五简单mybatis resulstMap-helloworld及动态sql

来源:互联网 发布:北京学历提升 知乎 编辑:程序博客网 时间:2024/06/05 05:48

 

 步骤:

Jar包导入,生成数据库表,创建与src同级资源目录config,test目录(注意,config,test均为资源目录)

 

1.创建实体类:

    User.java

package com.xiangshuai.mybatis.pojo;

 

import java.util.Date;

 

public classUser {

    private int id;

    private Integersex;

    private Datebirthday;

    private Stringaddress;

    private Stringusername;

   

    public User(Integersex, Date birthday, Stringaddress, String username) {

        super();

        this.sex =sex;

        this.birthday =birthday;

        this.address =address;

        this.username =username;

    }

 

    public User() {

        super();

        // TODO Auto-generated constructor stub

    }

 

    public String getUsername() {

        returnusername;

    }

 

    public void setUsername(String username) {

        this.username =username;

    }

 

    public int getId() {

        returnid;

    }

 

    public void setId(intid) {

        this.id =id;

    }

 

    public Integer getSex() {

        returnsex;

    }

 

    public void setSex(Integer sex) {

        this.sex =sex;

    }

 

    public Date getBirthday() {

        returnbirthday;

    }

 

    public void setBirthday(Date birthday) {

        this.birthday =birthday;

    }

 

    public String getAddress() {

        returnaddress;

    }

 

    public void setAddress(String address) {

        this.address =address;

    }

 

    @Override

    public String toString() {

        return"User [id="+ id +", sex="+ sex+", birthday=" + birthday + ", address=" + address+ ", username="

                +username + "]";

    }

 

   

}

VO.java

package com.xiangshuai.mybatis.pojo;

 

import java.util.List;

 

/*

 * * 入参类型包装类

 *  user user id这集合两个属性

 * */

public classVO {

    privateUseruser;

    privateList<Integer>idList;

    public List<Integer>getIdList() {

        returnidList;

    }

    public voidsetIdList(List<Integer> idList) {

        this.idList =idList;

    }

    public User getUser() {

        returnuser;

    }

    public void setUser(User user) {

        this.user =user;

    }

}

 

2.建实体类对应的映射文件UserMapper.xml(局部xml文件)

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEmapper   

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- namespace:命名空间,对statement的信息进行分类管理 -->

<!-- 注意:在mapper代理时,它具有特殊及重要的作用,在这里 namespace="com.xiangshuai.mybatis.mapper.UserMapper"

对应mapper接口UserMapper的全类名-->

<mappernamespace="com.xiangshuai.mybatis.mapper.UserMapper">

   

    <!-- resultMap helloworld级别-->

    <!-- select查出来的结果集映射 resultMap标签对应的 type类型中

    其实resultType也是先resultMap将映射resultType类型中但并不需要我们自己

    操作-->

    <!-- id标签:专门为查询结果中唯一列映射 -->

    <!-- result标签:映射查询结果中的普通列 -->

    <resultMaptype="com.xiangshuai.mybatis.pojo.User"id="UserRstMap">

        <idcolumn="id"property="id"/>

        <resultcolumn="username"property="username"/>

        <resultcolumn="sex"property="sex"/>

    </resultMap>

    <selectid="findUserRstMap"parameterType="int"resultMap="UserRstMap">

        selectid,username,birthday,sex,address  fromuser where id = #{id}

    </select>

   

    <!-- 动态 sqlsql片断 -->

    <!-- 定义sql片段 -->

    <!-- sql片段内,可以定义sql语句中任何部分 -->

    <!-- sql片段内,最好不用将whereselect关键字声明在内 -->

    <sqlid="whereClause">

        <!-- if标签:可以对输入的参数进行判断 -->

        <!-- test:指定判断表达式 -->

        <iftest="user !=null">

            <iftest="user.username!= null and user.username != ''">

                ANDusername LIKE '%${user.username}%'

            </if>

            <iftest="user.sex !=null and user.sex != ''">

                ANDsex = #{user.sex}

            </if>

        </if>

 

        <iftest="idList !=null">

            <!-- AND id IN (#{id},#{id},#{id}) -->

 

            <!-- collection:表示pojo中集合属性的属性名称 -->

            <!-- item:为遍历出的结果声明一个变量名称 -->

            <!-- open:遍历开始时,需要拼接的字符串 -->

            <!-- close:遍历结束时,需要拼接的字符串 -->

            <!-- separator:遍历中间需要拼接的连接符 -->

            ANDid IN

            <foreachcollection="idList"item="id"open="("close=")"

                separator=",">

                #{id}

            </foreach>

        </if>

    </sql>

   

    <!-- 综合查询,查询用户列表 -->

    <selectid="findUserList"parameterType="com.xiangshuai.mybatis.pojo.VO"

        resultType="com.xiangshuai.mybatis.pojo.User">

        SELECT* FROM user

        <!-- where标签:默认去掉后面第一个AND,如果没有参数,则把自己干掉 -->

        <where>

            <!-- 引入sql片段 -->

            <includerefid="whereClause"/>

        </where>

    </select>

 

    <!-- 综合查询用户总数 -->

    <selectid="findUserCount"parameterType="com.xiangshuai.mybatis.pojo.VO"

        resultType="int">

        SELECTcount(*) FROM user

        <!-- where标签:默认去掉后面第一个AND,如果没有参数,则把自己干掉 -->

        <where>

            <!-- 引入sql片段 -->

            <includerefid="whereClause"/>

        </where>

    </select>

   

   

</mapper>

 

 

3.将UserMapper.xml(局部xml文件)mapper到 SqlMapConfig.xml(全局配置文件)中

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEconfiguration

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

 

    <!-- 加载java的配置文件或者声明属性信息 -->

    <propertiesresource="db.properties">

    </properties>

 

    <!-- <settings></settings> -->

 

    <!-- 自定义别名 -->

    <!-- <typeAliases>

        单个别名定义

        <typeAliastype="com.itheima.mybatis.po.User" alias="user"/>

 

        批量别名定义(推荐)

        package:指定包名称来为该包下的po类声明别名,默认的别名就是类名(首字母大小写都可)

        <packagename="com.itheima.mybatis.po" />

    </typeAliases>

 -->

    <!-- 配置mybatis的环境信息,与spring整合,该信息由spring来管理 -->

    <environmentsdefault="development">

        <environmentid="development">

            <!-- 配置JDBC事务控制,由mybatis进行管理 -->

            <transactionManagertype="JDBC"></transactionManager>

            <!-- 配置数据源,采用mybatis连接池 -->

            <dataSourcetype="POOLED">

                <propertyname="driver"value="${db.driver}"/>

                <propertyname="url"value="${db.url}"/>

                <propertyname="username"value="${db.username}"/>

                <propertyname="password"value="${db.password}"/>

            </dataSource>

        </environment>

    </environments>

 

    <!-- 加载映射文件 -->

    <mappers>

        <mapperresource="UserMapper.xml"/>

 

        <!-- 批量加载映射文件 -->

        <!-- <packagename="com.itheima.mybatis.mapper" /> -->

    </mappers>

</configuration>

 

4.严格参照UserMapper.xml 按照mapper规范创建mapper接口UserMapper.java

package com.xiangshuai.mybatis.mapper;

 

import java.util.List;

 

importcom.xiangshuai.mybatis.pojo.User;

importcom.xiangshuai.mybatis.pojo.VO;

 

public interface UserMapper {

    public User findUserRstMap(int id);

    public List<User> findUserList(VO vo);

    public int findUserCount(VO vo);

}

5.测试类Demo1.java  

package com.xiangshuai.test;

 

import java.io.IOException;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

importorg.apache.ibatis.binding.MapperRegistry;

import org.apache.ibatis.io.Resources;

importorg.apache.ibatis.session.SqlSession;

importorg.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import org.junit.Before;

import org.junit.Test;

 

importcom.xiangshuai.mybatis.mapper.UserMapper;

import com.xiangshuai.mybatis.pojo.User;

import com.xiangshuai.mybatis.pojo.VO;

 

 

public class Demo1 {

          /*mybatis开发方式mapper开发非mapper开始: 查询,操作和hibernate很像,也是先造实体类,然后配实体类的XML映射文件,然后将实体类的XML映射文件mapper到全局映射 XML文件

           SqlMapConfig.xml中去,

           * */

         privateSqlSessionFactory sqlSessionFactory;

         @Before

         publicvoid before(){

                   //读取配置文件

                   //全局配置文件的路径

                   Stringresource = "SqlMapConfig.xml";

                   InputStreaminputStream = null;

                   try{

                            inputStream= Resources.getResourceAsStream(resource);

                   }catch (IOException e) {

                            //TODO Auto-generated catch block

                            e.printStackTrace();

                   }

                  

                   //创建SqlSessionFactory

                    sqlSessionFactory = newSqlSessionFactoryBuilder().build(inputStream);

         }

         //resultMap标签测试

         @Test

   public void findUserByUsername(){

                   //创建mapper对象 -- UserMapper对象

                   //创建mapper对象 -- UserMapper对象

                   SqlSessionsqlsession = sqlSessionFactory.openSession();

                   UserMappermapper = sqlsession.getMapper(UserMapper.class);

                   //调用mapper完成 增删改查方法

                   Useruser = mapper.findUserRstMap(1);

                   System.out.println(user);

    }

        

         //动态sql测试1,根据VO包装类对象动态SQL查询user

         @Test

         publicvoid findUserList(){

                   //创建mapper对象 -- UserMapper对象

                   //创建mapper对象 -- UserMapper对象

                   SqlSessionsqlsession = sqlSessionFactory.openSession();

                   UserMappermapper = sqlsession.getMapper(UserMapper.class);

                   //调用mapper完成 增删改查方法  ----在这里如果username='三'那么就只拼装username='三'的sql,其它字段不拼接,详见UserMapper.xml

                   Useruser = new User();user.setUsername("三");;VO vo = newVO();vo.setUser(user);

                   List<User>users = mapper.findUserList(vo);

                   System.out.println(users);

         }

        

         //动态sql测试1,根据 id 查 总人数,如果id 在 idList中就查出来

         @Test

         publicvoid findUserCount(){

                   //创建mapper对象 -- UserMapper对象

                   //创建mapper对象 -- UserMapper对象

                   SqlSessionsqlsession = sqlSessionFactory.openSession();

                   UserMappermapper = sqlsession.getMapper(UserMapper.class);

                   //调用mapper完成 增删改查方法  ----在这里如果username='三'那么就只拼装username='三'的sql,其它字段不拼接,详见UserMapper.xml

                   List<Integer>idList=Arrays.asList(1,10,5);VO vo = new VO();vo.setIdList(idList);

                   intcount = mapper.findUserCount(vo);

                   System.out.println(count);

         }

        

}

原创粉丝点击