Mybatis_05/27

动态代理优化代码:

  List<student> studentList=dao. selectstudents(); 的调用

1.dao对象,类型是studentDao,全限定名称是: com.bjipowernode.dao.StudentDao
  全限定名称和namespace是一样的。

2.方法名称,selectstudents,这个方法就是mapper文件中的id值selectstudents

3.通过dao中方法的返回值也可以确定MyBatis要调用的sqlSession的方法
  如果返回值是List,调用的是sqlSession. selectList()方法。
  如果返回值int, 或是非List,则mapper文件中的 标签是<insert>,<update>就会调用sqlSession的insert,update等方法

  mybatis的动态代理: mybatis 根据dao的方法调用,获取执行sql语句的信息。
  mybatis根据你的dao接口,创建出一个dao接口的实现类,并创建这个类的对象。
  完成sqlSession调用方法,访问数据库。

不需要实现类,利用动态代理实现

Test

package com.sdut;

import com.sdut.dao.StudentDao;
import com.sdut.entity.Student;
import com.sdut.utils.MybatisUtils;
import com.sdut.vo.QueryParam;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class MybatisTest {
    /**
     * 使用mybatis的动态代理机制,使用SqlSession.getMapper(接口)
     * getMapper能获得dao接口的实现类对象
     */
    @Test
    public void testselectAllStudents() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentDao dao = sqlSession.getMapper(StudentDao.class);
        
        List<Student> studentList = dao.selectAllStudents();
        for(Student stu : studentList) {
            System.out.println(stu);
        }
    }

    @Test
    public void testinsertStudent() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentDao dao = sqlSession.getMapper(StudentDao.class);

        Student student = new Student();
        student.setId(1004);
        student.setName("悟空");
        student.setEmail("huaguoshan.com");
        student.setAge(500);

        int result = dao.insertStudent(student);
        sqlSession.commit();
        sqlSession.close();
        System.out.println("结果为:" + result);
    }

    @Test
    public void testdeleteStudentById() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentDao dao = sqlSession.getMapper(StudentDao.class);

        int result = dao.deleteStudentById(1004);
        sqlSession.commit();
        sqlSession.close();
        System.out.println("结果为:" + result);
    }

    @Test
    public void testselectStudentById() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentDao dao = sqlSession.getMapper(StudentDao.class);

        Student student = dao.selectStudentById(1003);
        System.out.println(student);
    }

    @Test
    public void testselectMutilParam() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentDao dao = sqlSession.getMapper(StudentDao.class);
        List<Student> studentList = dao.selectMutilParam("三藏", 500);
        for(Student stu : studentList) {
            System.out.println(stu);
        }
    }

    @Test
    public void testselectMutilparam2() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentDao dao = sqlSession.getMapper(StudentDao.class);
        QueryParam param = new QueryParam();
        param.setParamAge(500);
        param.setParamName("三藏");
        dao.selectMutilParam2(param);
    }

    @Test
    public void testselectMutilparam3() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentDao dao = sqlSession.getMapper(StudentDao.class);
        Student student = new Student();
        student.setAge(500);
        student.setName("三藏");
        dao.selectMutilParam3(student);
    }
}

使用#{}传参

一个简单类型的参数:

  • 简单类型:java基本数据类型+String
  • mapper获取简单类型的一个参数值 #{任意字符}

传多个参数

可使用命名方式或Java对象传参

StudentDao:

package com.sdut.dao;

import com.sdut.entity.Student;
import com.sdut.vo.QueryParam;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface StudentDao {
    /**
     *  一个简单类型的参数:
     *    简单类型:java基本数据类型+String
     *
     *    mapper获取简单类型的一个参数值 #{任意字符}
     */
    //根据Id查询
    Student selectStudentById(Integer id);
    //传入多个参数,使用@Param命名
    List<Student> selectMutilParam(@Param("Name") String name, @Param("Age") Integer age);
    //传入多个参数,使用Java对象作为参数
    List<Student> selectMutilParam2(QueryParam param);
    //使用Student类实现👆
    List<Student> selectMutilParam3(Student student);

    //查询所有
    List<Student> selectAllStudents();
    //插入
    int insertStudent(Student student);
    //删除
    int deleteStudentById(Integer id);
}

QueryParam:

package com.sdut.vo;

public class QueryParam {
    private String paramName;
    private Integer paramAge;

    public String getParamName() {
        return paramName;
    }

    public void setParamName(String paramName) {
        this.paramName = paramName;
    }

    public Integer getParamAge() {
        return paramAge;
    }

    public void setParamAge(Integer paramAge) {
        this.paramAge = paramAge;
    }
}

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.sdut.dao.StudentDao">
    <!-- parameterType不加影响运行速度 -->
    <select id="selectStudentById" parameterType="integer" resultType="com.sdut.entity.Student">
        select * from student where id=#{id}
    </select>
    <!-- 多个参数,使用@Param命名 -->
    <select id="selectMutilParam" resultType="com.sdut.entity.Student">
        select * from student where name=#{Name} or age=#{Age}
    </select>
    <!--
        多个参数,使用Java对象属性值,作为参数实际值
            完整语法格式(很少用):#{属性名, javaType=类型名称, jdbcType=数据类型}
                                javaType: Java中属性数据类型
                                jdbcType: 数据库中的数据类型
            例如:name=#{paramName, javaType=java.lang.String,jdbcType=VARCHAR}
                 or age=#{paramAge, javaType=java.lang.Integer, jdbcType=INTEGER}

            利用反射机制可简化操作:
            简化版:#{属性名} javaType, jdbcType反射可获取,不用提供
            例如:name=#{paramName} or age=#{paramAge}
       -->
    <select id="selectMutilParam2" resultType="com.sdut.entity.Student">
        select * from student where name=#{paramName} or age=#{paramAge}
    </select>
    <select id="selectMutilParam3" resultType="com.sdut.entity.Student">
        select * from student where name=#{name} or age=#{age}
    </select>

    <insert id="insertStudent">
        insert into student values(#{id}, #{name}, #{email}, #{age})
    </insert>
    <select id="selectAllStudents" resultType="com.sdut.entity.Student">
        select * from student order by id
    </select>
    <delete id="deleteStudentById" parameterType="integer">
        delete from student where id=#{id}
    </delete>
</mapper>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值