java中使用MyBatis,简单实例学习MyBatis框架

一、定义
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文件夹下)
在这里插入图片描述

<?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.java.dao.ceshiDao">
<!-- 数据库信息查询表  -->
    <select id="ceshixxcx"  resultType="map" >
    select * from ceshi
        </select>
</mapper>

在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<Map<String, Object>> ceshixxcx();
}

最后,在Java的启动类里面调用Dao层定义好的ceshixxcx

//定义
@Autowired
private ceshiDao csDao;
//调用 获取数据,其中定义的ceshiResults的数据类型要和Dao中ceshixxcx的数据类型一致
List<Map<String, Object>> ceshiResults= null;
ceshiResults= csDao.ceshixxcx();
//循环获取每一条数据
for(Map<String, Object> csxx:ceshiResults){
//这里就可以使用获取每一条数据的每个你想获取的对应列值
String a = csxx.get("T1").toString();
...
}

三、MyBatis中xml文件写法注意点
如果sql中有一些特殊字符的话,在解析xml文件的时候就会被转义,因为 在mybatis中sql是写在xml映射文件中。
所以不注意这个点的话,有时候写sql语句在xml里面却提示错误 比如(select * ceshi t where t.t1<1 )
正确的写法是,
**方法一:**将">“这个特殊字符转义,使用”< “替换” <"

<?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.java.dao.ceshiDao">
<!-- 数据库信息查询表  -->
    <select id="ceshixxcx"  resultType="map" >
    select * from ceshi &lt; 1
        </select>
</mapper>

那么sql语句中用到全部需要注意的特殊字符有哪些呢?
这里全部列出来,将其对应的替换即可。

<   -----------------   &lt;     ------小于
>   -----------------   &gt;    -------大于
<=  -----------------   &le;     ------小于
>=  -----------------   &ge;    -------大于
'   -----------------   &apos;   ------单引号
"   -----------------   &quot;  -------引号
“   -----------------   &lquot; -------左双引号
”   -----------------   &rquot; -------右双引号
‘   -----------------   &lapos;  ------左单引号
’   -----------------   &rapos;  ------右单引号

**方法二:**使用<![CDATA[ ]]>符号 将 “<”放在 <![CDATA[ ]]> 中 ,(其他特殊字符也一样)

<?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.java.dao.ceshiDao">
<!-- 数据库信息查询表  -->
    <select id="ceshixxcx"  resultType="map" >
    select * from ceshi <![CDATA[ < ]]> 1
        </select>
</mapper>

四、使用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):

<?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.java.dao.ceshiDao">
<!-- 数据库信息查询表  -->
       <update id="updateceshixx" parameterType="java.lang.VARCHAR" >
    update ceshi
    set t1 = #{t1,jdbcType=VARCHAR}
  </update>
</mapper>

(注意 #{t1,jdbcType=VARCHAR} 中的t1必须是数据表中的列名;jdbcType的类型必须与中的parameterType一致且要注意和数据库类型一致;Dao层和主类调用的赋给变量的类型要与前面两个的变量类型一致)

如果是要其他类型比如整形,就将类型全部改成jdbcType=INTEGER、

2、根据变量查询对应数据
调用是一样的,我就只复制不同的:(其中,如果查询出来的数据只有一条,可以直接这样定义:Map<String, Object> ceshixx_id(INTEGER t2);
在mapper中的xml(对应id):

       <select id="ceshixx_id" resultType="map"  parameterType="java.lang.INTEGER" >
    select * from ceshi
    where  t2 = #{t2,jdbcType=INTEGER}
  </select >

Dao层定义:

List<Map<String, Object>> ceshixx_id(INTEGER t2);

主类调用:

Integer n =1;
List<Map<String, Object>> 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<Map<String, Object>> ceshixxcx();
Int updateceshixx(String t1);
List<Map<String, Object>> ceshixx_id(INTEGER t2);
}

对应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.java.dao.ceshiDao">
<!-- 数据库信息查询表  -->
    <select id="ceshixxcx"  resultType="map" >
    select * from ceshi
        </select>
        <update id="updateceshixx" parameterType="java.lang.VARCHAR" >
    update ceshi
    set t1 = #{t1,jdbcType=VARCHAR}
  </update>
   <select id="ceshixx_id" resultType="map"  parameterType="java.lang.INTEGER" >
    select * from ceshi
    where  t2 = #{t2,jdbcType=INTEGER}
  </select >
</mapper>

注意: resultType=“map” 输出数据类型;parameterType=“java.lang.INTEGER” 输入数据(变量)类型;(根据对应的需要查看是否写上这两个)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值