第五个MyBatis练习,resultType使用别名(定义别名)

项目结构

1.创建Student实体类

package com.it.domain;

public class Student {
    private int sno;
    private String sname;
    private  String ssex;
    private int sage;
    private String sdept;

    public int getSno() {
        return sno;
    }

    public void setSno(int sno) {
        this.sno = sno;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getSsex() {
        return ssex;
    }

    public void setSsex(String ssex) {
        this.ssex = ssex;
    }

    public int getSage() {
        return sage;
    }

    public void setSage(int sage) {
        this.sage = sage;
    }

    public String getSdept() {
        return sdept;
    }

    public void setSdept(String sdept) {
        this.sdept = sdept;
    }

    @Override
    public String toString() {
        return "Student{" +
                "sno=" + sno +
                ", sname='" + sname + '\'' +
                ", ssex='" + ssex + '\'' +
                ", sage=" + sage +
                ", sdept='" + sdept + '\'' +
                '}';
    }
}

2.创建QueryParam实体类

package com.it.vo;

public class QueryParam {
    private String nameParam;
    private Integer ageParam;

    public String getNameParam() {
        return nameParam;
    }

    public void setNameParam(String nameParam) {
        this.nameParam = nameParam;
    }

    public Integer getAgeParam() {
        return ageParam;
    }

    public void setAgeParam(Integer ageParam) {
        this.ageParam = ageParam;
    }

    @Override
    public String toString() {
        return "QueryParam{" +
                "nameParam='" + nameParam + '\'' +
                ", ageParam=" + ageParam +
                '}';
    }
}

3.创建ViewStudent实体类

package com.it.vo;

public class ViewStudent {
    private String id;
    private String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "ViewStudent{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}

4.创建StudentDao接口类

package com.it.dao;

import com.it.domain.Student;
import com.it.vo.QueryParam;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface StudentDao {
  //使用mybatis中设置好的Integer的别名int,该方法返回类型为int
    public int countStudents();
    //使用com.it.vo.QueryParam全限定名称的自定义别名qPa,先定义再使用,在mybatis.xml配置文件中定义
   public List<Student> selectStudents1(QueryParam queryParam);

   //使用com.it.domain.Student全限定名称的自定义别名stu,先定义再使用,在mybatis.xml配置文件中定义
    List<Student> selectStudents2(@Param("sDept") String sdept);

    //使用第二种:包定义类名的方式,这个包中的所有类的各自的类名就是别名,
    List<Student> selectStudent3(Student student);
}

5.创建StudentDao接口类的映射文件StudentDao.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="com.it.dao.StudentDao">
<!--使用返回类型为Integer的别名int,下面注释是不使用别名的代码样式 -->
<!--    <select id="countStudents" resultType="java.lang.Integer">-->
    <select id="countStudents" resultType="int">
        select count(*) from student
    </select>

<!--  resultType一般返回类型的全限定名称
 下面注释是不使用别名的代码样式
     <select id="selectStudents1" resultType="com.it.vo.QueryParam">
 -->
<select id="selectStudents1" resultType="qPa">
    select sname,sage from student where  sname=#{nameParam} or sage=#{ageParam}
</select>

    <!--  resultType一般返回类型的全限定名称
     下面注释是不使用别名的代码样式
        <select id="selectStudents2" resultType="com.it.domain.Student">
     -->
   <select id="selectStudents2" resultType="stu">
        select sno,sname,sdept from student where sdept=#{sDept}
    </select>
<!--sage=#{sage}是因为数据库中的字段名和实体类中的属性名是一样的,大括号里面的是属性名-->
    <select id="selectStudent3" resultType="Student">
        select * from student where sage=#{sage}
    </select>


</mapper>



6.创建MyBatis.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>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

<!--    定义别名-->
    <typeAliases>
<!--  可以指定一个类型一个自定义别名
type:自定义类型的全限定名称
alias:自定义别名
-->
<!--        第一种方式-->
        <typeAlias type="com.it.domain.Student" alias="stu"/>
        <typeAlias type="com.it.vo.ViewStudent" alias="vStu"/>
        <typeAlias type="com.it.vo.QueryParam"  alias="qPa"/>
<!--        第二种方式
name是包名,这时,这个包中的所有类的各自的类名就是别名(类名不区分大小写)
-->
        <package name="com.it.domain"/>
        <package name="com.it.vo"/>

<!--        最后介绍,不建议用别名,全限定名称更安全!-->

