Mybatis学习记录(三)——Mybatis实现CRUD

2018.4.7

仅为个人理解 不足之处欢迎指正~

在上一篇的基础上完成使用Mybatis进行CRUD的操作

数据库说明:

Mybatis学习记录(三)——Mybatis实现CRUD_第1张图片

在上文中,Student.xml中仅包含一条sql语句


我们首先一次性添加insert delete select(单个) update语句

Mybatis学习记录(三)——Mybatis实现CRUD_第2张图片

完整Student.xml如下:



 
    
    
        
         
         
	        insert into student values (#{id},#{name})    
	    
	    
	    
	        delete from student where id= #{id}   
	    
	    
	    

	    
	        update student set name=#{name} where id=#{id}    
	    
    

下面解释一下代码中的部分问题:

1.sql语句中的  #{} 起到什么作用?

要明白这一点 首先要了解一下动态sql的概念:

动态sql是mybatis的主要特性之一,在mapper中定义的参数传入xml中之后,在查询之前mybatis会对其进行动态解析

mybatis提供了两种支持动态sql的语法:

#{} 与 ${}

下面大概说明一下这两种方式的区别:

在下面这条语句中:

 select * from   student  where id= #{id}   

如果改为:

 select * from   student  where id= ${id}   

如果id的值为2018040701

这两条语句解析之后结果是相同的 均为:

 select * from   student  where id= 2018040701

#{}在预处理中,会把参数部分用一个占位符 ? 代替

sql语句变为:

 select * from   student  where id= ?

而如果使用${} 在解析阶段 只是简单的字符串替换

sql语句变为:

 select * from   student  where id= 2018040701

#{}的参数替换发生在DBMS中 而${}则发生在动态解析过程中

通常情况下:

使用#{}更安全 更迅速 可以防止sql注入

那么什么情况下使用${}

如果你想要实现下面的语句

select * from  #{tablename}

上面已经提到 如果使用#{}的话

sql语句发送过去是这样的:

select * from ?

这样一条带问号的sql语句是需要传递参数的 那么加入我们传入了参数student

那么查询语句就变为:

select * from 'student'

这样的sql语句会导致错误

那么这种时候就需要用到${}

因为${}是直接进行字符串拼接 将语句改为:

select * from ${tablename}

另一种情况是 想要插入一个不改变的字符串 如order by:

order by ${columnname}

这种情况也需要使用${}


最后总结一下:

通常情况下使用#{} 

#{}一般用在用户输入值的地方

${}一般用在需要程序员赋值的地方


2、parameterTyperesultType

parameterType在映射文件中指定输入参数的类型 基本数据类型只能传入一个 通过#{}获取传入的值 复杂数据类型(类、HashMap)通过#{属性名} map中则为#{key}传入参数

resultType指定输出结果的类型



下面更改测试类:

原测试类仅包含selectList一个方法:

package com.tzy.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
 
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 com.tzy.pojo.Student;
 
public class TestMybatis {
 
    public static void main(String[] args) throws IOException {
    	//mybatis配置文件
        String resource = "mybatis-configuration.xml";
        //得到配置文件流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建会话工厂 传入mybatis的配置文件信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session=sqlSessionFactory.openSession();
         
        List cs=session.selectList("listStudent");
        // 冒号是遍历的作用
        for (Student stu : cs) {
            System.out.println(stu.getName()+"   "+stu.getId());
        }
         
    }
}

        Student stu=new Student();
        stu.setId(2018040701);
        stu.setName("李宗盛");
        session.insert("addStudent", stu);

先增加再遍历 可以看到结果 增加成功

package com.tzy.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
 
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 com.tzy.pojo.Student;
 
public class TestMybatis {
 
    public static void main(String[] args) throws IOException {
    	//mybatis配置文件
        String resource = "mybatis-configuration.xml";
        //得到配置文件流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建会话工厂 传入mybatis的配置文件信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session=sqlSessionFactory.openSession();
        Student stu=new Student();
        stu.setId(2018040701);
        stu.setName("李宗盛");
        session.insert("addStudent", stu);
         
        List cs=session.selectList("listStudent");
        // 冒号是遍历的作用
        for (Student a : cs) {
            System.out.println(a.getName()+"   "+a.getId());
        }
        

    }
}

Mybatis学习记录(三)——Mybatis实现CRUD_第3张图片


通过id将刚插入的李宗盛删除:

        Student stu=new Student();
        stu.setId(2018040701);
        session.delete("deleteStudent", stu);

先执行删除 再遍历:

Mybatis学习记录(三)——Mybatis实现CRUD_第4张图片

删除成功

通过id将“周杰伦”改为“林俊杰”

        Student stu=new Student();
        stu.setId(2018040501);
        stu.setName("林俊杰");
        session.delete("updateStudent", stu);

遍历

Mybatis学习记录(三)——Mybatis实现CRUD_第5张图片

修改成功

查(单个 查询多个的方法在上一篇中)

通过selectOne获取id=2018040501的记录:

由于在xml中 单个获取的getStudent的parameterType为int

所以代码如下:

        Student stu=session.selectOne("getStudent",2018040501);
        System.out.println(stu.getId()+"  "+stu.getName());

结果为:



谢谢~

你可能感兴趣的:(JavaWeb,Mybatis)