MyBatis使用

一、xml方式

需要 mapper.java(接口文件)和 mapper.xml(配置文件),SQL写在 mapper.xml 文件中

使用select标签

查询操作

<!--                                                                     
	select标签:查询操作                                                            
	id属性(必须要):statement的id,用于表示定义的SQL,
					在同一个命名空间中id是不允许重复的,对应接口文件中的方法名         
	#{XXX}:输入参数的占位符,避免SQL注入                                                  
	parameterType/parameterMap:输入参数类型                                       
    parameterType:基本数据类型、自定义类型                                           
    parameterMap:Map类型(key value)                                        
 	resultType/resultMap:指定结果集类型                                            
-->                                                                      
<select id="selectStudentById" parameterType="int" resultType="student" >
    select * from Student where SID = #{id}                              
</select>                                                                
  • 返回结果集可以使用 resultTyperesultMap 两种
    (1) 数据库表的列名java映射类的属性名如果一致时,可以使用resultType和resultMap处理都可以
    (2) 表列名类属性名 存在不一致时,需要使用 resultMap来手动实现映射过程。
<!--                                                                      
	resultMap标签是自定义返回结果,当返回结果集指定为resultMap时使用该标签                              
	id:取名字 select操作是结果集通过resultMap属性指定时使用该id属性                                
	type属性:要映射的Java类的全路径                                                      
	id/result:对结果的自定义映射                                                       
	id标签:主键使用该标签,结果集中只能设定一个id标签                                               
	result:处理非主键标签                                                             
-->                                                                       
<resultMap id="studentResult" type="student">                             
    <id property="" column=""/>                                           
    <!--                                                                  
    	id/result标签的属性介绍                                                      
   		property:指定Java类中的属性名                                                 
    	column:(必须)指定数据库中列名                                                   
    	JavaType:(可省略)指定Java属性类型                                              
    	jdbcType:(可省略)指定数据库中列名属性                                              
    	typeHandler:(可省略)指定类型转换器                                              
    -->                                                                   
    <result property="" column="" javaType="" jdbcType="" typeHandler=""/>
</resultMap> 

<select id="selectStudentById" parameterType="int" resultMap="studentResult" >
        select * from Student where SID = #{id}
</select>                                                             
  • 不管对于单个对应的映射还是多个对象的映射,resultTyperesultMap 只关注映射的对象类型,查询操作会根据是单个对象则选取 selectOne 方法执行,返回 多个对象 则使用 selectList 方法来执行。
  • 插入对象的写法
<insert id="addStudent" parameterType="student">
	insert into Student (SID,Sname,Sage,Ssex) values
	(#{id},#{Sname},#{Sage},#{Ssex} )
</insert>
  • 多参数传递接口:public int updateNameById(String name,Integer id);
    在这里插入图片描述
  • 通过参数传递的name是不能被mybatis识别的,mybatis中多参数提供的有0,1,parm1parm2作为参数,为了解决这种多参数传递可以使用 @Param 注解来对参数进行绑定:
    public int updateNameById(@Param("name") String name,@Param("id") Integer id);
    这种实现是通过参数形式,底层是通过map的实现方式进行参数传递,其中map的key即为注解中的名称value即为名称对应的值

基于xml形式需要遵循一定的规则:

  1. xml配置文件中的命名空间和指向接口文件的地址(全路径)
  2. mapper.java接口文件中的方法名和mapper.xml中Statement的 id 保持一致
  3. mapper.java接口中方法参数和mapper.xml中Statement的 parameterTypeparameterMap 的类型一致
  4. mapper.java接口中方法返回值类型和mapper.xml中mapper.xml文件中Statement的 resultTyperesultMap 类型一致在这里插入图片描述

二、注解方式

创建表对应的pojo类型

  1. 给定mapper.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,命令空间:保证命名空间唯一,一般是对应的mapper.java的包全路径-->
<mapper namespace="mapper.CourseMapper">
</mapper>
  1. 全局配置文件中引入mapper.xml
<mappers>
    <!--resource:配置单个映射文件,
    mapper.java接口文件和mapper.xml文件可以不在同一路径下且名称可以不同
    -->
    <mapper resource="mapper/CourseMapper.xml"/><!--相对路径-->
</mappers>
  1. 接口文件,SQL都在注解上,且注解存在mapper.java文件
public interface CourseMapper {
    /**
     * @Select 注解即xml配置文件中的select标签
     *
     * @Results注解和xml 配置文件中ResultMap标签使用类似
     */
    @Results(id = "CourseResult",
            value = {
                    @Result(column = "CID" ,property = "CID"),
                    @Result(column = "Cname",property = "cname"),
                    @Result(column = "TID", property = "TID")
            })
    @Select("select * from Course where CID = #{CID}")
    public Course selectCourseById(Integer CID);

    @Insert("insert Course (Cname,TID) values(#{Cname},#{TID})")
    public int addCourse(Course course);
}                          

#{} 和 ${} 的区别?

使用

  1. #{}
    select * from Course where CID = #{CID}
    接口方法:
    public Course selectCourseById(Integer CID);
    通过日志可知,在执行过程中,占位符 #{XX} 被替换为 ?,且SQL参数分别传递,类似于JDBC中的PraperteStatement使用。
    在这里插入图片描述
  2. ${}
    在这里插入图片描述
    在这里插入图片描述
    方法参数的传递是通过 ognl 表达式进行解析的,需要调用参数的 getter 方法,因此参数必须有getter存在的。使用 ${}打印日志如下:
    在这里插入图片描述
    参数直接拼接在SQL上,和JDBC中的Statement类似。
  3. 安全性:
    使用 #{}可以防止SQL注入问题
    使用 ${}不能解决SQL注入问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值