文章目录
MyBatisX
-
MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。
-
主要功能
- XML映射配置文件 和 接口方法 间相互跳转
- 根据接口方法生成 statement
statement就是映射文件里面的sql语句
-
安装方式
点击
file
,选择settings
,就能看到如下图所示界面
注意:安装完毕后需要重启IDEA
- 插件效果
红色头绳的表示映射配置文件,蓝色头绳的表示mapper接口。在mapper接口点击红色头绳的小鸟图标会自动跳转到对应的映射配置文件,在映射配置文件中点击蓝色头绳的小鸟图标会自动跳转到对应的mapper接口。也可以在mapper接口中定义方法,自动生成映射配置文件中的statement
,如图所示:
配置文件完成增删改查
我们以如下的表作为例子:
核心思想套路:
- 如何写对应的sql语句
- 完成这个功能要不要参数
- 完成之后返回什么样的结果
查询所有数据
步骤:
步骤详解:
编写接口方法
在这之前先要创建好映射文件,并且这个映射文件在resources文件夹中的位置,要跟java中的保持一致。并且最好映射文件的名字和接口名一样(不区分大小写),这样就可以不用在mybatis配置文件中重新定义映射文件路径(直接包扫描简化SQL映射文件的加载)。
接口方法:
public interface BrandMapper {
List<Brand> selectAll();
}
在sql映射文件中编写SQL语句
直接运用插件的跳转来到sql映射文件中。
<?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.zyb.mapper.BrandMapper">
<!-- <select id="selectAll" resultType="com.zyb.mybatis.Brand">-->
<!-- select * from tb_brand;-->
<!-- </select>-->
<!-- 解决有些值封装之后为null的情况-->
<select id="selectAll" resultType="com.zyb.mybatis.Brand">
select
id, brand_name brandName, company_name companyName, ordered, description, status
from
mybatis.tb_brand;
</select>
</mapper>
这个地方有几个注意点:
- 如果想要在写sql语句的时候有提示。先要在设置中设置MySQL方言,再在右侧连接数据库
- 在实体类属性名和数据库表列名不一样的时候,会出现不能自动封装数据的情况。
不能自动封装数据的三种解决办法:
①起别名
<select id="selectAll" resultType="com.zyb.mybatis.Brand">
select
id, brand_name brandName, company_name companyName, ordered, description, status
from
mybatis.tb_brand;
</select>
缺点:每次查询都要定义一次别名
②sql片段
<!--sql片段-->
<sql id="brand_column">
id, brand_name as brandName, company_name as companyName, ordered, description, status
</sql>
<select id="selectAll" resultType="brand">
select
<include refid="brand_column" />
from tb_brand;
</select>
缺点:不灵活
③resultMap创建映射关系
resultMap:
1. 定义<resultMap>标签
2. 在<select>标签中,使用resultMap属性替换 resultType属性
<!--
id:唯一标识
type:映射的类型,支持别名
-->
<resultMap id="brandResultMap" type="brand">
<!--
id:完成主键字段的映射
column:表的列名
property:实体类的属性名
result:完成一般字段的映射
column:表的列名
property:实体类的属性名
-->
<result column="brand_name" property="brandName"/>
<result column="company_name" property="companyName"/>
</resultMap>
<select id="selectAll" resultMap="brandResultMap">
select *
from tb_brand;
</select>
执行方法测试
public class Try1 {
public static void main(String[] args) throws Exception {
//获取SqlSessionFactory对象
String resource = "mybatis-config.xml"; //此处填写相对于resources的路径
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//用SqlSessionFactory对象制造SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// //用SqlSession对象来执行sql语句
// List<User> users = sqlSession.selectList("test.selectAll");
BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
List<Brand> brands = mapper.selectAll();
for (Brand brand : brands) {
System.out.print(brand.getId());
System.out.print(" " + brand.getBrandName());
System.out.print(" " + brand.getCompanyName() + " ");
System.out.print(brand.getOrdered());
System.out.print(" " + brand.getDescription());
System.out.println(brand.getStatus());
}
sqlSession.close();
}
}
查询某一条数据
使用场景:接收一条id,将这条数据的详细信息返回。
步骤:
①编写接口方法
public interface BrandMapper {
List<Brand> selectAll();
Brand selectOne(int id);
}
②在sql映射文件中编写SQL语句
<?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.zyb.mapper.BrandMapper">
<!-- <select id="selectAll" resultType="com.zyb.mybatis.Brand">-->
<!-- select * from tb_brand;-->
<!-- </select>-->
<!-- 解决有些值封装之后为null的情况-->
<!-- 创建映射关系-->
<resultMap id="brandResultMap" type="com.zyb.mybatis.Brand">
<result column="brand_name" property="brandName"></result>
<result column="company_name" property="companyName"></result>
</resultMap>
<select id="selectAll" resultType="com.zyb.mybatis.Brand">
select
id, brand_name brandName, company_name companyName, ordered, description, status
from
mybatis.tb_brand;
</select>
<select id="selectOne" resultMap="brandResultMap">
select
*
from
mybatis.tb_brand
where
id = #{id};
</select>
</mapper>
此处我们要了解三个知识点:
参数占位符
mybatis提供了两种参数占位符:
-
#{} :执行SQL时,会将 #{} 占位符替换为?,将来自动设置参数值。
-
${} :拼接SQL。底层使用的是
Statement
,因为是直接替换,会存在SQL注入问题。
使用时机:
- 参数传递,都是用#{}
- 如果要对表名、列名进行动态设置,只能使用${}进行sql拼接
parameterType使用
对于有参数的mapper接口方法,我们在映射配置文件中应该配置 ParameterType
来指定参数类型。只不过该属性都可以省略。如下图:
<select id="selectById" parameterType="int" resultMap="brandResultMap">
select *
from tb_brand where id = ${id};
</select>
SQL语句中特殊字段处理
此问题不一定发生视情况而定
以后肯定会在SQL语句中写一下特殊字符,比如某一个字段大于某个值,如下图
可以看出报错了,因为映射配置文件是xml类型的问题,而 > < 等这些字符在xml中有特殊含义,所以此时我们需要将这些符号进行转义,可以使用以下两种方式进行转义
-
转义字符(特殊字符较少时使用)
下图的
<
就是<
的转义字符。
- <![CDATA[内容]]>(特殊字符较多时使用)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/122165.html