Mybatis是一个十分灵活的持久层框架,它提供了使用原生sql语句和封装好的java类对数据库进行读写的方式。面对这3中方式又该如何选择?
第一种方法,使用接口继承BaseMapper
1.这是要用到的实体类
@Data
public class Orders {}//实体类字段略
2.定义继承BaseMapper的接口
@Mapper
public interface OrdersMapper extends BaseMapper<Orders>{}//继承并定义mapper
3.使用mapper和wrapper进行查询(示例)
@Service
@Transactional
public class OrdersSer
{
@Autowired
OrdersMapper ordersMapper;//注入mapper
public Orders GetOrders(Long time)
{
QueryWrapper<Orders> ordersQueryWrapper=new QueryWrapper<Orders>() //使用wrapper进行条件设置
.eq("time",time); //eq即equal,相当于sql语句中的=
Orders orders=ordersMapper.selectOne(ordersQueryWrapper);//wrapper和mapper配合使用进行查询
return orders;
}
}
这种方法的好处是避免了编写sql语句,自动化程度较高。缺点是在调用sql内置函数时不太方便,如sum()等。所以这种方法适用于比较简单的sql业务。
第二种方法,使用@Select等注解
@Mapper
public interface SQLMapper
{
@Insert("Insert into item_type values(#{type})")
void InsertTypes(@Param("type") String type);
}
这种方法要求自行编写sql语句,灵活性较第一种方法更高。也可以直接调用sql内置的函数,适合在第一种方法不太方便的情况下使用。缺点是在面对较长的sql语句时可读性会降低。
第三种方法,使用xml文件编写sql语句
1.在application.yml中配置xml文件的扫描路径
mybatis-plus:
mapper-locations: classpath:Mapper/*.xml
2.在mapper接口中声明函数
@Mapper
public interface ItemMapper
{
Item GetItem();
}
3.在xml文件中编辑sql语句,并指定要代理的接口中的函数。同时,配置命名空间和返回类型等参数。其中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="Cat.MVC.DAO.Entity.Def.ItemDetailMapper">
<select id="GetItem" resultType="Cat.MVC.DAO.Entity.View.Item">
select * from Item
</select>
</mapper>
这种方法的好处是方便编写复杂的sql语句,也能在sql语句中写注释,提高代码可读性。这种方法适用于需要大量的参数及复杂的语句和返回结果的情况。
总之,在实际开发中我们还要根据性能和需求来灵活地选择具体的实现方法。