    </typeAliases>


    <environments default="mydev">
        <environment id="mydev">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com\it\dao\StudentDao.xml"/>
    </mappers>
</configuration>

 7.创建MyBatisUntils工具类

package com.it.untils;

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 java.io.IOException;
import java.io.InputStream;

public class MyBatisUntils {
//    SqlSessionFactory设置静态属性,是因为SqlSessionFactory : 重量级对象,
//    程序创建一个对象耗时比较长,使用资源比较多,在整个项目中,有一个就够用了。
    private static SqlSessionFactory factory = null;
//    静态代码块,在加载该类时运行,且运行一次,避免了多次调用该方法多次运行,节约了时间和空间
    static {
//   测试了一下,虽然我的MyBatis配置文件名称是MyBatis.xml,但是输入mybatis.xml也可以成功运行
//   这个项目是我新建的,不存在调用该工程其他模块的mybatis.xml配置文件的情况,这可以说明这里应该是不区分大小写的
        String config="MyBatis.xml";
        InputStream resourceAsStream=null;
        try {
            resourceAsStream = Resources.getResourceAsStream(config);
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            factory = builder.build(resourceAsStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    //获取SqlSession的方法
    public static SqlSession getSqlSession(){
        SqlSession sqlSession=null;
        if (factory!=null){
            sqlSession = factory.openSession(true);
        }
        return sqlSession;
    }
}

8.创建测试类

package com.it;

import static org.junit.Assert.assertTrue;

import com.it.dao.StudentDao;
import com.it.domain.Student;
import com.it.untils.MyBatisUntils;
import com.it.vo.QueryParam;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

/**
 * Unit test for simple App.
 */
public class AppTest 
{
    @Test
  public void countStudentsTest(){
      SqlSession sqlSession = MyBatisUntils.getSqlSession();
      StudentDao mapper = sqlSession.getMapper(StudentDao.class);
      int i = mapper.countStudents();
      System.out.println(i);
  }

  @Test
    public void selectStudent1Test(){
      SqlSession sqlSession = MyBatisUntils.getSqlSession();
      StudentDao mapper = sqlSession.getMapper(StudentDao.class);

      QueryParam queryParam = new QueryParam();
      queryParam.setNameParam("小明");
      queryParam.setAgeParam(20);

      List<Student> studentList = mapper.selectStudents1(queryParam);
      for (Student stu:studentList){
          System.out.println(stu);
      }

  }

  @Test
    public void selectStudents2Test(){
      SqlSession sqlSession = MyBatisUntils.getSqlSession();
      StudentDao mapper = sqlSession.getMapper(StudentDao.class);
      List<Student> studentList = mapper.selectStudents2("信电");
      for (Student stu:studentList){
          System.out.println(stu);
      }
  }

    @Test
    public void selectStudents3Test(){
        SqlSession sqlSession = MyBatisUntils.getSqlSession();
        StudentDao mapper = sqlSession.getMapper(StudentDao.class);

        Student student = new Student();
        student.setSage(20);

        List<Student> studentList = mapper.selectStudent3(student);
        for (Student stu:studentList){
            System.out.println(stu);
        }
    }




}

数据库内容

1.resultType返回值为Integer的别名int

2.resultType返回值为com.it.vo.QueryParam使用别名qPa

3.resultType返回值为com.it.domain.Student全限定名称的自定义别名stu,

4.使用第二种定义别名的方式:包定义类名的方式,这个包中的所有类的各自的类名就是别名,

如com.it.domain包下的Student类的别名就是它本身的类名,且不区分大小写。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做一道光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值