一、定义
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
二、java使用mybatis调用数据库的整体思路
(启动类调用Dao层–Dao层调用对应的Mapper)
在mybatis中sql是写在xml映射文件中的,所以在Java中调用数据库的数据使用mybatis是这样写的(xml文件都放在mapper文件夹下)
select * from ceshi
在xml中namespace指定对应的调用Dao层
(注意,Dao层定义的名字ceshixxcx要和其调用的xml文件中的对应sql模块的id相同)
package com.java.dao;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Repository;
import com.dcits.model.ceshi;
@Repository
public interface ceshiDao{
List> ceshixxcx();
}
最后,在Java的启动类里面调用Dao层定义好的ceshixxcx
//定义
@Autowired
private ceshiDao csDao;
//调用 获取数据,其中定义的ceshiResults的数据类型要和Dao中ceshixxcx的数据类型一致
List> ceshiResults= null;
ceshiResults= csDao.ceshixxcx();
//循环获取每一条数据
for(Map csxx:ceshiResults){
//这里就可以使用获取每一条数据的每个你想获取的对应列值
String a = csxx.get("T1").toString();
...
}
三、MyBatis中xml文件写法注意点
如果sql中有一些特殊字符的话,在解析xml文件的时候就会被转义,因为 在mybatis中sql是写在xml映射文件中。
所以不注意这个点的话,有时候写sql语句在xml里面却提示错误 比如(select * ceshi t where t.t1<1 )
正确的写法是,
**方法一:**将">“这个特殊字符转义,使用”< “替换”
select * from ceshi < 1
那么sql语句中用到全部需要注意的特殊字符有哪些呢?
这里全部列出来,将其对应的替换即可。
< ----------------- < ------小于
> ----------------- > -------大于
<= ----------------- ≤ ------小于
>= ----------------- ≥ -------大于
' ----------------- ' ------单引号
" ----------------- " -------引号
“ ----------------- &lquot; -------左双引号
” ----------------- &rquot; -------右双引号
‘ ----------------- &lapos; ------左单引号
’ ----------------- &rapos; ------右单引号
**方法二:**使用符号 将 “ 中 ,(其他特殊字符也一样)
如
select * from ceshi 1
四、使用mybatis带变量操作数据库
理解了一二点;直接例子说明怎么使用变量:
在主类给一个变量调用的:
1、根据变量更新/插入数据库,这里只写更新(插入就将update改为insert即可)
@Autowired
private ceshiDao csDao;
---------------
String num ='123';
csDao.updateceshixx(num) ;
在Dao层定义(对应名字):
package com.java.dao;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Repository;
import com.dcits.model.ceshi;
@Repository
public interface ceshiDao{
Int updateceshixx(String t1);
}
在mapper中的xml(对应id):
update ceshi
set t1 = #{t1,jdbcType=VARCHAR}
(注意 #{t1,jdbcType=VARCHAR} 中的t1必须是数据表中的列名;jdbcType的类型必须与中的parameterType一致且要注意和数据库类型一致;Dao层和主类调用的赋给变量的类型要与前面两个的变量类型一致)
如果是要其他类型比如整形,就将类型全部改成jdbcType=INTEGER、
2、根据变量查询对应数据
调用是一样的,我就只复制不同的:(其中,如果查询出来的数据只有一条,可以直接这样定义:Map ceshixx_id(INTEGER t2);
在mapper中的xml(对应id):
select * from ceshi
where t2 = #{t2,jdbcType=INTEGER}
Dao层定义:
List> ceshixx_id(INTEGER t2);
主类调用:
Integer n =1;
List> ceshixx_idResults= null;
ceshixx_idResults=csDao.ceshixx_id(n) ;
其中,如果要将获取到的某个object类型的值转换成整形,可以这样做:
Integer n2 =0;
n2 = Integer.parseInt(ceshixx_idResults.get("T3").toString());
3.整合;
Dao层和xml同一个表的可以就放在同一个文件中:
如:
Dao层,整合:
package com.java.dao;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Repository;
import com.dcits.model.ceshi;
@Repository
public interface ceshiDao{
List> ceshixxcx();
Int updateceshixx(String t1);
List> ceshixx_id(INTEGER t2);
}
对应XML:
select * from ceshi
update ceshi
set t1 = #{t1,jdbcType=VARCHAR}
select * from ceshi
where t2 = #{t2,jdbcType=INTEGER}
注意: resultType=“map” 输出数据类型;parameterType=“java.lang.INTEGER” 输入数据(变量)类型;(根据对应的需要查看是否写上这两个)