package net.biancheng.mapper; import java.util.List; import net.biancheng.po.Website; public interface WebsiteMapper { public List<Website> selectAllWebsite(); }WebsiteMapper.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="net.biancheng.mapper.WebsiteMapper"> <!-- 查询所有网站信息 --> <select id="selectAllWebsite" resultType="net.biancheng.po.Website"> select * from website </select> </mapper>下面对上述 XML 文件进行讲解。
<mapper resource="net/biancheng/mapper/WebsiteMapper.xml" />该语句用来引入 XML 文件,MyBatis 会读取 WebsiteMapper.xml 文件,生成映射器。
public class Test { public static void main(String[] args) throws IOException { InputStream config = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config); SqlSession ss = ssf.openSession(); WebsiteMapper websiteMapper = ss.getMapper(WebsiteMapper.class); List<Website> websitelist = websiteMapper.selectAllWebsite(); for (Website site : websitelist) { System.out.println(site); } ss.commit(); ss.close(); } }运行结果如下。
DEBUG [main] - ==> Preparing: select * from website
DEBUG [main] - ==> Parameters:
DEBUG [main] - <== Total: 1
Website[id=1,name=编程帮,url=https://www.lmcjl.com/,age=21,country=CN,createtime=Tue Feb 23 10:20:40 CST 2021]
package net.biancheng.mapper; import java.util.List; import org.apache.ibatis.annotations.Select; import net.biancheng.po.Website; public interface WebsiteMapper2 { @Select(value = "select * from website") public List<Website> selectAllWebsite(); }这里我们使用了 @Select 注解,并且注入了和 XML 中相同的 select 语句。
select * from t_user u left join t_user_role ur on u.id = ur.user_id left join t_role r on ur.role_id = r.id left join t_user_info ui on u.id = ui.user_id left join t_female_health fh on u.id = fh.user_id left join t_male_health mh on u.id = mh.user_id where u.user_name like concat('%', ${userName},'%') and r.role_name like concat('%', ${roleName},'%') and u.sex = 1 and ui.head_image is not null;如果把以上 SQL 放到 @Select 注解中,无疑会大大降低代码的可读性。如果同时还要考虑使用动态 SQL 或需要加入其他的逻辑,这样就使得这个注解更加复杂了,不利于日后的维护和修改。
<mapper resource="com/mybatis/mapper/WebsiteMapper2" />
configuration.addMapper(WebsiteMapper2.class);
元素名称 | 描述 | 备注 |
---|---|---|
mapper | 映射文件的根节点,只有 namescape 一个属性 |
namescape 作用如下:
|
select | 查询语句,最常用、最复杂的元素之一 | 可以自定义参数,返回结果集等 |
insert | 插入语句 | 执行后返回一个整数,代表插入的条数 |
update | 更新语句 | 执行后返回一个整数,代表更新的条数 |
delete | 删除语句 | 执行后返回一个整数,代表删除的条数 |
parameterMap | 定义参数映射关系 | 即将被删除的元素,不建议使用 |
sql | 允许定义一部分的 SQL,然后在各个地方引用它 | 例如,一张表列名,我们可以一次定义,在多个 SQL 语句中使用 |
resultMap | 用来描述数据库结果集与对象的对应关系,它是最复杂、最强大的元素 | 提供映射规则 |
cache | 配置给定命名空间的缓存 | - |
cache-ref | 其它命名空间缓存配置的引用 | - |
本文链接:http://task.lmcjl.com/news/18736.html