List<Student> students=dao.queryStudent("李四");
==> Preparing: select id,name ,email,age from student where name =李四
数据是原样使用的,查询sql语句的时候会出错
需要加上‘ ’
List<Student> students=dao.queryStudent("’李四’");
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);
/* 多个简单类型参数,查询多条记录,使用@Param命名参数,注解是mybatis提供的
位置:在形参定义的前面
属性:value 自定义的参数名称 value可以省略
*/
List<Student> selectByNameOrAge(@Param(value="myname") String name,
@Param("myage") Integer age);
/*
一个java对象作为参数(对象有属性,每个属性有对应的set,get方法)
*/
List<Student> selectByObject(Student student);
//对象不局限于实体类,他可以是任意的一个实体类,有属性,有Sett Gett方法就能使用
List<Student> selectByQueryParama(QueryParama parama);
//使用位置获取参数
List<Student> selectByPosition(String name,Integer age);
/*
使用Map作为参数
*/
List<Student> selectStudentByMap(Map<String,Object> map);
//更新
int updateStudent(Student student);
//${}占位符的使用查询 ,使用@Param命名
List<Student> queryStudent(@Param("studentName") String name);
//按id排序
List<Student> queryStudentOrderById();
//按照name排序
List<Student> queryStudentOrderName();
//传入利用占位符特定参数查询
List<Student> queryStudentOrderByColName(@Param("myname") String name,
@Param("colName") String colName,
@Param("tableName") String tableName);
}
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.bjpowernode.dao.StudentDao">
<!--使用insert,update,delete,select标签来写sql语句-->
<!--
parameterType:指定dao接口形参的类型:这个属性的值可以使用java类型的全限定名称或者 myBatis定义的别名
mybatis执行sql语句:select id,name ,email,age from student where id=?
?是占位符,使用jdbc中的PreparedStatement执行这样的语句
PreparedStatement pst=conn.preparedStatement("select id,name ,email,age from student where id=? ");
给 ? 位置赋值
如果:
参数是Integer,执行pst.setInt(1,1005)
参数是String ,执行pst.setString(1,"1005")
第一个用法:java是全限定类型名称 parameterType="java.lang.Integer"
第二个用法:mybatis定义的Java类型的别名 parameterType=“int”
parameterType:mybatis通过反射机制可以获取 dao接口方法参数的类型,可以不写
-->
<!--告诉MyBatis传入的参数是一个整数,dao接口方法的参数是一个整形-->
<select id="selectById" parameterType="java.lang.Integer" resultType="student">
select id,name ,email,age from student where id=#{studentid}
</select>
<!--
dao接口是一个简单的参数
mapper文件,获取这个参数值,使用#{任意字符}
-->
<select id="selectByEmail" resultType="com.bjpowernode.domain.Student">
select id,name ,email,age from student where email=#{studentEmail}
</select>
<!--
dao接口方法有多个简单类型的参数
当使用了@Param命名后,,例如@Param("myname")
在mapper文件中,使用#{命名的参数} 例如#{myname}
-->
<select id="selectByNameOrAge" resultType="com.bjpowernode.domain.Student">
select id,name ,email,age from student where name =#{myname} or age=#{myage}
</select>
<!--
一个java对象作为方法的参数,使用对象的属性作为参数值使用
简单语法:#{属性名} mybatis调用此属性的getXXX()方法获取属性值
-->
<select id="selectByObject" resultType="com.bjpowernode.domain.Student">
select id,name ,email,age from student where name =#{name} or age=#{age}
</select>
<!-- 一般不用这么写,太麻烦了-->
<!-- <select id="selectByObject" resultType="com.bjpowernode.domain.Student">-->
<!-- 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}-->
<!-- </select>-->
<!--另一个类的对象Sql语句-->
<select id="selectByQueryParama" resultType="com.bjpowernode.domain.Student">
select id,name ,email,age from student where name =#{p1} or age=#{p2}
</select>
<!-- 按位置获取参数值,dao接口方法是多个简单类型参数
语法:#{arg0},#{arg1}
arg0代表name
arg1代表age
-->
<select id="selectByPosition" resultType="com.bjpowernode.domain.Student">
select id,name ,email,age from student where name =#{arg0} or age=#{arg1}
</select>
<!--使用map传递参数
在mapper文件中,获取map的值,是通过key获取的,语法:#{key}
-->
<select id="selectStudentByMap" resultType="com.bjpowernode.domain.Student">
select id,name ,email,age from student where name =#{myname} or age=#{myage}
</select>
<!--更新-->
<update id="updateStudent">
update student set name=#{name},email=#{email} where id=#{id}
</update>
<!-- ${}占位符-->
<select id="queryStudent" resultType="com.bjpowernode.domain.Student">
select id,name ,email,age from student where name =${studentName}
</select>
<!-- id列排序-->
<select id="queryStudentOrderById" resultType="com.bjpowernode.domain.Student">
select * from student order by id
</select>
<!-- name列排序-->
<select id="queryStudentOrderName" resultType="com.bjpowernode.domain.Student">
select * from student order by name
</select>
<!--传入利用占位符特定参数查询-->
<select id="queryStudentOrderByColName" resultType="com.bjpowernode.domain.Student">
select * from ${tableName} where name=#{myname} order by ${colName} desc
</select>
</mapper>
测试类,MyTest2类:
package com.bjpowernode;
import com.bjpowernode.dao.StudentDao;
import com.bjpowernode.domain.Student;
import com.bjpowernode.utils.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class MyTest2 {
//${}占位符使用查询
@Test
public void testQueryStudent(){
//获取SqlSession
SqlSession session= MybatisUtil.getSqlSession();
//获取dao代理
StudentDao dao=session.getMapper(StudentDao.class);
//调用方法 注意李四要加单引号
List<Student> students=dao.queryStudent("'李四'");
students.forEach(stu-> System.out.println("stu"+stu));
//4.关闭SqlSession对象
session.close();
}
//查询,按id排序
@Test
public void testQueryOrderById(){
//获取SqlSession
SqlSession session= MybatisUtil.getSqlSession();
//获取dao代理
StudentDao dao=session.getMapper(StudentDao.class);
//调用方法
List<Student> students=dao.queryStudentOrderById();
students.forEach(stu-> System.out.println("stu"+stu));
//4.关闭SqlSession对象
session.close();
}
//查询,按name排序
@Test
public void testQueryOrderByName(){
//获取SqlSession
SqlSession session= MybatisUtil.getSqlSession();
//获取dao代理
StudentDao dao=session.getMapper(StudentDao.class);
//调用方法
List<Student> students=dao.queryStudentOrderName();
students.forEach(stu-> System.out.println("stu"+stu));
//4.关闭SqlSession对象
session.close();
}
//传入多个参数
@Test
public void testQueryOrderByColName(){
//获取SqlSession
SqlSession session= MybatisUtil.getSqlSession();
//获取dao代理
StudentDao dao=session.getMapper(StudentDao.class);
//调用方法
List<Student> students=dao.queryStudentOrderByColName("李四","id","student");
students.forEach(stu-> System.out.println("stu"+stu));
//4.关闭SqlSession对象
session.close();
}
}
测试结果1:
2.
3.
4.