【学习笔记】Mybatis的使用(动态代理)

动态代理

在开发的过程中只需要写Dao层的接口,无需写其实现类,实现类有框架自己补充。
框架是根据mapper文件自动补充的,
Mapper接口开发需要遵循以下规范:

  1. 接口名要和对应的映射文件的名称相同(只是后缀名不同)
  2. 要在同一目录下面(可以创建一个源文件夹,然后创建一个和src目录下面相同的包,已达到xml和接口分离的作用)

!!!注意!!! 在mybatis-config.xml配置映射时,如果使用<package name="包名">标签或者<​​​​​​mapper class="包名"> 标签的时候,映射文件名必须和接口名一样,目录路径也要一样,否则报错。
原因如下:

1.包扫描形式时。实体类+Mapper接口通过动态代理调用方法

2.调用方法时会找其相应的映射配置文件

3.当多个mapper接口和mapper.xml同时存在,如果没有相同的名称,则动态代理就不能通过其一一对应的依赖配置文件创建其相应的实现方法

在这里插入图片描述
使用<package resource="包名"> 标签的时候,可以无视上面两个规范

  1. 接口的全限定名要和mapper映射文件的namespace 一致

  2. 接口中的方法名要和mapper映射文件中的唯一标识的id相同

  3. 接口的方法返回类型和mapper 映射文件返回的类型一致

  4. 接口的方法参数类型和mapper 映射文件输入类型要一致

使用范例

数据库表结构
在这里插入图片描述
Products类

public class Products {
    private int pid;
    private String pname;
    private int price;
    private int flag;
    private int category_id;
    
    getter setter省略

productsDao接口

public interface ProductsDao {
    public Products findById(int i);
    public void deleteById(int i);
    public  void  insertProducts(Products products);
    public void updateById(@Param("price") int price, @Param("pid") int pid);
}

productsDaoMapper.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.glc.dao.ProductsDao">
    <select id="findById" parameterType="int" resultType="com.glc.bean.Products">
        select * from products where pid = #{pid}
    </select>
    <delete id="deleteById" parameterType="int">
        delete from Products where pid = #{pid}
    </delete>
    <insert id="insertProducts" parameterType="com.glc.bean.Products" >
        insert into Products value(#{pid},#{pname},#{price},#{flag},#{category_id})
    </insert>
    <update id="updateById" parameterType="int" >
        update Products set price = #{price} where pid = #{pid};
    </update>
</mapper>

测试类

//动态代理
@Test
public void TestProducts(){
    SqlSession sqlSession = SessionUtils.getSession();
    ProductsDao mapper = sqlSession.getMapper(ProductsDao.class);
    Products products = mapper.findById(2);
    System.out.println(products);
    sqlSession.close();

}
@Test
public void TestProducts2(){
    SqlSession sqlSession = SessionUtils.getSession();
    ProductsDao mapper = sqlSession.getMapper(ProductsDao.class);
    mapper.deleteById(10001);
    sqlSession.commit();
    sqlSession.close();

}
@Test
public void TestProducts3(){
    SqlSession sqlSession = SessionUtils.getSession();
    ProductsDao mapper = sqlSession.getMapper(ProductsDao.class);
    Products products = new Products(10002, "apples", 6000, 1, 1);
    mapper.insertProducts(products);
    sqlSession.commit();
    sqlSession.close();

}
@Test
public void TestProducts4(){
    SqlSession sqlSession = SessionUtils.getSession();
    ProductsDao mapper = sqlSession.getMapper(ProductsDao.class);
    mapper.updateById(10000,100);
    sqlSession.commit();
    sqlSession.close();

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值