当方法参数较多时,使用对象,对象只要有属性,每个属性有set,get方法
属性名必须和表的列名相同,否则返回的对象的属性为空
select id,name ,email,age from student where
name =#{name,javaType=java.lang.String,jdbcType=VARCHAR}
or
age=#{age,javaType=java.lang.Integer,jdbcType=INTEGER}
这个方式不推荐使用,
:可读性不好,arg0和arg1不清晰是什么值
:List
方添加了一个参数,结果错误
:select id,name ,email,age from student where name =#{arg0} or age=#{arg1}
当arg1和arg0换位置,会影响结果
不推荐使用,Map集合,
:List
并不清楚Map的参数有几个,也不知道参数的类型
:select id,name ,email,age from student where name =#{myname} or age=#{myage}
通过key获取值,key值不具有统一性
StudentDao接口:
package com.bjpowernode.dao;
import com.bjpowernode.domain.Student;
import com.bjpowernode.vo.QueryParama;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
public interface StudentDao {
//查询学生
Student selectById(Integer id);
//dao接口的方法是一个简单类型的 java基本数据类型 和字符串
Student selectByEmail(String email);
List selectByNameOrAge(@Param(value="myname") String name,
@Param("myage") Integer age);
List selectByObject(Student student);
//对象不局限于实体类,他可以是任意的一个实体类,有属性,有Sett Gett方法就能使用
List selectByQueryParama(QueryParama parama);
//使用位置获取参数
List selectByPosition(String name,Integer age);
List selectStudentByMap(Map map);
//更新
int updateStudent(Student student);
//${}占位符的使用查询 ,使用@Param命名
List queryStudent(@Param("studentName") String name);
//按id排序
List queryStudentOrderById();
//按照name排序
List queryStudentOrderName();
//传入利用占位符特定参数查询
List queryStudentOrderByColName(@Param("myname") String name,@Param("colName") String colName,@Param("colName") String tableName);
}
StudentDao.xml:
select id,name ,email,age from student where id=#{studentid}
Student类:
package com.bjpowernode.domain;
public class Student {
//属性名和列明保持一致
private Integer id;
private String name;
private String email;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "学生实体信息{" +
"id=" + id +
", name='" + name + ''' +
", email='" + email + ''' +
", age=" + age +
'}';
}
}
MyBatistUtil工具类:
package com.bjpowernode.utils;
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 MybatisUtil {
private static SqlSessionFactory factory=null;
// 通过静态代码块,当MybatisUtil类被虚拟机加载的时候,就执行以下代码,把SqlSessionFactory factory创建一次
//读取主配置文件
static{
try{
String config="mybatis.xml";
InputStream inputStream = Resources.getResourceAsStream(config);
factory=new SqlSessionFactoryBuilder().build(inputStream);
}catch(IOException e){
e.printStackTrace();
}
}
//创建方法,获取SqlSession对象
public static SqlSession getSqlSession(){
SqlSession session=null;
if (factory!=null){
session=factory.openSession();//openSession(true)
}
return session;
}
}
QueryParama类:
package com.bjpowernode.vo;
public class QueryParama {
private Object p1;
private Object p2;
public Object getP1() {
return p1;
}
public void setP1(Object p1) {
this.p1 = p1;
}
public Object getP2() {
return p2;
}
public void setP2(Object p2) {
this.p2 = p2;
}
}
主配置文件MyBatis.xml:
测试类MyTest:
package com.bjpowernode;
import com.bjpowernode.dao.StudentDao;
import com.bjpowernode.domain.Student;
import com.bjpowernode.utils.MybatisUtil;
import com.bjpowernode.vo.QueryParama;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MyTest {
//查询测试
@Test
public void testSelectById(){
//获取SqlSession
SqlSession session= MybatisUtil.getSqlSession();
//获取dao代理
StudentDao dao=session.getMapper(StudentDao.class);
//调用方法
Student student=dao.selectById(1005);
System.out.println("student="+student);
//4.关闭SqlSession对象
session.close();
}
//方法一个参数,查询测试
@Test
public void testOneParameterSelectEmail(){
//获取SqlSession
SqlSession session= MybatisUtil.getSqlSession();
//获取dao代理
StudentDao dao=session.getMapper(StudentDao.class);
//调用方法
Student student=dao.selectByEmail("lifeng@qq.com");
System.out.println("email=="+student);
//4.关闭SqlSession对象
session.close();
}
//方法多个参数,查询测试
@Test
public void testSelectByNameOrAge(){
//获取SqlSession
SqlSession session= MybatisUtil.getSqlSession();
//获取dao代理
StudentDao dao=session.getMapper(StudentDao.class);
//调用方法
List students=dao.selectByNameOrAge("李四",26);
students.forEach(stu-> System.out.println("stu"+stu));
//4.关闭SqlSession对象
session.close();
}
//方法参数传递一个对象Student,查询测试
@Test
public void testSelectByObject(){
//获取SqlSession
SqlSession session= MybatisUtil.getSqlSession();
//获取dao代理
StudentDao dao=session.getMapper(StudentDao.class);
Student student=new Student();
student.setName("李思思");
student.setAge(22);
//调用方法
List students=dao.selectByObject(student);
students.forEach(stu-> System.out.println("stu"+stu));
//4.关闭SqlSession对象
session.close();
}
//QueryParama类作为对象,查询测试
@Test
public void testSelectByObject2(){
//获取SqlSession
SqlSession session= MybatisUtil.getSqlSession();
//获取dao代理
StudentDao dao=session.getMapper(StudentDao.class);
QueryParama parama=new QueryParama();
parama.setP1("东皇");
parama.setP2(20);
//调用方法
List students=dao.selectByQueryParama(parama);
students.forEach(stu-> System.out.println("stu"+stu));
//4.关闭SqlSession对象
session.close();
}
//按位置进行传递参数查询,测试
@Test
public void testSelectByPosition(){
//获取SqlSession
SqlSession session= MybatisUtil.getSqlSession();
//获取dao代理
StudentDao dao=session.getMapper(StudentDao.class);
//调用方法
List students=dao.selectByPosition("李四",20);
students.forEach(stu-> System.out.println("stu"+stu));
//4.关闭SqlSession对象
session.close();
}
//使用Map传递参数查询,测试
@Test
public void testSelectByMap(){
//获取SqlSession
SqlSession session= MybatisUtil.getSqlSession();
//获取dao代理
StudentDao dao=session.getMapper(StudentDao.class);
//使用Map传递参数
Map data=new HashMap<>();
data.put("myname","李思思");
data.put("myage",20);
//调用方法
List students=dao.selectStudentByMap(data);
students.forEach(stu-> System.out.println("stu"+stu));
//4.关闭SqlSession对象
session.close();
}
//更新,测试
@Test
public void testUpdateStudent(){
//获取SqlSession
SqlSession session= MybatisUtil.getSqlSession();
//获取dao代理
StudentDao dao=session.getMapper(StudentDao.class);
Student student=new Student();
student.setId(1003);
student.setName("张峰");
student.setEmail("zhangfeng@qq.com");
student.setAge(20);
//调用方法
int rows=dao.updateStudent(student);
//提交
session.commit();
System.out.println("更新学生的rows="+rows);
//4.关闭SqlSession对象
session.close();
}
}
第一个测试结果:
2:
3.
4.
5.
6.
7.
8.



